A real HTTP layer
Pattern routing, groups, handler-chained middleware, typed errors that negotiate JSON or HTML, and validation that reads like a sentence.
An ORM, or yours
Generic queries over database/sql — no casting, no interface{}. Prefer GORM, Bun, Mongo or Redis? Swap the GPA provider and keep the same shape.
Migrations that travel
One declaration renders per dialect. PostgreSQL, MySQL and SQLite each get the right unsigned integer, timestamp and index form.
Background work
A queue over a cron scheduler, with a dashboard that stays closed until you name who may retry and cancel jobs.
Pick your frontend
Inertia with React or Vue and server-side rendering, type-safe Templ components, or plain Go templates.
Everything is a provider
Each capability is its own module behind an interface. Add one, replace one, or write your own against the same seam.
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.
| Core | api routing, middleware, DI, sessions, config, validation · cli scaffolding and generators · log rotating files and a terminal-aware console |
| Data | orm generic SQL persistence · gpa the multi-provider abstraction · migration dialect-aware schema evolution · search full-text over tsvector |
| Identity | auth credentials, sessions, JWT and social sign-in · authz policies, ownership and a route gate · oauth2 an authorization server |
| Delivery | mail SMTP with queued sending · notify one notification over many channels · broadcast SSE and WebSocket behind one contract |
| Frontend | inertia React or Vue with SSR · templ type-safe Go components · seo meta, JSON-LD, sitemaps and slugs |
| Infrastructure | queue 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 |
| Commerce | pay one hosted checkout and one webhook |
| Testing | apptest boots the real application against a scratch database |