Constraints
Technical and organizational constraints
This section captures technical and organizational constraints that affect the architecture.
Technical Constraints
| Constraint | Source / Rationale |
|---|---|
| Go | All Fr[ae]ym services are written in Go. |
| PostgreSQL | Primary datastore for Streams, Projections, CRUD, Auth, Deployments; chosen for ease of self-hosting and well-documented backups. User must have permissions to create databases; no connection pooler in front of Fr[ae]ym. |
| S3-compatible storage | Required for CRUD file storage (S3-compatible). |
| Elasticsearch (optional) | Optional to enable full-text and geo search. |
Organizational Constraints
| Constraint | Notes |
|---|---|
| Open source | Source code and contribution workflow are in the Fraeym repository; roadmap and active work are tracked in GitHub Projects. |
| Container registry | Images from GitHub Container Registry (ghcr.io/fraym/...). |
| Tooling | Go checks (golangci-lint, govulncheck), JS checks (eslint, prettier), E2E tests in GitHub Actions. |
Conventions
- Repository layout:
cmd/for service entrypoints,service/<name>/for each microservice,sdk/*language*/for client SDKs,pkg/for shared Go libraries,internal/for non-exported shared code,charts/for Helm,docs/for the documentation site. - Dependency injection: Google Wire is used for service composition.
- Documentation: Next.js + Fumadocs; content in
docs/content/.