Product support

Visit this product's website for support.


Provide reservation form with reservations management. You can define time slot length (default 15 minutes) and one reservation length (default 2 hours). After each reservation, this time slots are taken and it's not possible to make another reservation for this time (time picker slots are disabled). This reservation can be cancelled to release that taken time slots.

Related plugins

Key features

  • reservations have coloured statuses, bulk actions and fulltext search to save your time
  • nice and clean dashboard widget
  • reservations export with status filtering
  • reservation can be created directly from the backend
  • returning customers function

Technical features

  • shipped with translations and covered by unit tests
  • reservation form has CSRF protection and multiple bots submissions protection
  • reservation form has AJAX sending and also non-JS fallback
  • overloadable data seeding for statuses
  • no other plugin dependency

Real usage screenshot

Status management

More screenshots

Status management with coloured icons:

Status management

Status detail

Status usage

Filtering by status:

Status usage

Reservations export with status filtering:

Status usage

Reservations management


  1. Insert reservation form component to your page.
  2. Be sure you have jQuery loaded!


You can set time slot length (default: 15 minutes) and reservation length, which means how much time one reservation takes (default: 2 hours).

If you have reservations at 13.10.2016 at 11:00 and also at 13:00, both with 2 hours length, all time slots from 09:15 to 14:45 will be booked (with 15 minutes slot length).

------------ 11:00 ------------- 13:00 --------------

Because nearest previous reservation can be done at 09:00 (with 2 hours lengths till 11:00) and next reservation at 15:00.

Returning Customers

Plugin allow you to mark returning customers:

  • set amount of previous reservations at Backend > Settings > Misc > Reservations
  • at reservations listing, click at the list settings (the hamburger at the right corner) and check Returning
  • it shows star at customers with more then <your-threshold> non-canceled reservations

Units, capacity, prices

If you need to manage your units (cars, teachers, tables), with some capacity (4 seats, group of 10 people), with some price - you should definitely check reservations units plugin.

Backend calendar

Looking for backend calendar to see your reservations visually? Take a look at backend calendar plugin.

Override configurations

When you want to override default plugin's config.php, which is placed at plugin's folder /config, just create file:


And override values you want to change. Example of this file:

