How nextcloud/calendar works
Nextcloud Calendar is a web calendar for viewing, creating, editing, and syncing events, with sharing, invitations, availability, reminders, tasks, attachments, and integrations. The main workflow starts in the calendar UI, uses client services and stores to load or change calendar data through Nextcloud’s CalDAV backend, and presents the result in calendar views or editors. Separate flows support public appointment booking and collaborative meeting proposals. Paths and wiring reflect the tree, README, and sampled excerpts; some capability links are documented rather than verified in sampled implementation.
Main entry points: BookingController.php Booking controller · App.vue Calendar app · BookingService.php Booking service · ProposalService.php Proposal service
Components 28
Calendar experience
- Calendar app
src/App.vue - Calendar views
src/views/Calendar.vue - Event editor
src/views/EditFull.vue - Public and embed views
src/views/Proposal/ProposalPublic.vue
Client data layer
- CalDAV service
src/services/caldavService.js - Calendar stores
src/store/calendars.js - Event stores
src/store/calendarObjects.js - Free/busy services
src/services/freeBusyService.js - Contact services
src/services/autocompleteService.ts - Calendar settings
src/store/settings.js
Appointment booking
- Booking pages
src/views/Appointments/Booking.vue - Booking confirmation
src/views/Appointments/Confirmation.vue - Booking controller
lib/Controller/BookingController.php - Booking service
lib/Service/Appointments/BookingService.php - Slot generation
lib/Service/Appointments/AvailabilityGenerator.php - Appointment configuration
lib/Service/Appointments/AppointmentConfigService.php - Booking records
lib/Db/BookingMapper.php - Booking email
lib/Service/Appointments/MailService.php
Meeting proposals
- Proposal editor
src/views/Proposal/ProposalEditor.vue - Proposal client service
src/services/proposalService.ts - Proposal controller
lib/Controller/ProposalController.php - Proposal service
lib/Service/Proposal/ProposalService.php - Proposal records
lib/Db/ProposalMapper.php
Other components
- Calendar user
- Nextcloud CalDAV
- Nextcloud contacts
- Nextcloud Talk
- Nextcloud mail
Connections 30
- Calendar user → Calendar app: opens
- Calendar app → Calendar views: renders
- Calendar views → Event stores: reads events
- Event editor → Event stores: changes events
- Event stores → CalDAV service: loads and saves
- Calendar stores → CalDAV service: loads calendars
- CalDAV service → Nextcloud CalDAV: syncs events
- Calendar views → Free/busy services: requests availability
- Free/busy services → Nextcloud CalDAV: queries free/busy
- Event editor → Contact services: finds invitees
- Contact services → Nextcloud contacts: searches contacts
- Calendar app → Calendar settings: reads preferences
- Calendar user → Booking pages: opens booking link
- Booking pages → Booking controller: requests slots
- Booking controller → Appointment configuration: loads configuration
- Booking controller → Slot generation: generates slots
- Booking controller → Booking service: books or confirms
- Booking service → Booking records: persists bookings
- Booking service → Booking email: sends notifications
- Booking email → Nextcloud mail: delivers email
- Booking controller → Booking confirmation: returns outcome
- Calendar user → Proposal editor: creates or responds
- Proposal editor → Proposal client service: submits proposal
- Proposal client service → Proposal controller: calls proposal API
- Proposal controller → Proposal service: handles proposal
- Proposal service → Proposal records: reads and writes
- Proposal service → Nextcloud CalDAV: updates calendar blockers
- Proposal service → Nextcloud mail: sends proposal notices
- Booking service → Nextcloud Talk: creates room
- Calendar app → Public and embed views: renders public modes