Meet Labena
Labena is a batteries-included Go framework delivered as an application template. Build a modular monolith with explicit module registration, HTTP APIs, background workers and shared capabilities for authentication, persistence, mail, notifications, storage and observability.
You own the copied application and its dependencies. This documentation follows the shipped code: ordinary Go constructors, typed handlers and clear ownership of resources, data and business operations.
Start building#
New to Labena? Follow this short path. Each guide leaves you with something you can run or change.
- Create an application. Choose your Go module and display name; the installer prepares your source and configuration.
- Run the application. Start PostgreSQL and Redis, apply migrations and check your first HTTP response.
- Create your first module. Register a small Catalog endpoint and test it entirely in process, without a database.
- Maintain your application. Keep template provenance and incorporate upstream fixes into your customized source.
Already running? Use configuration for settings and local development for a persistent development stack.
Find your next task#
| I want to… | Read… |
|---|---|
| Add an API endpoint | Routing, handlers, requests and validation |
| Save data safely | Entities and queries, transactions, migrations |
| Sign users in | Authentication and sessions |
| Run work in the background | Queues and tasks, events, schedules |
| Send email or a notification | Mail, notifications, push |
| Upload and serve files | File storage, media assets |
| Verify a change | Testing basics, HTTP and modules |
| Run in production | Deployment, logging, observability |
Understand the design#
Business modules own their use cases and persistence. App constructs dependencies
and selects the processes to run. Platform capabilities support modules, while
pkg holds technical packages that can be reused independently.
Start with the directory structure, then follow the application lifecycle and module registration. The project conventions are the architecture contract for changes.
Labena uses PostgreSQL for application data, Asynq for Redis-backed tasks and Watermill for process-local events. These have different guarantees: a local event is best-effort, queue acceptance is not a SQL commit, and notification intent can be committed with a business transaction. Each guide explains its boundary.
Learn through a complete recipe#
- A persisted HTTP and CLI operation: follow the same use case through two transports, a service and a repository.
- SQL and notification intent: commit a profile change and its notification intent together.
- Account onboarding reactions: connect registration events, background tasks, notifications and mail.
Keep the reference close#
The configuration reference lists settings and defaults. The API reference explains how to inspect the running application's OpenAPI schema and Go packages. See support and compatibility before adopting or updating the template.
Use the topic groups to browse, Search to find a guide, section or API symbol, and On this page to move within a guide. Every page has a Markdown download; direct links work on ordinary static hosting and with JavaScript disabled.