Toolchain
The stack each service uses and why each piece was chosen.
| Piece | Role |
|---|---|
| Go 1.26 | Single module; services under services/<name>/ |
| Postgres 18 | Source of truth per service |
| pgx + sqlc | Typed queries from hand-written SQL |
| goose | Migrations embedded in binaries |
| Huma | HTTP routing and OpenAPI generation |
| oapi-codegen | Go client generation from each service's OpenAPI spec |
| Cedar | Authorization policies embedded at startup |
| Azure Service Bus | Event delivery from the transactional outbox (emulator locally) |
| Docker Compose | Local Postgres and the Service Bus emulator only |
Services run with go run locally; Compose does not wrap the Go binaries.
OpenAPI specs are generated from handler types (-openapi flag) and checked in. The merged platform
spec at the repo root includes deployed services only.
Generated service clients describes generation, construction, and how compilation checks consumers.
Full detail: docs/toolchain.md.