Skip to content

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 compose v2
  • 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 Testing
  • docs/ — 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.