Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

FewohBee — Property Management System for Guesthouses & Hotels

The open-source booking and management software for small and medium-sized guesthouses, pensions, holiday apartments and hotels.

License: GPL v3PHPSymfony

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.


Features

🛏️ ReservationsVisual calendar grid, availability and capacity checks, room blocks, configurable origins and statuses
👥 GuestsGuest profiles, companies, guest categories for age-based pricing, GDPR export
🌐 Online bookingDirect booking from your website — search or calendar mode, embeddable, with abuse protection
🧾 InvoicesPDF invoices, configurable number ranges, and e-invoicing via EN 16931 / XRechnung / ZUGFeRD
📒 AccountingDouble-entry booking journal with guided chart of accounts, DATEV export, CSV bank import with automatic invoice matching, cash book
📋 OperationsFront desk view, housekeeping lists, printable daily reports
AutomationRules engine with triggers, conditions and actions — send emails, change statuses, create bookings, all without code
✉️ CorrespondenceSend email from the app, with a visual template editor and live preview
📅 Calendar syncTwo-way iCal/ICS sync with Airbnb, Booking.com and others
📊 StatisticsOccupancy and utilization, monthly snapshots, tourist tax reporting
⚙️ AdministrationMultiple branches, granular roles, passkeys, read-only REST API

📖 Full feature overview in the Wiki · User manual


Requirements

  • 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
  • A web server — nginx or Apache
  • MySQL 8.0+ or MariaDB — set DB_SERVER_VERSION in .env to 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.


Quick Start

Option A: Docker (recommended)

A pre-configured Docker Compose setup is maintained separately:

👉 fewohbee-dockerized

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.

Option B: Manual installation

1. Create the database

CREATEDATABASEfewohbee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Configure the application

Copy .env.dist to .env and adjust:

  • DATABASE_URL — your database credentials
  • APP_SECRET — a random secret, e.g. php -r 'echo bin2hex(random_bytes(16));'
  • APP_ENV=prod for production installations

3. Install dependencies

composer install --no-dev --optimize-autoloader

4. Initialize database and application

php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console app:first-run

app: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.

Don't forget: scheduled tasks

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=90

The 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:month

Upgrading

Back up your database before every upgrade, and skim the release notes for version-specific steps.

Docker

The fewohbee-dockerized setup ships an update script that does the whole job:

./update-docker.sh

It 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.

Manual installation

git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate
php bin/console asset-map:compile
php bin/console cache:clear

REST API

FewohBee 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 as Authorization: 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


Hosted version

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.


Internationalization

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.


Contributing

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 6

Security

If 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.


License

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.


Author & Support

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:

Donate

⭐ Starring the repository also helps others discover the project.

Releases

Packages

Used by

Contributors

Languages