PHPackages                             reachweb/statamic-resrv - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. reachweb/statamic-resrv

ActiveStatamic-addon[Utility &amp; Helpers](/categories/utility)

reachweb/statamic-resrv
=======================

A booking engine for Statamic. Supports availability calendar and online reservations.

v6.1.0(2d ago)1566121proprietaryPHPPHP ^8.4CI passing

Since Oct 11Pushed 5d ago1 watchersCompare

[ Source](https://github.com/reachweb/statamic-resrv)[ Packagist](https://packagist.org/packages/reachweb/statamic-resrv)[ Docs](https://resrv.dev)[ RSS](/packages/reachweb-statamic-resrv/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (55)Versions (81)Used By (1)

Statamic Resrv, a Statamic reservation engine
=============================================

[](#statamic-resrv-a-statamic-reservation-engine)

[![Resrv logo](https://private-user-images.githubusercontent.com/7423993/365665022-36e959ff-976d-4e2b-8268-5d48769fe546.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxMzQ5NjUsIm5iZiI6MTc4MzEzNDY2NSwicGF0aCI6Ii83NDIzOTkzLzM2NTY2NTAyMi0zNmU5NTlmZi05NzZkLTRlMmItODI2OC01ZDQ4NzY5ZmU1NDYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwNCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDRUMDMxMTA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTRmOGVkNjlkYTJjNjZjMWMzMjM3ZDA2MTMzN2NhYzAwOGQyNzZmZDMyZTFkOTFlY2QzYWUyM2YwMDNkOGZmOCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.-E_jbkLlCgK1Fgl633yyCkkIk4IQXO9JVK5_rvJLyRU)](https://private-user-images.githubusercontent.com/7423993/365665022-36e959ff-976d-4e2b-8268-5d48769fe546.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxMzQ5NjUsIm5iZiI6MTc4MzEzNDY2NSwicGF0aCI6Ii83NDIzOTkzLzM2NTY2NTAyMi0zNmU5NTlmZi05NzZkLTRlMmItODI2OC01ZDQ4NzY5ZmU1NDYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwNCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDRUMDMxMTA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTRmOGVkNjlkYTJjNjZjMWMzMjM3ZDA2MTMzN2NhYzAwOGQyNzZmZDMyZTFkOTFlY2QzYWUyM2YwMDNkOGZmOCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.-E_jbkLlCgK1Fgl633yyCkkIk4IQXO9JVK5_rvJLyRU)

**Statamic Resrv** is a content agnostic reservation engine built using Laravel and "living" inside a Statamic CMS installation. It integrates with the power of Statamic to provide a powerful and flexible reservation system for any possible use.

Resrv is designed to be flexible and cater to many different business scenarios like a hotel, a restaurant, a conference, car rental, boat rental, doctors and more.

Besides the core functionality, it also has many extra functionalities that can be used to build your reservation system. That way, every business can have an in house reservation system on their website and take reservations without paying huge reservation fees or expensive monthly subscriptions.

Documentation
-------------

[](#documentation)

Full documentation:

Upgrading from v5? Read the upgrade guide first:

Requirements
------------

[](#requirements)

- PHP 8.4+
- Laravel 12 or 13
- Statamic 6.11+
- Livewire 3.6.4+ or Livewire 4

Features
--------

[](#features)

- Availability and price management: set the available items and the price per day.
- Rates: create multiple rate plans per collection with independent or relative pricing, independent or shared inventory, date and stay restrictions, and per rate cancellation policies.
- Ready to use frontend availability search and checkout built with Laravel Livewire.
- Extra frontend components: a live availability list for a whole collection, a list of upcoming available dates, and cart based multi rate or multi date booking in a single reservation.
- Online reservation and payment with several gateways at checkout. Stripe works out of the box, a built in Offline gateway covers bank transfer or pay at the premises, and Mollie is available as a separate package. Each gateway can add its own surcharge and amount limits.
- Flexible charging: take the full amount, a downpayment, or nothing at all, with a built in way to offer refunds for cancelled reservations.
- Email notifications to admins and customers, customisable per event and per checkout form, plus opt in abandoned reservation recovery emails.
- Reservation rules: set the maximum or minimum days for a reservation, the minimum days before arrival, or charge an extra day based on drop off time.
- Reservation list and calendar, so you never let a reservation slip away.
- Options: selectable choices per booking, with or without an extra charge, that apply to a whole collection or to selected entries, with values you can disable per entry.
- Extras: global items offered with or without an extra charge, that can be conditionally shown, hidden, or required.
- Surcharges: add a flat fee when a customer's choice in one option differs from another, for example a one way fee when the pickup and drop off locations are different.
- Fixed pricing: set a fixed price schedule for specific date ranges.
- Dynamic pricing: increase or decrease prices based on a set of rules, including coupon codes.
- Affiliates: track referrals with cookie based attribution and per affiliate commissions.
- Easily adjustable checkout forms using the Statamic form editor.
- Control Panel settings: manage business, reservation, checkout, email, and currency settings right in the Control Panel.
- Reporting and CSV export: see a quick summary of how your business is doing, run reports by reservation date or booking date, and export reservations to CSV with filters.
- Highly tested codebase: over 1,200 tests with thousands of assertions.

Testing
-------

[](#testing)

The addon ships two independent, additive test suites.

**Headless suite (default).** Over 1,200 PHPUnit tests on Orchestra Testbench with in-memory SQLite. This suite owns validation, pricing and availability math, cutoff/quantity/date rules, checkout orchestration and every state transition.

```
composer test          # full suite (SQLite in-memory)
composer test-pgsql    # the same suite against PostgreSQL
vendor/bin/pint        # code style
```

### Browser tests

[](#browser-tests)

A separate [`orchestra/testbench-dusk`](https://packagist.org/packages/orchestra/testbench-dusk) suite — still plain PHPUnit, no Pest — drives a **real headless Chrome** through the frontend Livewire funnel. It covers only what the headless suite cannot: Alpine/JS behaviour (the date calendar, steppers, the phone combobox), real `/livewire/update` round-trips through Statamic's routing, asset load order, and the whole search → checkout → confirmed flow in a real DOM. Browser tests are **not** a second copy of the headless suite; everything else stays headless.

**Prerequisites:** Google Chrome (or Chromium) installed locally, plus a matching ChromeDriver:

```
php vendor/bin/testbench dusk:chrome-driver --detect
```

**Running:**

```
# 1. Build the Workbench host app: creates, migrates and seeds the shared file
#    SQLite DB and publishes the frontend bundle. Re-run after editing the
#    seeder or adding Statamic fixtures.
php vendor/bin/testbench workbench:build

# 2. Run the suite (headless), or headed to watch it in a visible browser:
composer test:browser
composer test:browser:headed
```

`composer test` never launches Chrome: the browser suite has its own `phpunit.dusk.xml` and is deliberately absent from the default and PostgreSQL suites.

**Adding a scenario.** Drop a `*Test.php` in `tests/Browser/` extending `Reach\StatamicResrv\Tests\Browser\BrowserTestCase`. The base boots the same Statamic + addon + Livewire stack as the served app, truncates and re-seeds the shared DB before each test, and clears the session cart. Fixtures come from the `SeedsBookableContent` trait (a collection, a bookable entry, a rate, a wide availability window, an extra, an option, checkout entries); add per-test variants as needed, and register any per-served-app config (e.g. a second payment gateway) through testbench-dusk's `#[BeforeServing]` hook rather than `Config::set()` in the test body.

**Gotchas** (full reasoning in [`browser-testing.md`](browser-testing.md)):

- `resrv-frontend.js` must load **before** Livewire's scripts, and there must be exactly one Alpine — a second instance silently kills the calendar.
- The browser runs in a **separate process** from the test, so both share a **file** SQLite DB and a **file** session (never `:memory:` / `array`).
- The frontend bundle publishes to `public/vendor/statamic-resrv/frontend/…` under the addon slug tag `statamic-resrv`.
- Keep `APP_URL` aligned with the Dusk serve port (default `8001`).

**What is and isn't browser-tested**

Headless suite ownsBrowser suite ownsValidation, pricing &amp; availability math, cutoff/quantity/date rulesThe Alpine date calendar (open / range / clear)Checkout step orchestration &amp; state transitionsQuantity steppers, rate dropdowns, the `dictionary_phone` combobox, togglesExtras/Options enable-disable &amp; price mathThe full search → checkout → offline-**confirmed** funnel in a real DOMAll non-JS field typesCoupon / dynamic-pricing reactivity, the `window.L` global-leak guard, cross-collection rate reconciliationLicense
-------

[](#license)

When you are ready to deploy to production you need to buy a license at the Statamic Marketplace. Statamic Resrv is **not** free software.

Issues and pull requests
------------------------

[](#issues-and-pull-requests)

Feel free to open an issue right here on Github. Email us directly for a security issue:

###  Health Score

60

—

FairBetter than 98% of packages

Maintenance99

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity83

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 90.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~30 days

Recently: every ~17 days

Total

58

Last Release

2d ago

Major Versions

v2.2.2 → v3.0.0-beta2024-05-28

v2.2.3 → v4.0.02025-02-28

v4.1.0 → v5.0.02025-11-15

v5.1.2 → v6.0.0-beta12026-03-19

v5.2.0 → v6.0.0-beta32026-05-12

PHP version history (6 changes)v1.0.0PHP ^7.4 || ^8.0

v1.5.0PHP ^7.4 || ^8.0 || ^8.1

v1.5.1PHP ^8.0 || ^8.1

v2.0.0PHP ^8.0

v3.0.0PHP ^8.2

v6.0.0PHP ^8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/043c16e10a57aa2e23f25400c12c1ef9c809ddcb369fbd79cf9c162d89fa8289?d=identicon)[reachweb](/maintainers/reachweb)

---

Top Contributors

[![afonic](https://avatars.githubusercontent.com/u/7423993?v=4)](https://github.com/afonic "afonic (1356 commits)")[![StyleCIBot](https://avatars.githubusercontent.com/u/11048387?v=4)](https://github.com/StyleCIBot "StyleCIBot (116 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (21 commits)")[![cat4dev](https://avatars.githubusercontent.com/u/52063318?v=4)](https://github.com/cat4dev "cat4dev (1 commits)")[![claude](https://avatars.githubusercontent.com/u/81847?v=4)](https://github.com/claude "claude (1 commits)")

---

Tags

booking-systemlaravellaravel-packagereservation-systemreservationsstatamicstatamic-addonavailabilitystatamicbookingreservationsResrvResrv App

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/reachweb-statamic-resrv/health.svg)

```
[![Health](https://phpackages.com/badges/reachweb-statamic-resrv/health.svg)](https://phpackages.com/packages/reachweb-statamic-resrv)
```

###  Alternatives

[duncanmcclean/statamic-cargo

Comprehensive e-commerce addon for Statamic. Build bespoke e-commerce sites without the complexity.

3417.0k](/packages/duncanmcclean-statamic-cargo)[venturedrake/laravel-crm

A free open source CRM built as a package for laravel projects

43411.2k](/packages/venturedrake-laravel-crm)[aerni/livewire-forms

A Statamic forms framework powered by Laravel Livewire

2915.1k](/packages/aerni-livewire-forms)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135224.7k7](/packages/statamic-rad-pack-runway)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.4k](/packages/tomshaw-electricgrid)[rias/statamic-redirect

29335.6k](/packages/rias-statamic-redirect)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
