Markus Michalski FAQ

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.

Deutsche Version

Back to main overview

LeaveFlow

CI
License
PHP
Symfony
Docker

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.