Getting started¶
SAE Books is a FastAPI application backed by Postgres, with a
server-rendered Jinja/HTMX frontend. There is no JavaScript SPA build
step — the engine (saebooks) serves the JSON API, and a separate
thin web process (saebooks-web) renders HTML by proxying the same
API endpoints.
What it is, in one paragraph¶
SAE Books is a self-hosted accounting platform aimed at Australian SMEs. It runs as a Docker stack on hardware you control, stores its data in a Postgres database you back up, and is licensed under the GNU AGPLv3. The community edition is fully featured for an SME running a single set of books; the enterprise edition adds operator tooling for accountants and bookkeepers managing many tenants.
Prerequisites¶
- Docker 24+ with
docker composev2 - Postgres 15+ — the bundled compose ships Postgres 16-alpine; you can also point at an existing cluster
- A reverse proxy for TLS termination — Caddy works well; the reference deployment fronts the app with Caddy on a public hostname
- Python 3.12+ if you intend to develop against the codebase outside the container (most contributors don't bother — the compose setup is the dev environment)
Editions¶
SAE Books ships in a single binary; the edition gates features at runtime. The Community edition is fully functional for a single-tenant SME out of the box.
| Edition | Description |
|---|---|
community |
AGPLv3, all SME features. The default — no licence key needed. |
offline |
Community + multi-currency, inventory, projects/budgets, asset register v2, granular permissions, themes, SMTP relay. Perpetual USB-bound licence. |
business |
Offline + multi-company (up to 2), AU bank feeds, ABR lookup, Stripe + Paperless integrations. Subscription. |
pro |
Business + international lookups, ATO SBR e-lodgement, QBO import, SQL tool, scheduled backups, audit snapshots. Subscription. |
enterprise |
Pro + per-company SISS bank-feed credentials. Subscription + setup fee. Support SLA is contractual. |
Set SAEBOOKS_EDITION=community (default) or the appropriate tier in
the container environment. Editions form a strict superset: every tier
includes all features of every tier below it. The licence resolver in
services/licence/ sets the edition at boot from a USB Ed25519 licence
(Offline) or a portal JWT (Business / Pro / Enterprise), falling back to
community when nothing is present. Full detail in Operations →
Deployment.
Where things live¶
saebooks/— the app package (api, services, models, routers, middleware, seed, cli, mcp)alembic/versions/— migrations (at the project root, not inside the package)saebooks/services/integrations/— external connectors (ATO prefill, Paperless, Stripe, etc.)tests/— full test tree, see Testingdocs/— these docs (this site is built from this directory)
Where to next¶
- Quick start — get a working dev instance in five minutes.
- Architecture — top-level diagram and the reasoning behind it.
- API conventions — once you have it running, this is where to look first.