The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.
Deutsche Version: README.de.md · Documentation: Wiki · Website: fewohbee.app
Smaller accommodations usually manage their rooms the old way — with a pen and a sheet of paper, or a spreadsheet. That was the itch this project started out to scratch back in 2014, and it has grown into a complete property management system (PMS) since: reservations, guest data, invoicing, accounting, correspondence and calendar sync with the booking portals, all in one place and running on your own server.
It's built by hoteliers, for hoteliers — shaped by everyday practice in a real guesthouse rather than by a feature checklist. Topics like double-entry bookkeeping or e-invoicing are unavoidable these days, so the goal is to wrap them in something you can actually operate without professional training.
- 🔓 Free and open source (GPL-3.0) — self-host it, fork it, adapt it
- 🇩🇪 🇬🇧 Bilingual — fully available in German and English
- 🐳 Docker-ready — up and running in minutes
- 🧾 E-invoicing built in — EN 16931, XRechnung, ZUGFeRD
- 🔐 Modern authentication — passwords, passkeys (WebAuthn), scoped API tokens
Curious what it looks like? There's a feature tour at fewohbee.app, and the Wiki covers everything in depth.
| 🛏️ Reservations | Visual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses |
| 👥 Guests | Guest profiles, companies, guest categories for age-based pricing, GDPR export |
| 🌐 Online booking | Direct booking from your website — search or calendar mode, embeddable, with abuse protection |
| 🧾 Invoices | PDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD |
| 📒 Accounting | Double-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book |
| 📋 Operations | Front desk view, housekeeping lists, printable daily reports |
| ⚡ Automation | Rules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code |
| ✉️ Correspondence | Send email from the app, with a visual template editor and live preview |
| 📅 Calendar sync | Two-way iCal/ICS sync with Airbnb, Booking.com and others |
| 📊 Statistics | Occupancy and utilization, monthly snapshots, tourist tax reporting |
| ⚙️ Administration | Multiple branches, granular roles, passkeys, read-only REST API |
📖 Full feature overview in the Wiki · User manual
- PHP 8.4 or higher (the official Docker image runs on PHP 8.5)
- Extensions:
intl(with full ICU data),gd,pdo_mysql,exif,ctype,iconv
- Extensions:
- A web server — nginx or Apache
- MySQL 8.0+ or MariaDB — set
DB_SERVER_VERSIONin.envto match your server - Composer
Optional:
- Redis — for caching and session storage (
USE_REDIS_CACHE=true). Not required; the filesystem cache works fine for a single instance. - HTTPS + a configured
RELYING_PARTY_ID— required if you want to enable passkey login (PASSKEY_ENABLED=true). - S3-compatible storage — as an alternative to local file storage (
STORAGE_ADAPTER).
See the Symfony technical requirements for the general baseline.
A pre-configured Docker Compose setup is maintained separately:
It ships the application, web server and database, and is the fastest path to a running instance. See the Docker Setup guide in the Wiki.
1. Create the database
CREATE DATABASE fewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2. Configure the application
Copy .env.dist to .env and adjust:
DATABASE_URL— your database credentialsAPP_SECRET— a random secret, e.g.php -r 'echo bin2hex(random_bytes(16));'APP_ENV=prodfor production installations
3. Install dependencies
composer install --no-dev --optimize-autoloader4. Initialize database and application
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-runapp:first-run guides you through creating the first admin user and your accommodation.
Add --load-sample-data if you want example data to explore.
5. Log in
Point your web server's document root at public/ and open the application in a browser, then log
in with the user you just created.
Calendar sync and time-based automations only work if their commands run regularly. The Docker setup brings its own cron container; for a manual installation, add this to your crontab:
# Calendar synchronization with booking portals (both directions)
*/15 * * * * cd /path/to/fewohbee && php bin/console calendar:import:sync --force
*/15 * * * * cd /path/to/fewohbee && php bin/console calendars:sync
# Time-based workflows (reminders, follow-ups, scheduled emails)
*/15 * * * * cd /path/to/fewohbee && php bin/console workflow:process-scheduled
# Log retention
0 3 * * * cd /path/to/fewohbee && php bin/console app:purge-logs --days=90The reference schedule lives in docker/app/crontab — worth a look if you
want to stay in sync with the defaults.
The statistics module can also keep monthly snapshots for year-over-year comparison. If you use it, schedule it once a month:
5 0 1 * * cd /path/to/fewohbee && php bin/console stats:snapshot:monthBack up your database before every upgrade, and skim the release notes for version-specific steps.
The fewohbee-dockerized setup ships an update script that does the whole job:
./update-docker.shIt pulls the new images, restarts the stack, and syncs newly introduced environment variables into
your .env and both compose files. Give those new variables a quick review afterwards — some may
need a value from you.
git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clearFewohBee exposes a read-only REST API for reservations, calendar data, invoices and statistics.
- Authentication uses personal access tokens created in the user profile (prefix
fwb_), sent asAuthorization: Bearer <token>or as the password in HTTP Basic auth for clients that only support username/password (e.g. calendar applications). - Every token carries scopes, and a scope only takes effect if the token owner also holds the matching application role — a token can never grant more than its owner has.
- The full specification lives in
docs/openapi.yaml.
📖 Guide and examples: REST API documentation in the Wiki
Not everyone wants to run their own server, keep it patched and worry about backups. If that's you, a managed version is available at fewohbee.app — same application, hosted and maintained, with the revenue funding the development of this open-source project.
Self-hosting stays free and fully supported. Both paths use the same codebase.
FewohBee is multilingual by design and ships complete German and English translations. Both languages are maintained together — no feature ships in one language only.
Want another language? Open an issue — contributions are very welcome.
Contributions are welcome, whether it's a bug report, a translation, documentation or a feature.
- 📋 Read AGENTS.md first. It documents the architecture, security requirements, internationalization rules, testing expectations and coding standards for this project. It is written for AI coding agents, but it is the definitive contributor guide for humans too.
- 🐛 Bugs and ideas: open an issue
- 🔀 Pull requests: keep them focused, include tests, and make sure German and English translations are complete
Running tests:
php bin/phpunit tests/Unit # unit tests — fast, no database
bin/run-tests.sh # full suite — resets the test database
vendor/bin/phpstan analyse # static analysis, level 6If you discover a security vulnerability, please do not open a public issue. Report it privately to info (at) fewohbee.app so it can be fixed before disclosure.
Security is a first-class concern in this project — guest records are personal data under GDPR and invoices are financial records. See the security section of AGENTS.md for the standards applied to every contribution.
FewohBee is licensed under the GNU General Public License v3.0.
You are free to use, study, modify and distribute it. If you distribute a modified version, it must remain under the GPL-3.0 and the source must be made available.
Developed by Alexander Elchlepp since 2014.
This is largely a one-person project built in free time. Questions, feedback and contributions are always appreciated — open an issue or write to info (at) fewohbee.app.
If FewohBee is useful to you and you'd like to support its development:
⭐ Starring the repository also helps others discover the project.