Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: OpenID Connect / OAuth client 3.0.0-alpha9 New alpha version released for module openid_connect (3.0.0-alpha9). Release: Opensolr Search 4.5.0 Minor update available for module opensolr_search (4.5.0). Release: Timelinr 1.0.1 Minor update available for module timelinr (1.0.1). Usage Milestone: Simplify Module simplify crossed 10,000 active installs. Usage Milestone: Views Reference Filter Module entityreference_filter crossed 10,000 active installs. Usage Milestone: Dropdown Language Module dropdown_language crossed 10,000 active installs. Usage Milestone: Paragraphs Browser Module paragraphs_browser crossed 10,000 active installs. Usage Milestone: OpenAPI Module openapi crossed 10,000 active installs. Usage Milestone: Decoupled Router Module decoupled_router crossed 10,000 active installs. Module Revived: Entityqueue Buttons 1.1.2 Module entityqueue_buttons updated after 8 months of inactivity (1.1.2).

Bookable Calendar

337 sites Security covered Drupal 9–11
View on drupal.org

This module provides a simple way to create a bookable calendar for your website. You can set up specific times and dates when users can book appointments, reserve resources like conference rooms, or schedule lessons.

Bookable Calendar provides capacity-aware scheduling and reservations for Drupal. Administrators
define calendars and recurring opening rules, and permitted authenticated or anonymous users can reserve the
generated time slots.

It works well for appointments, lessons, office hours, consultations, conference rooms, group sessions,
equipment, and other resources with limited availability.

Bookable Calendar 3.1

Bookable Calendar 3.1 builds on the Drupal 11+ reservation system introduced in 3.0 and adds optional Drupal
Commerce checkout and reverse availability synchronization with Google Calendar and Microsoft Outlook Calendar.

Highlights

  • Create multiple calendars with independent capacity, booking windows, permissions, descriptions, and
    notification settings.
  • Define one-time or recurring opening schedules using Smart Date and Smart Date Recur.
  • Automatically generate individual reservable opening instances.
  • Support authenticated and anonymous reservations through Drupal permissions.
  • Support individual and group reservations with configurable party sizes.
  • Prevent concurrent requests from overbooking the same opening.
  • Manage reservations, attendance, check-in status, and availability through Drupal administration and Views. li>
  • Send queued confirmation and cancellation notifications with HTML templates, tokens, previews, language-aware
    rendering, and per-calendar overrides.
  • Expose calendars, opening definitions, opening instances, and reservations through Drupal JSON:API.
  • Provide custom endpoints for booking, availability, check-in, and check-out integrations.
  • Ship schema-backed Single Directory Components for availability, booking actions, and opening groups.
  • Use Drupal access control, validation, CSRF protection, locking, and entity APIs throughout the reservation
    process.

Google Calendar and Microsoft Outlook integration

Optional included submodules connect Bookable Calendar to Google Calendar or Microsoft Outlook Calendar through
OAuth. Each Bookable Calendar can use its own external account and destination calendar.

Reservation event synchronization

Outbound reservation synchronization creates a separate private external event for each confirmed reservation and
invites only that customer. Updating or cancelling the reservation updates or removes its corresponding event.

Creating separate events protects customer privacy when several people reserve the same opening.

Availability synchronization (new in 3.1)

Inbound availability synchronization can automatically prevent visitors from booking opening instances that
conflict with busy events already on a connected Google or Microsoft calendar.

  • Enable availability synchronization separately for each connected calendar.
  • Keep outbound reservation event synchronization and inbound availability synchronization under separate,
    clearly labeled controls.
  • Use Drupal cron to periodically reconcile upcoming openings with external busy periods.
  • Temporarily mark conflicting openings unavailable across rendered calendars, Views, API responses, and booking
    validation.
  • Restore openings automatically when external meetings are moved or removed.
  • Ignore events originally created by Bookable Calendar so reservation synchronization does not block its own
    opening.
  • Preserve existing reservations when a new external conflict appears.
  • Process provider requests through queues with retry handling for temporary failures.

Availability synchronization is opt-in and reversible. It does not delete opening instances or existing
reservations.

Paid reservations with Drupal Commerce (new in 3.1)

The optional Bookable Calendar Commerce submodule adds capacity-safe paid reservations through Drupal Commerce
3.x checkout.

  • Assign a published Commerce product variation to an individual Bookable Calendar.
  • Charge once per reservation or multiply the quantity by the reservation's party size.
  • Temporarily hold capacity while the customer completes checkout.
  • Configure checkout holds from 5 to 120 minutes.
  • Confirm the reservation only after Commerce reports that the order is fully paid.
  • Release capacity when an order item is removed, an order is cancelled, or an unpaid hold expires.
  • Use a separate Commerce order item for each reservation.
  • Prevent one-click booking or direct API requests from bypassing payment on priced calendars.

Expired payment holds are cleared by Drupal cron. Payment gateways and site-specific Commerce workflows remain
responsible for refund processing.

How it works

  1. Create a Bookable Calendar.
  2. Configure its capacity, booking window, permissions, and notifications.
  3. Add an opening definition with one or more dates or a recurrence rule.
  4. Optionally configure Google Calendar, Microsoft Outlook Calendar, or Drupal Commerce.
  5. Give the appropriate roles permission to view calendars and create reservations.
  6. Visitors can view future availability and reserve an opening.

Requirements for 3.x

  • Drupal 11 or 12
  • PHP 8.3 or newer
  • PHP Sodium extension
  • Smart Date 4.3 or newer
  • Smart Date Recur

Installing 3.1

Install the current 3.1 prerelease with Composer:

composer require 'drupal/bookable_calendar:^3.1@alpha'
  drush en bookable_calendar

After updating an existing site, run:

drush updb
  drush cr

Drupal cron should run regularly when using notifications, external calendar synchronization, or Commerce payment
holds.

Optional integrations

  • Drupal Commerce provides paid reservations and
    checkout.
  • ECA can provide time-based reminder workflows. It is not
    required for confirmation or cancellation notifications.
  • BPMN.iO is only required when administrators need to edit
    ECA workflows visually.
  • Token provides additional notification tokens and an
    administrative token browser.
  • Views Bulk Operations enables the included
    bulk-booking integration.
  • Calendar View can provide Views-based calendar
    displays.
  • FullCalendar can provide standard calendar
    listings.

Upgrading from 2.x

Version 3.x contains a major data-model update. It consolidates legacy per-attendee Booking rows into Booking
Contact reservations with a party size and removes the legacy booking entity type.

Before upgrading:

  1. Back up the complete site and database.
  2. Update to the latest 2.2 release.
  3. Apply all available 2.2 database updates.
  4. Read the upgrade guide before replacing the module code.

Sites with custom fields on the legacy Booking entity require a site-specific migration.

Documentation and support

Slack channel

Join the Drupal Slack community and visit the #bookable-calendar channel for discussion and
support.

Depends on

Dependencies of the latest stable release

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
8
Tracked since
May 2025
Latest release
5 days ago
Releases (12 mo)
7 ▲ from 1
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
3.1.0-rc1 Pre-release 11 Aug 26, 2026
3.1.0-alpha2 Pre-release 11 Aug 20, 2026
3.1.0-alpha1 Pre-release 11 Aug 18, 2026
3.1.x-dev Dev 11 Aug 18, 2026
3.0.0-rc2 Pre-release 11 Aug 18, 2026
3.0.0-rc1 Pre-release 11 Aug 18, 2026
3.0.x-dev Dev 11 Aug 18, 2026
2.2.13 Stable 9–11 May 27, 2025