- PHP 75.8%
- Vue 21.2%
- JavaScript 1.5%
- Blade 1.1%
- Shell 0.3%
- Other 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .githooks | ||
| .github | ||
| app | ||
| bootstrap | ||
| config | ||
| contract | ||
| database | ||
| docker | ||
| lang | ||
| plugins/example-plugin | ||
| public | ||
| resources | ||
| routes | ||
| scripts | ||
| storage | ||
| tests | ||
| .env.example | ||
| .env.production.example | ||
| .gitattributes | ||
| .gitignore | ||
| .gitleaks.toml | ||
| .nvmrc | ||
| AGENTS.md | ||
| artisan | ||
| boost.json | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| composer.json | ||
| composer.lock | ||
| CONTRIBUTING.md | ||
| deploy.php.example | ||
| docker-compose.yml | ||
| gaeld | ||
| INSTALL.md | ||
| LICENSE | ||
| package.json | ||
| phpstan-baseline.neon | ||
| phpstan.neon | ||
| phpunit.xml | ||
| pint.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| RELEASE.md | ||
| SECURITY.md | ||
| tailwind.config.js | ||
| vite.config.js | ||
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
What it does
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
- 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
Getting started
Docker (recommended)
./gaeld setup
The 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 --demo
Manual Docker commands (equivalent)
cp .env.example .env
docker compose up -d --wait
./vendor/bin/sail artisan gaeld:install
Visit 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 everything
Manual
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 serve
Updating
php artisan gaeld:update # manual install
# or
./vendor/bin/sail artisan gaeld:update # Docker / Sail
Runs pending migrations, clears caches, and restarts the queue worker — safe to run on a live instance.
Tech stack
| Layer | Technology |
|---|---|
| Backend | Laravel 13 |
| Frontend | Inertia.js + Vue 3 |
| Database | PostgreSQL |
| Cache / Queue | Redis |
| Docs | Docusaurus |
Architecture
The codebase follows a domain-driven structure. Each business domain is self-contained under app/Domains/:
Accounting/ — chart of accounts, journal entries, ledger
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.
Configuration
Optional features are toggled in .env:
FEATURE_BANK_SYNC=false
FEATURE_AUTO_RECONCILIATION=false
FEATURE_AUTOMATION=false
FEATURE_MULTI_CURRENCY=false
FEATURE_API_ACCESS=false
Plugin system
Drop 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.
Contributing
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 style
Please keep pull requests focused and include tests for new behaviour.
License
AGPL-3.0-or-later — see LICENSE.