Skip to content

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.

New to web frameworks? The Glossary defines every term these docs use — route, handler, middleware, provider, migration, session — in plain language, saying what each thing is and why it exists. Keep it open in a tab; pages link into it on first use.

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] and db.Model[T]() return *User and []Post, not interface{} 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 migrate

Go examples assume the imports a generated project already has. Where an import is not obvious, it is shown.

Lemmego is pre-1.0 and under active development. Minor versions may change public APIs. Upgrade notes lists every change that needs action on an existing project.