A Go framework for services, APIs and high-performance structured monoliths.
The architecture is not a convention you are asked to follow — the compiler enforces it, and when something does go wrong the error names the likely cause.
A security.Grant has only unexported fields, and every repository signature
takes one before the id. Reaching the database without it is not a review
comment; it is a build that does not complete.
Everything a real application needs is in the box:
- Authorization no repository call can skip, and a tenant read from the grant rather than the request
- Views that compile, with the error at the line you wrote and not in generated output
- Database, cache, queue, filesystem, sessions and validation
- Background jobs, an outbox written in the same transaction as the row that caused it, and a scheduler that holds a lock per replica
- WebSockets over the Pusher protocol, every channel behind a policy
- A request console, a timeline and an N+1 detector in the core, allocating nothing when off
- A component library in the shadcn/ui idiom, on Basecoat's CSS, with HTMX and Alpine where behaviour is needed
- A CLI that scaffolds a project, a module, the views and the deploy
One binary goes to the server. No runtime to install, no node_modules, and no
build step that lives on somebody's machine.
Arandu serves the three shapes an application takes — a service, a REST API a mobile or React client consumes, and a monolith with its own screens — without asking you to choose a different framework for each.
brew install arandu-io/tap/aru
aru new my-app
cd my-app && aru serve
It runs on SQLite in a file, with the cache in the process. Nothing else has to
be installed to see the first page. Moving to Postgres and Redis is
DATABASE_URL, CACHE_STORE and REDIS_URL, and nothing else.
| framework | the boot sequence and typed configuration, and the authorization every repository call goes through |
| hesape | the components it is built from: database, cache, queue, filesystem, auth, validation, sessions and the rest |
| aru | the CLI: scaffold a project, generate a module, build the views, migrate, serve, and diagnose |
| arandu | the project skeleton, which aru new clones |
| kyse | the component library: import it and draw a screen |
| ui | the starter kit: the authentication screens, published into your project |
| joaju | the WebSocket server, speaking the Pusher protocol |
| mcp | expose an application to an AI client, through the policies it already has |
| examples | a complete application to read, with the security and observability demonstrations |
| homebrew-tap | the Homebrew formula for aru |
The API reference is generated from the doc comments and lives on pkg.go.dev. Every exported symbol carries one, and that is deliberate: it is the documentation that cannot drift from the code, because it sits in the same file.
The CLI documents itself. aru help lists every command, and each one explains
what it writes and what to do with it. aru doctor explains what it found and
what breaks, not which rule was violated.
A guide and a website do not exist yet, and that is a decision rather than a gap: a guide written against an API that still moves is work done twice, and the second time is worse — there is wrong documentation published.
If you would rather read code than prose, examples is a complete application.
Contribution guides live in each repository, and issues and pull requests belong to the one they concern.
Please review the security policy of the repository concerned on how to report a vulnerability. Never open a public issue for one.
Open-sourced software licensed under the MIT license.
