yoyaku
Yoyaku is a lightweight, concurrency-safe resource booking and availability API for Drupal. It gives any module a small set of entities and a service API to define bookable resources, publish availability slots, and take bookings without ever overbooking, even under concurrent requests.
Why Yoyaku
Most booking solutions decide availability by counting rows, which races under load and double-books the last place. Yoyaku treats capacity as a first-class, concurrency-safe concern: every hold checks and reserves capacity atomically inside a database transaction with a row lock on the slot, so two simultaneous requests can never oversell. Holds carry a time-to-live and expire automatically, releasing capacity when a reservation is abandoned.
Core concepts
- Resource: a bookable thing (a room, a piece of equipment, an event), with a default capacity and a booking window.
- Slot: a concrete time window of a resource.
- Category: a named capacity pool inside a slot (for example Adult / Child, or Standard / Premium). Capacity lives here.
- Booking: consumes capacity on a category, following a held to confirmed lifecycle, or released, expired or cancelled.
- Tenant: the realm a row belongs to. Single-site installs transparently use a default tenant; multi-tenant installs get isolation for free.
What is included
The core module is headless and dependency-free (nothing beyond Drupal core). Presentation, workflow and payment live in optional submodules you enable as needed:
- Yoyaku UI: admin screens to manage resources, slots, categories and bookings.
- Yoyaku Calendar: a public calendar element to pick a slot and place a booking, as a block or field formatter.
- Yoyaku Node: bind a bookable resource to a node and show its calendar on the node.
- Yoyaku Webform: use a Webform as the booking form step.
- Yoyaku Order: group the bookings of one submission into a persistent order, for one payment and one customer record.
- Yoyaku Payment: deposit configuration and payment-gated confirmation, with a Worldline gateway and a testing simulator.
- Yoyaku Orchestra: drive the full booking lifecycle (hold, form, payment, confirm) as an Orchestra workflow.
- Yoyaku Manager: per-resource managers, scoping who may administer which resources.
- Yoyaku Views: expose bookings, resources, slots, orders and payments to Views.
Requirements
- Drupal 11.3 or newer
- PHP 8.3 or newer
Project status
Yoyaku is under active development and has not yet reached a stable release, so it is not covered by Drupal's security advisory policy. Interfaces may still change before a 1.0 release. Issues and merge requests are welcome.