Swiss accounting software
  • PHP 75.8%
  • Vue 21.2%
  • JavaScript 1.5%
  • Blade 1.1%
  • Shell 0.3%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-05 13:16:44 +02:00
.githooks fix(hooks): replace gitlab/main drift guard with origin/main file-diff check 2026-05-17 19:14:44 +02:00
.github ci: pin pnpm 11 for reproducible installs 2026-08-05 09:02:28 +02:00
app fix(billing): block unpaid SaaS subscriptions 2026-08-05 13:16:44 +02:00
bootstrap fix(http): force https URL generation behind TLS-terminating reverse proxies 2026-07-11 12:53:19 +02:00
config Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
contract feat: post-signup onboarding wizard with module selection, language switcher, and upgrade nudge 2026-06-10 12:35:02 +02:00
database Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
docker security: relax CSP frame-ancestors to 'self' so inline receipt previews can render 2026-05-06 19:18:15 +02:00
lang Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
plugins/example-plugin feat: recurring invoices, credit notes, budgets, fixed assets, payroll, VAT & aging reports 2026-03-27 11:05:51 +01:00
public feat(onboarding): onboarding improvements, legal archive, architecture refactors (#30) 2026-06-10 14:15:44 +02:00
resources Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
routes Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
scripts feat(onboarding): onboarding improvements, legal archive, architecture refactors (#30) 2026-06-10 14:15:44 +02:00
storage chore(security): keep gitlab-ci off public mirror; untrack local test PDFs 2026-05-05 01:41:41 +02:00
tests fix(billing): block unpaid SaaS subscriptions 2026-08-05 13:16:44 +02:00
.env.example fix(http): force https URL generation behind TLS-terminating reverse proxies 2026-07-11 12:53:19 +02:00
.env.production.example fix(http): trust reverse proxy headers for HTTPS detection (#18) 2026-05-17 17:38:29 +02:00
.gitattributes ci: add keep-ours merge driver for production-only files 2026-04-08 10:55:32 +02:00
.gitignore chore(deploy): stop tracking deploy.php on this branch (CE/EE leak) 2026-07-10 22:20:11 +02:00
.gitleaks.toml ci(security): allow documented synthetic secret examples 2026-08-05 00:34:56 +02:00
.nvmrc chore: migrate to pnpm and upgrade Node.js to 24 2026-04-02 15:15:52 +02:00
AGENTS.md chore: basic cleanup 2026-05-07 16:19:07 +02:00
artisan Initial commit: Gäld accounting application (Laravel 12 + Inertia + Vue 3) 2026-03-16 17:10:09 +01:00
boost.json chore: add ai tool 2026-05-07 14:22:15 +02:00
CHANGELOG.md Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
CODE_OF_CONDUCT.md chore: GitHub community files, CHANGELOG, CONTRIBUTING, SECURITY, composer update, nginx config 2026-04-01 17:40:08 +02:00
composer.json chore: add ai tool 2026-05-07 14:22:15 +02:00
composer.lock fix(deps): patch 49 Dependabot vulnerabilities (9 high, 33 moderate, 7 low) 2026-08-04 22:18:43 +02:00
CONTRIBUTING.md docs(release): align v3.0.0 docs and CI to develop branch and sail commands 2026-05-05 01:23:59 +02:00
deploy.php.example docs(release): align v3.0.0 docs and CI to develop branch and sail commands 2026-05-05 01:23:59 +02:00
docker-compose.yml fix(docker): add build context to worker service 2026-04-15 13:20:49 +02:00
gaeld chore: add more command 2026-04-17 13:57:26 +02:00
INSTALL.md fix: self-hosting procedure bugs 2026-06-10 13:27:12 +02:00
LICENSE chore(license): relicense community edition under AGPL 2026-04-09 09:11:52 +02:00
package.json ci: pin pnpm 11 for reproducible installs 2026-08-05 09:02:28 +02:00
phpstan-baseline.neon fix(support): resolve 2 real bugs behind PHPStan baseline entries 2026-07-11 12:54:09 +02:00
phpstan.neon chore(phpstan): quarantine legacy bank parsers via ignoreErrors 2026-05-12 11:19:14 +02:00
phpunit.xml Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
pint.json feat: OCR receipt scanning, org invitations & member management, cookie consent, quick-create contacts 2026-03-25 12:00:19 +01:00
pnpm-lock.yaml fix(deps): patch 49 Dependabot vulnerabilities (9 high, 33 moderate, 7 low) 2026-08-04 22:18:43 +02:00
pnpm-workspace.yaml ci: pin pnpm 11 for reproducible installs 2026-08-05 09:02:28 +02:00
README.md Merge remote-tracking branch 'origin/main' into chore/sync-main-hotfixes 2026-08-04 20:43:37 +02:00
RELEASE.md docs(release): align v3.0.0 docs and CI to develop branch and sail commands 2026-05-05 01:23:59 +02:00
SECURITY.md docs(release): align v3.0.0 docs and CI to develop branch and sail commands 2026-05-05 01:23:59 +02:00
tailwind.config.js Initial commit: Gäld accounting application (Laravel 12 + Inertia + Vue 3) 2026-03-16 17:10:09 +01:00
vite.config.js feat: v2.18.0 — security hardening, Sentry EE split, dependency updates, CE isolation 2026-04-14 17:21:57 +02:00

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

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