Prologue
Lemmego is a full-stack web framework for Go. You write handlers, models and
migrations in Go; you render with Go templates, Templ, or React and Vue over
Inertia; and you reach a database through a type-safe layer that keeps its
types at compile time rather than behind any.
This page is a map. If you would rather start typing, install the CLI and come back.
Start here
Read these five in order and you will have a running application you understand. It takes about half an hour.
Then build something
The sidebar runs in the order most people need things. Each page links to the next, so you can read straight through a section or jump to the one topic you came for.
- Frontend — pick a rendering approach and wire up Vite.
- The ORM — queries, writes and relationships in plain Go structs. Start here if your project uses the default SQL layer.
- GPA and providers — the provider-backed abstraction underneath. Read it if you need GORM, Bun, MongoDB or Redis, or more than one store at once.
- Migrations — a schema builder and a versioned, reversible history.
- How the framework fits together — the bootstrap pipeline, the service container and the provider system. Worth reading once before you add a module, because every module arrives as a provider.
Reference while you work
- Security — authentication, the current user, CSRF, sessions, authorization and rate limiting.
- Modules — cache, queue, mail, notifications, realtime, file storage, media, search, SEO and payments. Each is a separate Go module you add only if you want it.
- OAuth2 server — issue tokens to your own clients.
- Tooling and shipping — the CLI, the test harness, deployment, and the MCP server that lets an AI agent read your application’s live state.
What makes it different
- Types survive the database.
Repository[T]anddb.Model[T]()return*Userand[]Post, notinterface{}and a type assertion. - Everything is a provider. Modules register themselves through one interface and reach the application through a container, so adding mail or payments does not mean editing framework code.
- One CLI for the whole loop. Scaffolding, code generation, migrations, hot reload, a queue dashboard and a production build.
- Modules are opt-in. A new project depends on the core and nothing else; a part you decline — a cache, a queue, a database — is absent rather than configured off.
Conventions in these docs
Commands are shown as you would type them in a project directory:
lemmego run migrateGo examples assume the imports a generated project already has. Where an import is not obvious, it is shown.