Skip to content
v0.5.5

The Go framework that ships batteries included

Routing, an ORM, migrations, auth, queues, mail, realtime and a frontend — wired together, type-safe, and yours to replace one piece at a time.

$curl -fsSL https://raw.githubusercontent.com/lemmego/cli/refs/heads/main/installer.sh | sudo sh

What it looks like

// cmd/app/main.go
func main() {
    app.Configure().
        WithProviders(bootstrap.LoadProviders()).
        WithRoutes(bootstrap.LoadRoutes()).
        WithMiddlewares(bootstrap.LoadMiddlewares()).
        Run()
}
// bootstrap/providers.go
func LoadProviders() []app.Provider {
    return []app.Provider{
        &logger.Provider{},
        &session.Provider{},
        &ormconnector.Provider{},
        &inertia.Provider{},
        &queue.Provider{DashboardAuth: mayUseTheDashboard},
        &auth.Provider{Opts: &auth.Opts{UserLoader: loadUser}},
    }
}

Two of those take a rule you own. UserLoader turns the id a credential carries into your user; DashboardAuth decides who may retry and cancel jobs. The scaffold writes both.

Start here

The modules

Each is its own Go module and its own repository. A project takes the ones it needs and nothing else.

Coreapi routing, middleware, DI, sessions, config, validation · cli scaffolding and generators · log rotating files and a terminal-aware console
Dataorm generic SQL persistence · gpa the multi-provider abstraction · migration dialect-aware schema evolution · search full-text over tsvector
Identityauth credentials, sessions, JWT and social sign-in · authz policies, ownership and a route gate · oauth2 an authorization server
Deliverymail SMTP with queued sending · notify one notification over many channels · broadcast SSE and WebSocket behind one contract
Frontendinertia React or Vue with SSR · templ type-safe Go components · seo meta, JSON-LD, sitemaps and slugs
Infrastructurequeue background jobs and a cron scheduler · cache memory, file and redis stores · fsys local, S3 and GCS · media image ingest with no CGO · ratelimit middleware over the cache
Commercepay one hosted checkout and one webhook
Testingapptest boots the real application against a scratch database