PHP scheduler organized around services and providers
Easy!Appointments is a PHP web app for appointment booking, installed on your own server. It is organized around a team: an admin defines services (duration, price, category) and providers, each with working hours, breaks and exception days. On the public booking page, a customer picks a service, a provider or "any provider", then a time slot. Secretary accounts manage the calendars of the providers assigned to them.
Cal.com also gives customers a page to pick their own slot, but its public repository, now Cal.diy, requires Node.js and PostgreSQL, whereas Easy!Appointments needs only PHP and MySQL. Rallly solves a different problem: getting a group to vote on dates.
The comparison of open source scheduling tools sets its stack and release pace against the other tools.
Two-way Google Calendar sync and a drop-in folder install
- Fits next to an existing website: the project says it can live in a single folder on the server and even share an existing MySQL database.
- Calendar sync: each provider links a Google Calendar, synced in both directions, or a CalDAV server. A cron job (
php index.php console sync) syncs every provider in one pass. - Meeting links: since 1.6.0, appointments booked online get a Jitsi link, and providers synced with Google can attach a Google Meet link.
- Integration points: a REST API described in an OpenAPI file, webhooks, and LDAP or Active Directory for user accounts.
- CAPTCHA on public forms since 1.6.0, with ALTCHA as an alternative to the image CAPTCHA.
- UI in 41 languages, French included.
Security fixes still in beta, no reminders or payments
PHP 8.2 and MySQL; the repository's Docker setup is for development. The installation guide asks for Apache 2.4 with mod_rewrite, PHP 8.2 and MySQL 5.7 or later, which most web hosts already provide. You upload the files, fill in config.php, and a web wizard finishes the install. The documentation warns against running the repository's docker-compose.yml in production. The production image, alextselegidis/easyappointments, comes from a separate repository and expects MySQL in a second container.
No reminders before the appointment, no payments. Emails go out when an appointment is created, changed or cancelled. Automatic reminders ahead of the appointment have been requested since September 2021 (issue #1132, still open). A service has a price, but the code has no payment module.
Free to use, with the brand in the footer. The code is GPL-3.0, commercial use included. The booking page shows "Powered By Easy!Appointments", hard-coded in its template. The author sells white-label licenses separately, including an "Extended" one for SaaS providers and resellers, plus managed hosting and support, with no published prices.
Built for a service team. The homepage names healthcare, education, salons and recruitment, among others. For a one-person business, the guide suggests a single provider named after the company.
One maintainer, sparse stable releases. Alex Tselegidis has 3,577 commits in the repository, which dates from 2014; the next contributor has 41. Twenty-eight months passed between 1.4.3 (March 2022) and 1.5.0 (July 2024). Then came 1.5.1 (January 2025), 1.5.2 (September 2025) and 1.6.0 (May 27, 2026). 1.6.1 has been in beta since September 7, 2026.
Seven security advisories published in 2026. The most serious, rated high, affected 1.5.2 and allowed appointment takeover; 1.6.0 fixes it. The 1.6.1 pre-release notes list further security fixes, including a CAPTCHA that could be bypassed and providers' CalDAV passwords returned to secretary accounts. On October 7, 2026, no stable release included them.
