On this page

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.

  1. Create an application. Choose your Go module and display name; the installer prepares your source and configuration.
  2. Run the application. Start PostgreSQL and Redis, apply migrations and check your first HTTP response.
  3. Create your first module. Register a small Catalog endpoint and test it entirely in process, without a database.
  4. 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#

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.

Documentation

Search guides, sections, and API names.