# Open-source court booking system: the calendar is free, the court fee isn't

> ep3-bs, LibreBooking and three WordPress court plugins, checked 11 Nov 2026: licence, PHP version, who takes payments, and one plugin closed for security.

URL: https://opencals.com/blog/open-source-court-booking-system
Author: Stanislav Tyshchenko
Published: 2026-11-11
Updated: 2026-11-12
Categories: comparison

> **Key takeaway**
>
> Playtomic is the dedicated court booking platform, but it's a marketplace: players book in its app and pay it a service fee, and on your own site you get an iframe. If you want a free, self-hosted court booking system instead, install **ep3-bs**: MIT licensed, written for a tennis club's covered courts, version 1.9.1 from August 2026, PHP 8.1 or newer. It puts every court on one big calendar and lets members book. What upstream ep3-bs doesn't do is take the court fee online; that lives in a fork. If players should pay when they book, a hosted engine does that part: Opencals runs the bookings and payments, and our MIT padel and squash template, VOLT, is the club site on top. Opencals itself is not open source.

A club secretary asked me a version of this last month: "We have six courts, a spreadsheet and a WhatsApp group. Is there a free system we can just install?" There is. The harder question is the one that comes right after: who collects the €32 for Saturday at 19:00?

Most clubs I talk to already have an answer, and it isn't open source: Playtomic. So that's where this starts. Then I checked every open-source option I could find on 11 November 2026: the GitHub repositories and their install docs, the WordPress plugin directory, and the licence files. Five things came up worth your time, and one of them you should avoid.

## Playtomic is the court system most clubs already use, and it's a marketplace

If you run padel courts in Europe, you've met Playtomic. It's the dedicated court booking platform, and it's two products in one: a **player app** where people find courts, open matches and partners across thousands of clubs, and **Playtomic Manager**, the club software behind it (schedule, customers, payments, POS).

The player app is the part nothing on this page replaces. If a player found your Tuesday 21:00 court through it, Playtomic earned that booking. The trade is that it's a marketplace, built around the player rather than your club. What that means in practice, checked 11 November 2026:

- **The booking lives in their app.** Players book under Playtomic's brand, and on your own website the documented option is a white-label iframe of their booking page.
- **Players pay Playtomic a service fee** on online bookings, on top of your court price. Playtomic says the amount varies by country and currency, and it isn't refunded when a player cancels.
- **No published prices for clubs.** Manager has four tiers (Standard, Professional, Champion, Master), a two-week trial and a request form; API integrations start at Champion, the third tier.
- **Your listing depends on the subscription.** Their help centre says a club whose renewal isn't paid within 5 days is set to inactive: it disappears from the app and can't receive bookings.

None of that is Playtomic doing something wrong; it's what a marketplace is. I go through the trade in detail in [the Playtomic comparison](https://opencals.com/blog/compare/playtomic). The rest of this page is for clubs that want booking on their own site, whether instead of the app or next to it.

## ep3-bs was written for one tennis club's covered courts

