
A CMS without a database, a build step or a plugin jungle.
ForgeCMS is a single Go binary. Your pages are written in SML, your texts are Markdown in a Git repo on Codeberg. ForgeCMS fetches them at request time, caches them, and serves many domains from one process.
This page is built with ForgeCMS, too.
How it works
Browser β Caddy (TLS) β forgecms β Codeberg (SML + Markdown)
β local cacheOne binary
Written in Go. Copy it to a server, start it, done. One process serves all your domains.
No database
Content lives in Git. Your history, backup and review workflow are just Git.
No build step
Commit a change on Codeberg and it is live within a few minutes. A typo never takes the site down; the last good version keeps running.
Few dependencies
Go standard library, goldmark for Markdown (with chroma for code highlighting) and sml-go for the page language.
Pages in SML, not JSON or YAML
SML is a small, readable markup: elements with properties and children. No HTML, CSS or JavaScript needed. It is easy for people to read and easy for an AI to write.
Page {
title: "My Bakery"
Heading { level: "1" text: "Fresh bread, every morning" }
Markdown { src: "main.md" }
Cards {
Card { title: "Sourdough" text: "Baked daily from a 12-year-old starter." }
Card { title: "Opening hours" text: "TueβSat, 7:00β13:00" }
}
ContactForm { }
}Quickstart
You need Go 1.22 or newer and a public Git repo on Codeberg for your content.
# 1. Get and build ForgeCMS
git clone https://codeberg.org/CrowdWare/ForgeCMS.git
cd ForgeCMS
go build -o forgecms .
# 2. Point it at your content repo (edit the Site { } block)
cp app-demo.sml app.sml
# 3. Run it
./forgecms --port 8080For several domains, put one config per domain in sites/<domain>/app.sml and ForgeCMS switches to multi-site mode on its own. Caddy in front takes care of HTTPS.
The CrowdWare sites repo is our production setup: content, per-domain config and deploy script for every site listed below. AI.md explains the whole system to Claude Code or any other coding agent, so you can simply let an AI build your site.
Modules, live
Each module is part of the same binary and is switched on with a block in app.sml.
| Module | What it does | Try it |
|---|---|---|
| Feature requests | Visitors propose features and vote, magic-link login without passwords | /forgecms/features |
| Events | Dates with flyer, event pages and ICS calendar export | /events-demo |
| Blog | Posts with photos, feed, share buttons without trackers, several languages | art.ubuntu-pirates.com |
| Contact form and newsletter | Form fields defined in SML, spam timer, double opt-in, mailings in Markdown | /contact |
| Shop | Sell for Δ1 (June) and euros, with digital delivery | /shop-demo |
Built in: several languages per site, themes, per-page SEO descriptions, YouTube embeds and more. See what's included and what the modules cost.
Running in production
The page you are reading: forgecms-developers.sml
License
ForgeCMS is free to use under the GPLv3 for non-commercial purposes. If you earn money with it, for example by hosting sites for paying customers, you need a commercial license. Profits are not paid out to individuals; they go into UBUNTU land projects.





