ModulaCMS

A modern headless CMS built in Go. One binary, three servers — HTTP, HTTPS, and SSH. Manage your content from the terminal or the API.

Get Started

Why ModulaCMS?

Most headless CMS platforms are bloated SaaS products or sprawling Node.js applications. ModulaCMS takes a different approach: a single Go binary that compiles with zero runtime dependencies. Deploy it anywhere Linux or macOS runs.

Content is structured as a composable tree — pages contain rows, rows contain columns, columns contain components like text, rich text, images, CTAs, and cards. Every piece of content is a node in a doubly-linked sibling list, enabling O(1) reordering without renumbering.

The built-in SSH server runs a full terminal UI powered by Bubbletea. SSH in, manage your content, create routes, configure datatypes — all without leaving your terminal. For programmatic access, the REST API covers everything the TUI can do and more.

Tri-Database Support

Run on SQLite for local development, PostgreSQL for production, or MySQL if that is what you have. One codebase, three database backends, zero config changes beyond a single field in config.json.

Terminal-First Management

SSH into your CMS and manage everything from a rich terminal UI built with Bubbletea. Create content, configure datatypes, manage users and roles — all without opening a browser.

Headless REST API

A complete REST API with role-based access control, audited mutations, and multi-format response output. Deliver content in Contentful, Sanity, Strapi, WordPress, or clean JSON formats.

Architecture

Lua Plugin System

Extend ModulaCMS with Lua scripts that hook into the content lifecycle. Plugins run in sandboxed gopher-lua VMs with channel-based pooling for safe concurrent execution. Register hooks for before and after create, update, and delete operations to add custom validation, transform content, trigger external integrations, or enforce business rules — all without recompiling the server.

Flexible Schema

Define your own datatypes, fields, and relationships through the TUI or API. Datatypes form a composable hierarchy — a Page can contain Rows, Columns, Cards, CTAs, or any custom component you create. Fields support text, rich text, numbers, booleans, dates, media, relations, JSON, and more. Link any field to any datatype, reorder them, and reshape your content model on the fly without migrations or downtime.

SDKs

Official SDKs are available for TypeScript (read-only and admin), Go, and Swift. All SDKs mirror the API surface with typed IDs, branded types, and full CRUD support.