Open-source accounting for Swiss freelancers and small businesses.
Proper double-entry bookkeeping, Swiss QR-Bill invoicing, VAT reporting, and bank reconciliation — built with Laravel and Vue, AGPL-3.0-or-later licensed, fully self-hostable.
First full production release: stability is now the default and breaking changes follow documented release notes.
Website · Documentation · Hosted version
Gäld covers the full accounting workflow for a small Swiss business:
- Double-entry accounting — journal, ledger, and trial balance with strict debit/credit balance enforcement
- Fiscal year management — create and close fiscal years, record opening balances, and manage year-end closings
- Invoicing — professional PDFs with Swiss QR-Bill payment slip (ready to print and send)
- Expense tracking — log expenses, attach receipts, categorise by supplier
- Swiss VAT (MWST) — correct rates preconfigured, VAT report ready for the tax authority
- Bank reconciliation — import CAMT.053 files from your bank, match transactions against invoices and expenses
- Contacts — shared customer and supplier directory across all modules
- Financial reports — profit & loss, balance sheet, trial balance
- Multi-language — English, French, German, Italian (EN / FR / DE / IT)
- Plugin system — extend functionality without touching the core codebase
./gaeld setupThe setup script builds the Docker image, starts all services (PostgreSQL, Redis, Meilisearch, Mailpit), waits for health checks, and runs the interactive installer — with progress indicators at each step.
Add --demo for a non-interactive setup with sample data:
./gaeld setup --demoManual Docker commands (equivalent)
cp .env.example .env
docker compose up -d --wait
./vendor/bin/sail artisan gaeld:installVisit http://localhost:8080. The install wizard walks you through creating your organisation and admin account.
Other useful commands:
./gaeld artisan migrate # Run migrations
./gaeld logs # Tail application logs
./gaeld worker # Tail queue worker logs
./gaeld status # Show container status
./gaeld down # Stop everythingRequires PHP 8.4+, Composer, Node.js 22+, pnpm, PostgreSQL 15+, and Redis 7+.
composer install
pnpm install && pnpm run build
cp .env.example .env
php artisan key:generate
# Edit .env with your DB credentials, then:
php artisan gaeld:install
php artisan serveVisit http://localhost:8000.
php artisan gaeld:update # manual install
# or
./vendor/bin/sail artisan gaeld:update # Docker / SailRuns pending migrations, clears caches, and restarts the queue worker — safe to run on a live instance.
| Layer | Technology |
|---|---|
| Backend | Laravel 13 |
| Frontend | Inertia.js + Vue 3 |
| Database | PostgreSQL |
| Cache / Queue | Redis |
| Docs | Docusaurus |
The codebase follows a domain-driven structure. Each business domain is self-contained under app/Domains/:
Accounting/ — chart of accounts, journal entries, ledger, fiscal years, opening balances
Banking/ — bank accounts, CAMT import, transaction reconciliation
Contacts/ — customers and suppliers
Expenses/ — expense recording and reporting
Invoicing/ — invoices, payments, QR-Bill generation
Organizations/ — multi-org support, tenant isolation
Reporting/ — read-only financial projections (P&L, balance sheet)
Users/ — authentication, profiles
All ledger mutations go through LedgerService, which enforces double-entry integrity. The Reporting domain is a read-only projection — it never writes to the ledger.
Optional features are toggled in .env:
FEATURE_BANK_SYNC=false
FEATURE_AUTO_RECONCILIATION=false
FEATURE_AUTOMATION=false
FEATURE_MULTI_CURRENCY=false
FEATURE_API_ACCESS=falseDrop a plugin into /plugins/. A plugin is a standard Laravel service provider with a manifest:
plugins/my-plugin/
├── plugin.json — name, version, provider class
├── src/
│ └── MyServiceProvider.php
├── routes/web.php — optional
└── migrations/ — optional
Plugins are auto-discovered on boot. See plugins/example-plugin/ for a minimal working example.
Issues and pull requests are welcome. Please read CONTRIBUTING.md before submitting a PR.
./vendor/bin/sail artisan test # run the test suite
./vendor/bin/sail pint # fix code stylePlease keep pull requests focused and include tests for new behaviour.
AGPL-3.0-or-later — see LICENSE.