The [ep-3 Bookingsystem](https://github.com/tkrebs/ep3-bs) started life booking "free squares of a covered court for a tennis club", was tried as a commercial SaaS, and was then released under the MIT licence. Its README says it outright, and the LICENSE file and composer.json agree: MIT, described as an "online booking system for courts". That makes it the only project here built for courts from day one.

What you get, checked 11 November 2026:

- **Version 1.9.1, August 2026.** 1.9.0 brought PHP 8.4 compatibility, 1.8.0 PHP 8.1. The repository shows 215 stars, 128 forks and 244 open issues.
- **One big calendar.** Courts across the top, time down the side, members click a free square. English and German ship in the box.
- **Club rules that matter.** Since 1.6.4 you can cap how many active bookings a member holds and set minimum booking ranges, which came from COVID-era court rules and still does the job of stopping one person holding every Saturday.
- **Billing as a status, not a payment.** Since 1.5 there's billing administration with custom statuses and colours. The club marks a booking paid; nobody pays online.

The install is old-school LAMP: Apache with `mod_rewrite`, PHP 8.1+ with `intl`, MySQL 5+ or MariaDB. You rename `config/autoload/local.php.dist`, put in database and mail credentials, run `setup.php`, then delete it. Two details the docs flag that I'd underline:

1. Composer currently needs `composer install --ignore-platform-reqs`.
2. Point Apache's document root at `public/`. Serving the app from `example.com/public/` is, in the project's own words, "a huge security threat".

The part nobody mentions: ep3-bs is built on Zend Framework 2, which stopped being maintained years ago (it became Laminas). Rather than migrate, the project ships its own patched copies of the ZF2 components it needs, mapped in composer.json under `src/Zend/`. It works on PHP 8.4 today. It also means one maintainer is keeping a framework alive alongside the app, so read the open issues before you commit a club to it.

## Card payments for ep3-bs live in a fork, one version behind

If you search for ep3-bs with PayPal or Stripe, you land on [hschiebold/ep3-bs](https://github.com/hschiebold/ep3-bs), a fork run by a tennis club in Rudolstadt. It adds direct payment through Payum: PayPal, and Stripe for cards, Apple Pay, Google Pay, SEPA direct debit, iDEAL and Giropay. It also adds a prepaid "budget" per member, so players can pay up front in autumn and book from it all winter.

It's honest work and the README is candid about the edges:

- It's a fork of **1.8.1**, so it trails upstream's 1.9.1 mobile and configuration changes.
- Members can't cancel bookings in their version.
- SEPA payments stay "pending" until you check Stripe by hand or set up a webhook to `/payment/booking/webhook`.
- Unpaid online bookings are cleared by a MySQL event, not by the app:

```sql
CREATE EVENT remove_unpaid_bookings ON SCHEDULE EVERY 15 MINUTE ON COMPLETION PRESERVE DO
delete from bs_bookings where `status` = 'single' and `status_billing` = 'pending'
and created < (NOW() - INTERVAL 3 HOUR)
and bid in (select bid from bs_bookings_meta where `key` = 'directpay' and `value` = 'true');
```

Read that interval again. A player who opens the checkout for Saturday 19:00 and walks away holds your best court for up to three hours and fifteen minutes. Three hours is PayPal's token lifetime, so the number isn't careless, but on a prime-time padel slot it's a long time for a court to sit unsold. If you run this fork, that event is the first thing I'd tune, and the cancellation rules are the second.

## WordPress plugins: one court free, payments from $299.99 a year

If the club website is already WordPress, a plugin is the shortest path. Three show up for court booking, and they're in very different states.

**Court Reservation** (version 1.12.4, updated three weeks before I checked, 90+ active installs, ten 5-star reviews) is the maintained option. The free version is capped at **1 court and 100 members**. Premium lifts both limits from $129.99 a year. Taking money through WooCommerce, plus per-reservation pricing, is in the Ultimate tier from **$299.99 a year**.

**BoardIt** (version 1.0.6, fewer than 10 installs) comes from the Netherlands and does something the others don't: tennis, padel and pickleball on one board, with tennis time set by the number of players (15 minutes each) and padel at 90 minutes. The free version has no limits on courts, members or bookings. The paid Pro version adds guests and a guest fee collected through the club's own Mollie key. It's a members' board, not a pay-per-court shop.

**Tennis Court Bookings** is the one to avoid. The plugin directory shows it **closed on 17 February 2026 for a security issue**, last updated six years ago, PayPal only. Older "best tennis booking plugin" lists still recommend it. If your club installed it years ago, it's no longer getting fixes.

## LibreBooking books a court the way it books a meeting room

[LibreBooking](https://github.com/LibreBooking/librebooking) (GPL-3.0) isn't a court system, but it shows up in these searches because a court is a bookable resource and LibreBooking is good at resources: quotas, approval rules, user groups, blackout times. It suits a municipal sports hall where the school, three clubs and the public all share the same courts under different rules.

It moves fast, and it has shipped three security releases since early October. The current one, checked 11 November 2026: every version before **7.2.0** (3 November 2026) has a high-severity stored XSS that lets any signed-in user take over an administrator account, and fixes are not backported. Before that, 7.1.0 fixed a forged-login flaw and 7.0.0 an admin takeover. If you run it, upgrade first and read the rest of this later. Payment is through credits a user buys, not a fee per court booking.

## Licence, payments and upkeep, option by option

| Option                            | Licence                                              | Built for courts                | Players pay online                                   | Upkeep you own                     |
| --------------------------------- | ---------------------------------------------------- | ------------------------------- | ---------------------------------------------------- | ---------------------------------- |
| Playtomic (marketplace + Manager) | Proprietary                                          | Yes (padel, tennis, pickleball) | Yes, in the Playtomic app, plus a player service fee | None; you rent it per tier         |
| ep3-bs 1.9.1                      | MIT                                                  | Yes (tennis club)               | No, billing status only                              | PHP server, patched ZF2            |
| ep3-bs Payum fork                 | MIT (fork of 1.8.1)                                  | Yes                             | PayPal, Stripe, SEPA                                 | Same, one version behind           |
| Court Reservation (WP)            | wordpress.org plugin                                 | Yes                             | WooCommerce, Ultimate tier ($299.99/yr)              | WordPress + plugin updates         |
| BoardIt (WP)                      | wordpress.org plugin                                 | Yes (tennis, padel, pickleball) | Guest fee via Mollie, Pro only                       | WordPress + plugin updates         |
| LibreBooking 7.2.0                | GPL-3.0                                              | Generic resources               | Credits, not per booking                             | PHP server, fast security releases |
| Opencals + VOLT                   | Template and SDK MIT; engine hosted, not open source | Courts and coaching             | Yes, cards via Stripe or pay at the club             | None for the engine                |

Checked 11 November 2026 on each project's repository, plugin page or pricing page.

## A court booking has a crew, a length and a split bill

Here's where courts stop looking like appointments, and where a general scheduler starts fighting you. A padel booking isn't one person seeing one staff member. It's four players, one court, a length the players pick (60, 90 or 120 minutes), and a price that's usually split. ep3-bs handles the court and the length. None of the self-hosted options handle the split, the add-ons (racket hire, balls) or the "pay now or pay at the desk" choice without plugins or code.

That's the gap I built [VOLT](https://opencals.com/blog/templates/volt) to show. It's a free Next.js 15 template, MIT on [GitHub](https://github.com/letsopencals/template-volt), and the booking engine behind it is Opencals:

- **Each court is its own resource.** A staffless product variant with one booking at a time, so booking Court 3 leaves Court 4 free.
- **Players pick the length.** Courts use a 30-minute base with custom duration up to two hours.
- **The hall map.** Every court from above, lit for one start time, with a time bar showing how many are free each half hour.
- **One request per club.** The page reads each court's free time for the whole booking window once, caches it for 60 seconds, and works out the map and grid in the browser.
- **A checkout built like a match sheet.** Court, then your crew (up to three players invited by email, each shown their share), then kit, then payment by card or at the club.

![VOLT's hall map for a padel club: six courts from above lit for an 18:00 start, two free at €32.00 per court, one taken for the day, two free from 19:30](https://media.opencals.com/seo-content/inline/1794375940484-volt-hall-map.png)

You deploy it on your own domain. Players never leave your site to book and pay no service fee on top of your court price. It doesn't have to replace a Playtomic listing: plenty of clubs should keep the app for reach and use their own site for the members who already know them.

## What 600 court bookings a month costs on each route

Take a club with six courts doing 600 bookings a month, about 20 a day. Prices checked 11 November 2026 on opencals.com/pricing and the plugin pages; card processing fees aren't included anywhere below.

| Route                                          | Software cost per month                                  | Takes the court fee online                      |
| ---------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------- |
| Playtomic Manager                              | Not published (four tiers, request a quote)              | Yes, in the app; players also pay a service fee |
| ep3-bs on your own server                      | $0 licence, plus hosting and your time                   | No                                              |
| Court Reservation Ultimate (WP)                | about $25 ($299.99/yr), plus hosting                     | Yes, via WooCommerce                            |
| Opencals fixed plan + Flexible duration add-on | $14.98 + $9.98 + 300 extra bookings × $0.20 = **$84.96** | Yes                                             |
| Opencals Elastic                               | 600 × $0.99 = **$594**                                   | Yes                                             |

Elastic, at $0.99 a booking with no monthly fee, is built for quiet or seasonal volume. For a busy court club it's the wrong plan, and the pricing page itself says a fixed plan is cheaper past about 16 bookings a month. The fixed plan covers 300 bookings, then $0.20 each, and VOLT's player-picked game length is the Flexible duration add-on. One more limit: the fixed plan is self-serve for **up to 3 locations and 10 staff**. A four-club network like VOLT's demo (Madrid, Barcelona, Valencia, Málaga) needs a custom plan or Elastic.

## Where I'd tell a club not to use Opencals

I'd rather you pick the right tool than ours:

- **Members-only club, no court fee.** If members pay an annual subscription and book for free, you don't need a payments engine. ep3-bs or BoardIt does the job for $0.
- **You want the source of the whole system.** Opencals isn't open source. The templates, the `@opencals/storefront-sdk` and the agent skills are MIT; the engine is hosted.
- **Memberships with booking rights.** Membership features in Opencals are in beta, so "members book two weeks ahead, guests one week" is something I'd test in a free development store before promising it to a committee. That store is in test mode with every feature on, no card needed, and it can't take real payments.

If players pay per court, and you want them booking on your own site rather than a marketplace app, that's the case Opencals is built for.

- [VOLT: free padel & squash club template](https://opencals.com/blog/templates/volt): MIT-licensed Next.js site with a hall map, court grid, crew invites and coach-led training.
- [Playtomic alternative](https://opencals.com/blog/compare/playtomic): What a club gives up when the booking page belongs to a marketplace, and what it costs to own it.
- [Open-source booking systems in 2026](https://opencals.com/blog/open-source-booking-system): Which general-purpose booking projects are still open source, and when self-hosting is worth it.
- [Booked Scheduler and LibreBooking](https://opencals.com/blog/booked-scheduler-alternatives): The upgrade path, the security advisories and what the paid Booked plans include.
- [Open-source gym management software](https://opencals.com/blog/open-source-gym-management-software): GYM One, Openfront Gym and wger checked: classes, memberships and licences.
- [Open-source event booking and ticketing](https://opencals.com/blog/open-source-event-booking-system): Tournaments and club nights: Hi.Events, pretix and three more ticketing projects, licences checked.

## Frequently asked questions

### Is Playtomic open source, and is there an open-source alternative?

No. Playtomic is a proprietary marketplace: a player app plus club software (Playtomic Manager) on four tiers with no published prices. Players pay it a service fee on online bookings that varies by country and isn't refunded on cancellation. The open-source options are ep3-bs for court calendars and WordPress plugins such as Court Reservation; Opencals with the MIT VOLT template puts paid court booking on your own site.

### Is there a free open-source tennis court booking system?

Yes. ep3-bs (the ep-3 Bookingsystem) is MIT licensed and was built for a tennis club's covered courts. Version 1.9.1 shipped in August 2026 and needs PHP 8.1 or newer, Apache and MySQL. It shows every court on one calendar, lets members book, and limits how many active bookings each member holds. Upstream ep3-bs doesn't take online payments.

### Can ep3-bs take online payments?

Not upstream; it records a billing status the club sets by hand. A fork (hschiebold/ep3-bs, based on version 1.8.1) adds PayPal and Stripe through Payum, including cards, Apple Pay, Google Pay, SEPA and iDEAL. It clears unpaid bookings with a MySQL event after three hours, and members can't cancel bookings in that version.

### Does LibreBooking work for sports courts?

It can, if you treat each court as a resource. LibreBooking (GPL-3.0) is strong on quotas, approvals and user groups, which suits a shared sports hall. It has no court-specific features and charges through credits rather than per booking. Run 7.2.0 or later: every earlier version has a stored XSS flaw that allows an admin account takeover (checked 11 November 2026).

### Is the Tennis Court Bookings WordPress plugin still available?

No. The WordPress plugin directory lists Tennis Court Bookings as closed since 17 February 2026 for a security issue, and it hadn't been updated in about six years. Court Reservation is the maintained alternative; its free version covers 1 court and 100 members, and online payments need the Ultimate tier from $299.99 a year.

### Is Opencals open source?

No. Opencals is a hosted booking and payments engine. The VOLT padel and squash template, the other Next.js templates, the storefront SDK and the agent skills are MIT licensed, so you own the club website and the code. The free development store has every feature in test mode and can't take real payments.
