LeaveFlow
LeaveFlow is a self-hosted leave management tool for small and medium-sized businesses with approval workflow, team calendar, leave balances, holidays and GDPR features. Runs with Docker.
LeaveFlow
Live demo: Try LeaveFlow at demo.markus-michalski.net, no installation and no risk.
Overview
LeaveFlow is a self-hosted leave management tool for small and medium-sized businesses. Employees submit leave requests, team leads approve them, and admins maintain leave balances, holidays, locations and sign-in methods. Public holidays, carryover expiry on 31 March, the twelfths rule and the 42-day illness threshold follow German labor law.
One installation manages exactly one company. All data lives in your own MariaDB database, and the interface is available in German and English.
LeaveFlow is Docker-first: the bundled Compose stack starts the app, the database, Mailpit and an OpenLDAP test server. The steps are on the Installation page.
graph LR
A["Browser"] --> B["FrankenPHP with Symfony app"]
B --> C["MariaDB"]
B --> D["SMTP server or Mailpit"]
E["Messenger workers: scheduler_notifications, scheduler_maintenance"] --> C
E --> D
B -.-> F["Slack, Teams, LDAP, Google, Entra (optional)"]
G["REST API client"] --> B
Documentation
| Page | Content |
|---|---|
| Installation | Requirements, start with Docker Compose, setup wizard, environment variables, update |
| Operations and cron jobs | Messenger workers, scheduled jobs, console commands, mail delivery |
| Sign-in and integrations | Google, Microsoft Entra ID, LDAP, Slack, Microsoft Teams |
| Privacy and GDPR | Retention period, anonymization, stored data, access protection |
| Admin guide | Company settings, users, employees, departments, locations, absence types, leave balances, holidays, blackout periods, statistics |
| Manager guide | Approvals, cancellations, team calendar, notifications |
| Employee guide | Leave requests, leave balance, profile, iCal, 2FA, notifications |
| REST API | Employee endpoints, authentication, error format |
| Troubleshooting | Common problems and their causes |
Features
| Feature | Details |
|---|---|
| Leave requests | Full and half days, live preview with working hours, balance and blackout checks, no backdated requests |
| Approval workflow | Six states, seven transitions, four-eyes principle, decision history per request |
| Team calendar | FullCalendar with month and week view, filters by department and absence type, holidays and blackout periods as background |
| Leave balances | Regular leave and carryover, consumption from the earlier-expiring balance first, year transition by cron job or command |
| Holidays | All 16 German federal states including Easter calculation, regional adjustments, company-wide holidays |
| Notifications | In-app, email (switchable per event), optional Slack and Microsoft Teams |
| Sign-in | Local with TOTP 2FA, Google Workspace, Microsoft Entra ID, LDAP/Active Directory |
| Reports and exports | Statistics dashboard with PDF export, CSV export of leave balances and employees, iCal subscriptions |
| GDPR | Retention period, manual anonymization of former employees, exit workflow |
| REST API | Create, read and update employees with a bearer token, Swagger UI at /api/doc |
Roles
LeaveFlow has three roles that build on each other: a manager has all rights of an employee, an admin has all rights of a manager.
| Role | Area | Responsibilities |
|---|---|---|
Administrator (ROLE_ADMIN) |
/admin/... |
All configuration: users, employees, departments, locations, absence types, leave balances, holidays, blackout periods, company settings, statistics, anonymization, API tokens, cron jobs |
Manager (ROLE_MANAGER) |
/manager/approvals |
Approve or reject requests of their own departments, decide on cancellations |
Employee (ROLE_EMPLOYEE) |
/my/..., /profile |
Submit leave requests, view the leave balance, manage profile, iCal and notifications |
The team calendar at /team/calendar is open to every signed-in user. Blackout periods are managed by admins only, at /admin/blackout-periods.
A user account is not automatically an employee: anyone who should request or approve leave also needs a linked employee record. The admin created by the setup wizard has none at first.
Requirements
| Requirement | Value | Notes |
|---|---|---|
| Docker | Docker with the Compose plugin (docker compose) |
The bundled stack starts the app, the database, Mailpit and OpenLDAP |
| PHP | 8.4 or newer | Included in the Docker image (FrankenPHP base image) |
| PHP extensions | pdo_mysql, intl, gd, mbstring, json, curl, ctype, fileinfo |
Checked by the setup wizard; the image ships them, plus ldap |
| Database | MariaDB 11.4 | Image mariadb:11.4 in the Compose stack |
| HTTPS | required outside localhost |
The PHP configuration sets session cookies with the Secure flag |
License
LeaveFlow is licensed under the PolyForm Noncommercial License 1.0.0. The source code is available and self-hostable, noncommercial use is free, and commercial use requires a separate agreement.
Contributing
Contributions require signing the Contributor License Agreement. The development workflow is described in CONTRIBUTING.md.
Support
Report bugs and feature requests in the GitHub issues. The source code is in the GitHub repository.