CMStack for Go.
Go 1.26 over net/http and chi, rendered server-side with templ and Tailwind - htmx and Alpine for interactivity, PostgreSQL via pgx underneath. One compiled binary, near-zero client JavaScript.
Open source · GPL-3.0 · Server-rendered
Early access
Get the stack - leave your email.
We'll be in touch with your CMStack for Go early access.
01 Why this stack
Go and PostgreSQL, built clean from day one.
Every technology choice has a reason. Here is why this combination stays fast and predictable under load.
01
A compiled binary on net/http + chi
One statically-linked Go 1.26 binary - no interpreter or runtime to provision. net/http with the chi v5 router handles routing, middleware and graceful shutdown with almost no dependencies.
02
templ + Tailwind, server-rendered
The UI is compile-time typed templ components, styled with the Tailwind standalone CLI - no Node toolchain. htmx v2 and Alpine.js v3 add interactivity as small server-rendered islands, so pages ship near-zero JavaScript.
03
PostgreSQL via pgx, type-safe with sqlc
Queries are written in SQL and compiled to type-safe Go by sqlc; pgx v5 talks to PostgreSQL directly; goose manages migrations. The data layer is checked at build time, not discovered at runtime.
04
Strict layering + transactional outbox
One-directional layers: handlers decode and validate, services hold all business logic, repositories are the only layer touching the database. Side effects ride a typed event bus - synchronous listeners run in-transaction, async ones via a transactional outbox drained by a worker relay.
05
Idiomatic Go, no magic
Dependencies are wired explicitly with constructor injection - no globals, no DI framework. Patterns earn their place (Repository, Service, event bus, outbox); over-engineering like CQRS and DI containers is deliberately left out.
02 Features
Shipping today - in native Go.
The foundation, authentication, content and admin are implemented and tested. Here is what that means in the Go edition.
Content: Posts, Pages, Services
The full editorial model with revisions and restore, draft and scheduled publishing, trash/restore, reading time and write-time HTML sanitization.
Auth & social login
Email/username + password with argon2id, signup with email verification, password reset, and social login with Google and GitHub via goth. Sessions rotate on login and after credential changes.
Roles & permissions
Administrator, Editor, Author and Member with granular (action, subject) RBAC enforced server-side on every request and bulk action.
Profiles & author pages
Self-service account with avatar upload, plus a public author page carrying Person / ProfilePage JSON-LD - without leaking email addresses.
Media handling
Uploads validated by magic-byte MIME sniffing with a pluggable storage backend (local now, S3-ready) - served by the app, never trusted by file extension.
Secure by default
CSRF protection (nosurf), HTML sanitization (bluemonday), security headers and CSP, per-IP rate limiting and anti-enumeration - all wired in from the start.
Typed event bus + outbox
Side effects are decoupled through an in-process typed event bus; async work is delivered reliably via a transactional outbox and a worker relay.
Tested on real Postgres
Covered by go test + testify, integration tests on a real PostgreSQL through testcontainers-go, and Playwright end-to-end browser tests.
Go gives you a fast, compiled foundation. CMStack gives you the product - not a stripped-down port, but a CMS built clean from day one to feel native to Go.
03 Quickstart
Clone, migrate, run.
A Makefile installs the dev tools (templ, sqlc, goose, Tailwind) and drives the whole build - no Node required.
make tools && cp .env.example .env && make generate migrate-up runGo 1.26 + PostgreSQL 14+ - the full guide (sqlc, goose, Tailwind, the outbox worker) lives in the repo. Read the guide →
04 Roadmap & parity
Reaching full CMStack parity.
CMStack-Go ships with auth, roles, profiles, content and the admin today. These land next on the shared CMStack canon - toggled on without resetting your data.
Full-text search
Search powered by PostgreSQL itself - no separate search service to operate.
Comments & moderation
Threaded discussion with a moderation queue.
Runtime themes & plugins
Swap themes and extend the core through the event bus without forking.
Multilingual + hreflang
Author in multiple languages with correct hreflang output.
MCP server
A typed, permissioned interface for AI clients to manage content.
Add-on modules
Ecommerce, news portal, vehicle marketplace and portfolio, on the same core.
05 Open source
Open by default. Built to be trusted.
GPL-3.0, in the open
The Go implementation is open source under GPL-3.0 - read it, run it, extend it.
Built by Elman Group
Designed and maintained by Elman Group, sharing one feature canon and one quiet-luxury design system across every CMStack edition.
Tested on real infrastructure
go test with testify, integration tests against a real PostgreSQL via testcontainers-go, and Playwright end-to-end browser tests - evidence, not assumptions.
Adversarial review at every milestone
The strict layering - handlers thin, services owning logic, repositories owning data - is enforced by review at each milestone, not left to convention.
06 Early access
Get the stack - and what's coming next.
Drop your details and we'll get you set up with CMStack for Go.
We'll be in touch with your CMStack for Go early access.
Star the repo. Start building.
CMStack for Go is open source, on GitHub, and shipping today.