<?php return [
    'formats' => [
        'date' => 'd.m.Y H:i:s',

Extending plugin

If you want to extend some plugin and don't know how, check Brands extending examples repository, where you can find many examples which can be applied on every plugin including this one.

Public facade

For other plugins you can use plugin's facade vojtasvoboda.reservations.facade with some public methods as follows:

$facade = App::make('vojtasvoboda.reservations.facade');
$facade->storeReservation(array $data);
$facade->isDateAvailable(\Carbon\Carbon $date);

Override seeding

For override seeding just copy seed files from plugin's folder /updates/sources and copy them to:


For example:


This file will be load with first migration, or you can force refreshing migrations with this command:

php artisan plugin:refresh VojtaSvoboda.Reservations

Unit tests

Build Status

Just run phpunit in the plugin directory. For running plugin's unit tests with project tests, add this to your project phpunit.xml file:

    <testsuite name="Reservation Tests">

Receiving "Class 'PluginTestCase' not found" error? Just type composer dumpautoload at your project root.

Code check



Reservations plugin is open-sourced software licensed under the MIT license same as OctoberCMS platform.

Icon made by Freepik from www.flaticon.com.

  • Found the plugin useful on 5 Nov, 2022

    A wonderful light weight booking and appointment system. A nice solution for handling appointments for clients. Support has been excellent and there are no issues on October V3.1

  • Found the plugin useful on 22 Mar, 2021

    Hello Could you include an email on the reservation change status change please

  • author

    Replied on 23 Mar, 2021

    Hello Edwin, please follow this issue https://github.com/vojtasvoboda/oc-reservations-plugin/issues/41

  • Found the plugin useful on 24 Jan, 2020

    Thank you very much for this very useful plugin!

    We would like to extend it with sending an individual email when the status of the reservation is changed. Can you please tell us how to hook into the status events?

  • author

    Replied on 25 Jan, 2020

    There is no special event fired when status changed. But you can use Eloquent events on Reservation model. Check Laravel documentation.

    This should also works:

    Reservation::updating(function ($reservation) {
        Log::info('event updating');
    Reservation::updated(function ($reservation) {
        Log::info('event updated');

  • Found the plugin useful on 25 Jul, 2019

    Is there a way to disable some of the input fields without totally rewriting the whole thing?

  • author

    Replied on 28 Jul, 2019

    Yes, when you insert reservation component to the page, just press Cmd/Control and double-click on the word "component" and editor will unpack the component to the editable code where you can disable some inputs. When you want to disable required input, just remove it from the form and insert hidden input with fixed value instead.

  • Found the plugin useful on 23 Apr, 2019

    Hello Vojta,

    Your plugin is really nice and works well! Is it possible to add a custom dropdown on the frontend to let user choose between two services? How could I set it up?


  • author

    Replied on 23 Apr, 2019

    You can use plugin Reservations Units which extends this plugin with more units (slots / tables / services / cars / consultants: https://octobercms.com/plugin/vojtasvoboda-reservationsunits

  • Found the plugin not useful on 30 Jul, 2018


    I have just added this plugin to my project and its not working. Its not showing in my backend menu, nor in my updates and plugins list of plugins however it has installed. If i go to the the plugins menu i can VojtaSvoboda.TwigExtensions but that's it. If i go to the actual pluging directory i can see vojtasvoboda reservationscalendar. From the backend if i click Reservations -> reservationscalendar I get an error "Unable to find the specified settings."

    Whats going on here?

  • Found the plugin useful on 17 Jan, 2018

    Very usefull plugin!

  • Found the plugin useful on 20 Nov, 2017

    Great plugin!!!

  • Found the plugin useful on 14 Sep, 2017

    It's very nice plugin ! I had questions for this plugin :

    • I would like to deactivate the reservations for this day from some hours. For example, from 5PM the reservations for the rest of this day are disable. How modify the code to do that ?
    • How to make so that several customers can book the same schedule ? For example, 4 customers can book one hour and more than 4 bookings the schedule is blocked.

    I hope to receve a response for my questions. Thanks for your plugin

  • author

    Replied on 18 Sep, 2017

    Thanks for the positive review! If you want to block some time interval, the easiest way is to create your own reservation from 5 p.m. to midnight. For more reservations in one date please check Reservations Units plugin - it's made exactly for this purpose. For more questions, feel free to send me an email or message, I will be glad to help.

  • Found the plugin useful on 18 May, 2017

    very nice plugin! After I install this plugin. I suddenly find we still need another module, 'Payment system'! because this is very important for the reservation circle for make "MONEY", yes, you know what I mean.

    After the reservation has been made. the system shall take him to the payment page. after the pay agency redirect to the server. the reservation then put the recorder into system. or make the status to paid.

    for front-end. the disabled book time shall be always available, until it has been paid.

  • author

    Replied on 19 May, 2017

    Hi Mike, feel free to create this plugin. I could make some hooks or other functionality if you will it :-) Let me know.


Update statuses sort order column from boolean to smallInt

Feb 08, 2022


Dutch (Nederlands) translation (thanks to Albert van Osch)

Feb 24, 2021


Romanian locale (thanks to Bogdan Barbalata)

Dec 14, 2019


Translations fixes

Sep 19, 2019


Add Spanish admin mail template (thanks to DamsFX)

Aug 30, 2019


Add French translations (thanks to DamsFX)

Aug 19, 2019


Fix validations

Dec 09, 2017


Fix working days

Sep 22, 2017


Make date picker translatable to french.

Aug 12, 2017


Put old method back for backward compatibility.

May 15, 2017


Move configs to settings, add working days and opening hours, better validation of selected date.

May 15, 2017


Add translate settings, add translate front, fix error

May 10, 2017


Add russian lang

May 05, 2017


Fix form labels names.

Apr 08, 2017


Enable backend date availability validation when reservation is changing.

Mar 07, 2017


Fix sending confirmation email to admin by locale chosed at backend.

Mar 07, 2017


Refactor plugin's mailers.

Dec 16, 2016


Add Admin confirmation function.

Dec 15, 2016


Fix reservation datepicker JS.

Dec 15, 2016


Returning customers function.

Dec 14, 2016


Add Spanish locale (thanks to Victor van Herpt)

Dec 13, 2016


Count all reservations with same email and put it to the confirmation mail template.

Dec 12, 2016


Add method getReservationByInterval() to facade to better extensibility.

Dec 04, 2016


First version of Reservations

Oct 14, 2016