CMStack for TypeScript.
End-to-end type safety from database to view. A Next.js + NestJS monorepo that ships SEO-first pages and a typed API on a non-blocking Node runtime.
Open source · GPL-3.0 · MCP-ready
Early access
Get the stack - leave your email.
We'll be in touch with your CMStack for TypeScript early access.
01 Why this stack
Node performance with the type safety to back it up.
Four reasons the TypeScript edition of CMStack is worth running in production.
01
Async, non-blocking Node runtime
Node's event loop handles many concurrent connections per worker without blocking. More throughput on the same hardware, with no per-request thread overhead.
02
End-to-end TypeScript types
Types flow from the database schema through the NestJS API to the Next.js view layer. Whole classes of runtime errors are caught at build time before they reach a request.
03
Next.js SSR/SSG for SEO-first delivery
Pages are server-rendered or statically generated at build time so search engines index real HTML. Fast Time to First Byte without a separate rendering layer to maintain.
04
NestJS monorepo with Auth.js v5
NestJS's modular architecture keeps the API organised as the project grows. pnpm workspaces manage the monorepo, and Auth.js v5 wires up social login without boilerplate.
02 Features
Everything a serious CMS needs - typed end to end.
The same complete feature set as every CMStack edition, expressed natively in TypeScript.
Content
Pages, posts, categories, tags and menus - the full editorial model, structured and fast to query.
Media library
Upload, organize and serve images and files through a managed media library.
Comments & moderation
Threaded comments with a moderation queue to keep discussion clean.
Roles & permissions
Granular, per-action permissions enforced via CASL so every role sees exactly what it should.
Runtime themes
Switch themes at runtime - no redeploy to change how the site looks.
Plugins & hooks
A typed plugin and hook registry to extend the core without forking it.
Full-text search
Built-in full-text search on PostgreSQL, not a bolted-on afterthought.
Multilingual + hreflang
Author content in multiple languages with correct hreflang signalling.
SEO built in
Open Graph, JSON-LD, sitemaps, robots.txt and llms.txt out of the box.
Social login
Sign in with Google, GitHub, Facebook or LinkedIn via Auth.js v5.
reCAPTCHA v3
Spam protection on public forms with reCAPTCHA v3.
MCP server
An MCP server lets AI clients manage your site through a typed interface.
TypeScript all the way down - not a bolted-on type layer, but a CMS designed from the first line to make the compiler your strongest QA tool.
03 Quickstart
Up and running with one command.
Docker handles the full environment - Node, PostgreSQL and all services in one step.
cp .env.example .env && docker compose up --buildNode ≥22 with corepack - see the repo for the manual path.
04 Roadmap
Toggle on what you need. Lose nothing.
Planned modules switch on and off without resetting your data.
Ecommerce
Products, cart, checkout and orders, built into the same core.
News portal
Sections and featured stories tuned for high-volume publishing.
Vehicle marketplace
Listings with search and filters for buying and selling.
Portfolio
Projects, case studies and galleries for showcase sites.
05 Open source
Open by default. Built to be trusted.
GPL-3.0, in the open
The TypeScript edition is open source under GPL-3.0 - read it, run it, extend it.
Built by Elman Group
Designed and maintained by Elman Group, with a consistent feature set across all CMStack editions.
MCP & AI-ready
A built-in MCP server lets AI clients manage content through a typed, permissioned interface.
Tested with Vitest + Playwright
Unit and integration tests via Vitest, end-to-end coverage via Playwright - automated test coverage ships with every build.
06 Early access
Get the stack - and what's coming next.
Drop your details and we'll get you set up with CMStack for TypeScript.
We'll be in touch with your CMStack for TypeScript early access.
Star the repo. Ship with TypeScript.
CMStack for TypeScript is open source and available today on GitHub.