Skip to content

Scanix/Gaeld

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

561 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Gäld

CI License: AGPL v3 PHP 8.4+ Laravel 13

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
  • 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

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 (no Docker)

Requires 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 serve

Visit http://localhost:8000.

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


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.

About

Swiss accounting software

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors