Go 1.26 · chi + templ · PostgreSQL

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.

No spam. We'll only email you about CMStack early access.

Go 1.26
Runtime
chi v5
net/http router
0
Client JS
GPL-3.0
Open source
pgx
PostgreSQL

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.

cmstack-go
$ make tools && cp .env.example .env && make generate migrate-up run

Go 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.

No spam. We'll only email you about CMStack early access.

Star the repo. Start building.

CMStack for Go is open source, on GitHub, and shipping today.