EA

Easy!Appointments

Open-source web appointment scheduler

Groupware ★ 4.4k stars Easy setup GPL-3.0

Easy!Appointments is a highly customizable web application that lets customers book appointments online. It is a lightweight self-hosted scheduling tool that integrates with Google Calendar.

Key features

  • Online appointment booking
  • Google Calendar sync
  • Customizable services and providers
  • REST API

Pros & cons

Strengths

  • Lightweight and easy
  • Good for small businesses

Trade-offs

  • Booking-focused, not full groupware
  • Dated UI

Easy!Appointments replaces

Last reviewed Sep 13, 2026 · 764 words

A one-chair barber, a physiotherapist, a tutor, a small clinic with 3 practitioners: that is who runs Easy!Appointments, and for them it replaces Calendly's paid tier (around $10 per seat per month at last check) with a PHP container and a MariaDB. It has been doing this since 2013, the catalogue lists it at 4,353 stars under GPL-3.0, and the booking flow customers see is fine. What it is not is a team scheduling tool with round-robin routing, payments or video links, and knowing that up front saves an evening of disappointment.

Providers, services, and the page customers see

The model is simple. You define services (a 30-minute cut, a 60-minute consult), providers (the people), and each provider's working hours and breaks. Customers land on the public booking page, pick a service, pick a provider or "any", pick a slot from the availability grid, enter their details, and receive a confirmation email with a link to reschedule or cancel. Staff manage everything from a back-office calendar that looks dated, the catalogue's "dated UI" con is fair, but is fast and works on a tablet at reception.

Multiple providers are first-class, which is where it beats a free Calendly seat. Secretaries can be given the right to manage a subset of providers, admins see everything, and there is a REST API for anything the UI does not cover, such as pulling tomorrow's bookings into a display.

The compose that works

The image needs a MySQL-compatible database and a public base URL:

services:
  easyappointments:
    image: alextselegidis/easyappointments:latest
    ports:
      - "8080:80"
    environment:
      - BASE_URL=https://book.example.com
      - DB_HOST=mariadb
      - DB_NAME=easyappointments
      - DB_USERNAME=easyappointments
      - DB_PASSWORD=change-me
    depends_on:
      - mariadb
    restart: unless-stopped
  mariadb:
    image: mariadb:11
    environment:
      - MARIADB_DATABASE=easyappointments
      - MARIADB_USER=easyappointments
      - MARIADB_PASSWORD=change-me
      - MARIADB_ROOT_PASSWORD=change-me-too
    volumes:
      - ./mariadb:/var/lib/mysql
    restart: unless-stopped

Put a reverse proxy with HTTPS in front, visit the site once and the installer asks for the admin account and company details. Total memory for both containers sits comfortably inside the catalogue's 256 MB. Set up outgoing SMTP in the settings before you go live; a booking system whose confirmation emails silently fail is worse than no booking system.

Google Calendar sync is the feature and the maintenance

Two-way Google Calendar sync per provider is the headline integration: bookings appear in the provider's Google calendar, and events already there block slots. It needs a Google Cloud project with the Calendar API enabled and an OAuth client ID and secret pasted into the settings. The trap is the OAuth consent screen. Left in "testing" status, Google expires the refresh tokens after 7 days and every provider has to reconnect weekly; publish the app (internal is fine for a Workspace domain) and the tokens persist.

Recent versions added CalDAV sync as well. If you run Nextcloud or Radicale, that is the route I would take: no Google project, no consent screen, and the calendar stays on your own server along with the bookings.

Where it stops

No payments or deposits, so no-shows are your problem. No automatic meeting links; the confirmation email says where, you supply the room or the call URL in the service description. No round-robin, no pooled availability across a team, no per-customer booking limits. Reminders are email only. The interface is Bootstrap-era and looks it, although customers rarely notice on the one page they use. And it is a booking tool, not the full groupware suite the category name implies; if you want shared calendars, contacts and mail, that is a different shopping trip.

There is no obviously bigger open-source sibling for the small-business booking case that is as light to run. The heavier scheduling platforms aimed at SaaS teams need far more than 256 MB and more configuration than a barber wants. For the Calendly switch, this remains the practical self-hosted default.

What I'd do

For a solo practitioner or a shop with up to 5 providers: the compose above behind Caddy, SMTP configured on day one, CalDAV sync into Nextcloud rather than Google, a nightly mariadb-dump to off-box storage, and the public page linked from the business website. Budget an hour to set up and 10 minutes a month to update. If payments at booking time are non-negotiable, this is the wrong tool and a hosted service with Stripe built in will cost less than the workaround.

Similar groupware apps