Title: Terminy &#8211; Appointment Booking Calendar &amp; Staff Scheduling
Author: amitry
Published: <strong>14 Setember 2026</strong>
Last modified: 09 Otover 2026

---

Search plugins

![](https://ps.w.org/terminy-booking/assets/banner-772x250.gif?rev=3737081)

![](https://ps.w.org/terminy-booking/assets/icon-256x256.gif?rev=3715483)

# Terminy – Appointment Booking Calendar & Staff Scheduling

 By [amitry](https://profiles.wordpress.org/amitry/)

[Download](https://downloads.wordpress.org/plugin/terminy-booking.1.3.2.zip)

 * [Details](https://lmo.wordpress.org/plugins/terminy-booking/#description)
 * [Reviews](https://lmo.wordpress.org/plugins/terminy-booking/#reviews)
 *  [Installation](https://lmo.wordpress.org/plugins/terminy-booking/#installation)
 * [Development](https://lmo.wordpress.org/plugins/terminy-booking/#developers)

 [Support](https://wordpress.org/support/plugin/terminy-booking/)

## Description

**[Try the live demo](https://demo.terminy.agency/en/):** book an appointment like
a customer would and watch it arrive in the dashboard and on the iPhone.

Terminy turns a WordPress site into an appointment booking system. Three things 
set it apart from a plain slot list.

**Set up in five minutes.** Pick an industry – hair salon, tattoo studio, physiotherapy,
car workshop and six more – and the wizard proposes the services, the staff and 
the opening hours that go with it. Adjust what you want, pick a colour scheme, and
your booking page is created for you.

**Your visitor books in three clicks.** Every day in the calendar carries that day’s
occupancy as a liquid level, so a visitor sees which days are quiet before clicking
anything. The exact number of free slots is printed next to it, and the nearest 
free appointment is offered before a day is even picked.

**Your team carries the calendar around.** Every staff member gets a personal calendar
feed URL for Google, Outlook or Apple Calendar, so the day’s appointments are on
their phone without anyone logging in anywhere. With the free Terminy app for iPhone,
the owner sees the whole team and every staff member sees their own day.

Your appointments live in your own database and stay there. There is no external
booking service, no account to create and no fee per booking. This plugin makes 
no outbound HTTP requests of any kind.

**Terminy app for iPhone**

The free app puts the calendar on the team’s phones. It is currently available in
German and needs iOS 17 or later. [Get it on the App Store](https://apps.apple.com/app/id6811436469).

 * Today’s appointments and the week ahead, always at hand
 * Add, move and cancel appointments on the go
 * Customer details with every appointment
 * The owner sees the whole team, every staff member sees their own appointments
 * Paired with a QR code: no account, no password
 * The app talks only to your own website, and your data stays there

The app connects through the Terminy Pro add-on, which is available separately: 
[see what Terminy Pro adds](https://demo.terminy.agency/en/#pro). This free plugin
contains no device pairing, so the app alone is not enough.

**Setup wizard**

Pick an industry preset (hair salon, medical practice, physiotherapy, beauty, tattoo,
driving school, car workshop, coaching, veterinary, personal training), adjust the
services and staff it proposes, choose a colour scheme. The booking page is created
for you. Running the wizard a second time does not duplicate anything.

**Booking logic**

 * Working hours per staff member, or business defaults, including split shifts
 * Buffer time before and after each service
 * Lead time and booking horizon
 * Absences and holidays per staff member or for the whole business
 * Timezone and daylight-saving safe
 * Double-booking protection with database locking
 * “Anyone” assignment that spreads bookings across the team

**Calendar and widget**

 * Flat day cells whose liquid level shows how busy the day is, with the number 
   of free slots next to them
 * Choose whether a full cell means “fully booked” or “lots of free slots”
 * The nearest free appointment is offered before a day is even picked
 * Six colour schemes
 * Respects `prefers-reduced-motion`, ARIA labels, full keyboard navigation
 * On a phone, picking a day swaps the month view for that day’s times instead of
   stacking them

**Notifications**

Confirmation, reminder, reschedule and cancellation emails with editable placeholder
templates and an ICS calendar attachment. Staff members get their own notification
and a personal ICS feed URL for Google, Outlook or Apple Calendar.

**Calendar in WordPress**

The week calendar shows every appointment as a card in the staff member’s colour,
with the week’s numbers on top. Click a card and a panel opens on the right: customer
with email and phone, service and duration, price and where the booking came from.
Confirm it, mark it as completed or as a no-show, move it to another free time or
cancel it, without leaving the week.

The staff page shows a card for every team member: job title, appointments this 
week, how much of their working time is booked, and their hours. The edit form opens
in a panel on the same page.

**Waiting list**

When a day is full, customers can join a waiting list and are notified automatically
as soon as a slot frees up.

**Cancellation and rescheduling**

Every confirmation email carries a secure manage link. The customer can cancel or
move the appointment within a deadline you set. A cancellation triggers the waiting
list.

**Editor integration**

A native block with live controls, a native Elementor widget, and the `[terminy]`
shortcode.

**Privacy**

A consent checkbox is required on every booking. Terminy registers with the WordPress
personal-data export and erasure tools, and anonymizes inactive customer records
after a retention period you choose.

**Payments**

“Pay on site” is built in and records the payment state on each appointment. Additional
gateways register themselves through the `terminy_payment_gateways` filter.

**For developers**

Over 60 documented actions and filters, listed in `docs/HOOKS.md` inside the plugin
folder. Add-ons can attach a whole feature area through `terminy_admin_menu`, `terminy_register_rest_routes`
and `terminy_wizard_result` without patching core files.

**Shortcode**

    ```
    [terminy] with optional attributes: `service="3" staff="2" skin="rose" water="on|off" water_mode="booked|free" parallax="on|off"`
    ```

## Screenshots

[⌊Set up in five minutes: pick an industry and the wizard proposes services, staff
and opening hours.⌉⌊Set up in five minutes: pick an industry and the wizard proposes
services, staff and opening hours.⌉[

Set up in five minutes: pick an industry and the wizard proposes services, staff
and opening hours.

[⌊The booking calendar: every day shows how full it is, and the nearest free appointment
is offered right away.⌉⌊The booking calendar: every day shows how full it is, and
the nearest free appointment is offered right away.⌉[

The booking calendar: every day shows how full it is, and the nearest free appointment
is offered right away.

[⌊Picking a day reveals the free times next to the calendar, with the exact count.⌉⌊
Picking a day reveals the free times next to the calendar, with the exact count.⌉[

Picking a day reveals the free times next to the calendar, with the exact count.

[⌊The details step: a one-line recap, name and email, and the consent checkbox.⌉⌊
The details step: a one-line recap, name and email, and the consent checkbox.⌉[

The details step: a one-line recap, name and email, and the consent checkbox.

[⌊Booked: the confirmation email carries a calendar file, and the customer can cancel
or move the appointment from the link in it.⌉⌊Booked: the confirmation email carries
a calendar file, and the customer can cancel or move the appointment from the link
in it.⌉[

Booked: the confirmation email carries a calendar file, and the customer can cancel
or move the appointment from the link in it.

[⌊The admin week calendar: the whole team day by day, with the week's numbers on
top.⌉⌊The admin week calendar: the whole team day by day, with the week's numbers
on top.⌉[

The admin week calendar: the whole team day by day, with the week’s numbers on top.

## Blocks

This plugin provides 1 block.

 *   Terminy Booking Appointment booking calendar with the Terminy water-level availability
   display.

## Installation

 1. Upload the `terminy-booking` folder to `/wp-content/plugins/`, or install the ZIP
    under Plugins, Add New, Upload Plugin.
 2. Activate Terminy.
 3. The setup wizard opens by itself. Walk through it; it takes a few minutes.
 4. The booking page is live. Open it to see what your customers see.

## FAQ

### Can I try Terminy before installing it?

Yes. On the [live demo](https://demo.terminy.agency/en/) you book an appointment
like a customer and see it arrive in the business’s dashboard and on the iPhone.
The demo’s [booking page](https://demo.terminy.agency/en/book/) runs this plugin
itself. The demo is in English and German.

### Does a full cell mean “fully booked” or “lots of free slots”?

Whichever you prefer. By default bookings fill the cell, so a full cell means a 
full day. You can switch to the tank reading under Terminy, Settings, Design & water.
Either way the number of free slots is printed next to the calendar, so nobody has
to guess.

### Can customers cancel or move an appointment themselves?

Yes. Every confirmation email contains a secure manage link. You set the deadline,
24 hours by default. A cancellation notifies the waiting list automatically.

### Does Terminy send data to an external service?

No. This plugin makes no outbound HTTP requests at all: no licence check, no update
ping, no analytics. Appointment data never leaves your database. Notification emails
go out through `wp_mail()`, like any other WordPress email.

The separate Terminy Pro add-on is a commercial product and is not part of this 
plugin. It uses the Freemius service for licensing and updates and sends it the 
licence key and technical details about the site (address, IP address, WordPress
and PHP version, language). It sends no appointment or customer data. Details are
in the add-on’s [privacy policy](https://demo.terminy.agency/datenschutz/).

### Is there a mobile app?

Yes. [Terminy – Termine & Team](https://apps.apple.com/app/id6811436469) is free
on the App Store for iPhone (iOS 17 or later). Its interface is currently in German.
The owner sees the whole team, every staff member sees their own appointments, and
appointments can be added, moved or cancelled on the go.

The app connects through the Terminy Pro add-on ([Terminy and Terminy Pro compared](https://demo.terminy.agency/en/#pro)).
This free plugin contains no device pairing, so the app alone is not enough. Independently
of the app, every staff member already has a personal calendar feed URL that works
in Google, Outlook and Apple Calendar.

### Is Terminy suitable under the GDPR?

Terminy keeps everything local, requires a consent checkbox, integrates with the
WordPress data export and erasure tools, and anonymizes inactive customer records
after a retention period you set. Please note that for medical practices appointment
data can be health data under Art. 9 GDPR, so review your record of processing activities.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Terminy – Appointment Booking Calendar & Staff Scheduling” is open source software.
The following people have contributed to this plugin.

Contributors

 *   [ amitry ](https://profiles.wordpress.org/amitry/)

“Terminy – Appointment Booking Calendar & Staff Scheduling” has been translated 
into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/terminy-booking/contributors)
for their contributions.

[Translate “Terminy – Appointment Booking Calendar & Staff Scheduling” into your language.](https://translate.wordpress.org/projects/wp-plugins/terminy-booking)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/terminy-booking/), 
check out the [SVN repository](https://plugins.svn.wordpress.org/terminy-booking/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/terminy-booking/)
by [RSS](https://plugins.trac.wordpress.org/log/terminy-booking/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.3.2

 * Changed: every booking step is only as tall as it needs to be. When the height
   changes – another step, another month – the booking calendar glides to it instead
   of jumping. With reduced motion turned on in the system, it changes without animation.
 * Changed: error messages in the last step no longer move anything. Room for them
   is kept below the consent, as much as the longest message needs at the current
   screen width.
 * Changed: the last booking step is more compact: name and email side by side, 
   phone and a one-line note below them, at most 640px wide. The payment method 
   sits in the summary line.
 * Changed: when the page was scrolled past the top of the booking calendar, the
   next step scrolls it back into view, so it can be read from the start.
 * Changed: while the booking calendar loads, some room is already reserved for 
   it.

#### 1.3.0

 * New: click an appointment in the calendar and a panel opens on the right with
   the customer, service, duration, price and source. Confirm, complete, mark as
   no-show, move to another free time or cancel it right there; the week and the
   numbers on top update straight away.
 * New: the staff page shows a card per team member with this week’s appointments,
   the booked share of their working time and their hours. The edit form opens in
   a panel.
 * New: a job title per staff member (for example “Owner” or “Stylist”), shown on
   the staff cards. The database update runs by itself.
 * Changed: the admin calendar in a new design: key figures, week navigation, day
   columns with the number of appointments, cards in the staff member’s colour. 
   On phones it shows one day at a time.
 * Changed: the last booking step is calmer: name across the top, email and phone
   side by side, the note below, all fields the same height. Only optional fields
   are marked. The consent checkbox is larger, its text has the size and colour 
   of the form, and it links to the site’s privacy policy page when one is set under
   Settings > Privacy.
 * Changed: missing name or email and a missing consent are now marked at the field
   itself.
 * Added: a German translation ships with the plugin, also for German (formal), 
   Austria and Switzerland. A language pack from translate.wordpress.org still takes
   precedence.
 * Fixed: on sites with plain permalinks (Settings > Permalinks), the booking calendar
   could not load free times and the admin calendar stayed empty.
 * Fixed: saving a staff member with a name made only of spaces emptied the name.
   The form now says that a name is needed and leaves the entry unchanged.

#### 1.2.1

 * Fixed: themes that style buttons, fields and text could change the look of the
   booking calendar – for example grey boxes behind the step markers with faded 
   labels, the theme’s link colour on the “Add to calendar” button, uppercase service
   names or shadows on the days. The calendar now keeps its own look in every theme,
   also in themes and page builders that tie their styles to an ID; the font still
   comes from the theme.
 * Changed: everything in the booking calendar is easier to read. Fully booked days
   show a dark number instead of a white one, and the weekday names are darker. 
   When a light brand colour is chosen in the settings, the text on buttons switches
   to dark, and prices and the selected day use a darker shade of the colour. Staff
   members with a light colour get dark initials.

#### 1.2.0

 * New: the Terminy app for iPhone is on the App Store. While Terminy Pro is not
   active, the Staff screen and the final screen of the setup wizard show a short
   note about it, including that the app needs Terminy Pro to connect. One click
   on the Staff screen hides it in both places for good; it never appears on the
   dashboard.
 * Fixed: running the setup wizard again with “replace existing entries” left staff
   members and services switched off when upcoming appointments were attached to
   them, so nothing could be booked afterwards. Entries the wizard lists are active
   again when it finishes; their appointments are untouched.
 * Changed: the directory name is now “Terminy – Appointment Booking Calendar & 
   Staff Scheduling”. The folder, the text domain, settings and shortcodes stay 
   the same.
 * Changed: new description, FAQ and screenshots.

#### 1.1.0

 * Changed: the mobile app connection (device pairing, the app API and the App &
   devices screen) is no longer part of this plugin. It moved to the separate Terminy
   Pro add-on, which attaches through the documented hooks. Appointments, staff,
   services and settings are untouched.
 * New: `terminy_admin_menu`, `terminy_register_rest_routes`, `terminy_wizard_result`
   and `terminy_admin_notices` let an add-on attach a complete feature area without
   patching core files. See `docs/HOOKS.md`.
 * Changed: the plugin folder and text domain are now `terminy-booking`. Existing
   settings, appointments and shortcodes are unaffected.
 * Security: a review access code stored in clear text by earlier versions is removed
   from the database on update.
 * Fixed: several strings were not translatable, the currency symbol in the setup
   wizard ignored the setting, and the plural of “%d slot free” used the English
   two-form rule in every language. The count now comes from the server, where the
   translation picks the right form.
 * Fixed: running the setup wizard again with new service names left those services
   without any staff member, so nobody could book them. Staff members that already
   existed are now assigned to the services the wizard adds; their existing assignments
   are not touched.
 * Changed: the calendar attachment of confirmation emails is written once under
   its final name instead of being renamed, and calendar downloads send a `nosniff`
   header.
 * Changed: the hook reference moved from `HOOKS.md` to `docs/HOOKS.md`, and the
   plugin passes Plugin Check 2.1.0 with zero errors and zero warnings.
 * Changed: the calendar is flat now. Every bookable day is a plain square holding
   the day’s occupancy as liquid with a slowly moving surface; a quiet day still
   holds a little, closed and past days hold none, and a fully booked day is a solid
   square. No rims, shadows or highlights.
 * Changed: the widget is narrower (680px instead of 760px) and the month has a 
   fixed width, so it no longer stretches across a wide page. The day panel shows
   the picked day as the same small vessel, the date, the number of free times and
   the times themselves; the big glass and its caption are gone.
 * New: before a day is picked, the panel offers the nearest free appointment with
   one button. The continue button names the chosen time (“Continue with 10:30”),
   months slide in from the side you came from, and the times fade in one after 
   another.
 * Fixed: a theme that turns every `svg` into a block element pushed the vessel 
   on the confirmation screen to the left.
 * Changed: translations are no longer bundled. WordPress.org generates and delivers
   them through translate.wordpress.org, so every locale is covered instead of only
   the ones shipped here.
 * Removed: the “Pro & hooks” admin page. The hook reference it showed lives in `
   docs/HOOKS.md`, which is complete and always current.

#### 1.0.7

 * Fixed: on screens narrower than 900px a theme could hide the widget’s button 
   row completely, including “book now”, by styling its own off-canvas menu with
   the same class name. The widget now states its own layout rather than inheriting
   whatever the theme has, so a name clash can no longer take the booking button
   away.
 * Fixed: form fields could be stretched to several hundred pixels tall by a theme
   rule the widget never asked for.
 * Fixed: on a phone the booking page could be scrolled about 32px sideways, because
   the soft glows behind the card bleed wider than the screen. They are clipped 
   now.
 * Changed: the calendar days now read as glasses. Each open day has a rim, a floor
   and a water level, so an empty day looks like an empty glass instead of a blank
   box, and a single booking is still visible as a sliver.
 * Changed: the step indicator is now numbered markers on a rail that fills up as
   the visitor moves forward, with a tick on the steps already behind them.
 * Changed: the widget is narrower (760px instead of 980px) and the details form
   narrower still. Site owners can set `--ty-max` on `.terminy-widget` to change
   it.

#### 1.0.6

 * Changed: on a phone, picking a day now replaces the calendar with that day’s 
   times instead of adding them below it. The page no longer grows longer with every
   tap, and a “change date” button goes back.

#### 1.0.5

 * Fixed: staff members and services could not be deleted once any appointment had
   ever referenced them, even one that was long past or cancelled. Now only upcoming,
   still-active appointments protect an entry; everything else can be removed for
   good.
 * Fixed: deleting a staff member or service no longer empties the name on past 
   appointments. The name is kept on the record, so the history stays readable.
 * Fixed: running the setup wizard again added a second set of services and staff
   on top of the existing ones. Names that already exist are reused now, and the
   last step asks whether the existing entries should be kept or replaced.

#### 1.0.4

 * New: review and demo access under Terminy, App & devices. A revocable pairing
   code with a long validity that can be redeemed more than once, for app store 
   review and for demos.

#### 1.0.3

 * Changed: every calendar day is a small vessel again, and the water level inside
   the cell shows how busy that day is.
 * Changed: softer water tones, so a bright colour scheme no longer shouts.
 * Changed: much shorter “Your details” step, two form fields per row on wider screens.
 * Fixed: input font size raised to 16px so iOS no longer zooms in when a field 
   is focused.

#### 1.0.2

 * Changed: minimalist booking widget with neutral surfaces and a single accent 
   colour.
 * Fixed: parallax background glows were clipped with hard edges; layers now fade
   out softly and stay within bounds while scrolling.
 * Changed: the “Date & time” step keeps a stable height instead of growing downwards.

#### 1.0.1

 * New: reschedule appointments, with an availability check that ignores the appointment’s
   own slot. Customers receive a “new time” email with an updated ICS instead of
   a cancellation.
 * New: `terminy_booking_rescheduled` action and a rescheduled email template with`{
   old_date}` and `{old_time}` placeholders.
 * New: app endpoints for absences and customer history.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.3.2**
 *  Last updated **6 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/terminy-booking/) and [German](https://de.wordpress.org/plugins/terminy-booking/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/terminy-booking)
 * Tags
 * [appointments](https://lmo.wordpress.org/plugins/tags/appointments/)[booking](https://lmo.wordpress.org/plugins/tags/booking/)
   [calendar](https://lmo.wordpress.org/plugins/tags/calendar/)[reservations](https://lmo.wordpress.org/plugins/tags/reservations/)
   [scheduling](https://lmo.wordpress.org/plugins/tags/scheduling/)
 *  [Advanced View](https://lmo.wordpress.org/plugins/terminy-booking/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/terminy-booking/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/terminy-booking/reviews/)

## Contributors

 *   [ amitry ](https://profiles.wordpress.org/amitry/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/terminy-booking/)