Six months ago ForgeCMS was a weekend experiment: can a website run without WordPress, without a database and without a build step? Today it runs several real sites, and it covers most of what a small business, an association or a creator needs from a website.
This post gives an overview of what's there, how it works, and how you can tell us what should come next.
The idea in one paragraph
ForgeCMS is a single Go binary. Your content lives as Markdown and small SML files in a Git repo on Codeberg. The server fetches the files at request time, caches them, and renders HTML. There's no database, no admin backend to keep patched, and no build pipeline. You edit a file in Git, and a few minutes later the change is live.
What a page looks like
Pages are written in SML, a simple markup of nested blocks with properties:
Page {
title: "My Bakery"
Heading { level: "1" text: "Fresh bread, every morning" }
Text { value: "Family-owned bakery in Wittenberg. Stone oven, no additives." }
Cards {
Card { title: "Sourdough" text: "Baked daily from a 12-year-old starter." }
Card { title: "Opening hours" text: "Tue–Sat, 7:00–13:00" }
}
Link { href: "mailto:hallo@meinebaeckerei.de" text: "Get in touch" }
}
Longer texts are plain Markdown. You can read SML in seconds, and it turns out an AI can write it just as easily. That was a deliberate choice: many of our sites are edited by describing the change to Claude Code on the server, and it gets SML right on the first try.
What's already in the box
The free core covers:
- pages in SML and Markdown, menu, footer, themes
-
multiple languages: a
de/,en/,es/… subfolder per language, with fallback to the default - menu, footer and routes can live in the content repo too, so editing the site never requires touching the server
- sliders, cards, tables, images, YouTube embeds, privacy-friendly analytics (Umami)
- a content cache that keeps serving the last good copy if Git hosting is slow or down
On top of that there are modules, each built for a real site:
| Module | What it does |
|---|---|
| Blog | Posts with photos, pages, Atom feed, drafts and scheduled posts, share buttons without third-party scripts, several languages |
| Events | Dates and gigs with flyer thumbnails, an event page per date, past events, .ics calendar export |
| Contact form | Text fields, checkboxes, radio buttons, selection lists; messages go by email and are not stored |
| Newsletter | Double opt-in, mailings written in Markdown in a small admin page, one-click unsubscribe (RFC 8058) |
| Shop | Physical and digital products, paid in June (Ğ1) or by euro bank transfer, no payment provider |
| Feature requests | Visitors propose features and vote, one vote per person |
Everything that needs to be stored, like orders or newsletter addresses, is stored as small SML files on the server. Still no database.
A few of these are running in public:
- the blog: art.ubuntu-pirates.com, a travel blog of a bike trip to Spain, written on the road
- the events demo: crowdware.info/events-demo
- the shop demo: crowdware.info/shop-module (the demo orders are real, you get a handwritten postcard)
- contact form and newsletter: crowdware.info/contact
Login without passwords
The modules that need a login (feature voting, newsletter admin) use magic links. You enter your email address and get a link, and that's it. There are no passwords to leak and no accounts to manage. Login tokens live only in memory.
We use the email address for one more thing: it keeps feature voting fair. One address, one vote per request, and you can take your vote back any time. Nobody sees who voted for what.
You decide what we build next
This is the part I'm most happy with. On crowdware.info/forgecms/features anyone can propose a feature for ForgeCMS or vote for the ones they want. The requests with the most votes get built first.
It works. So far five features have been proposed:
- Contact form — done
- Event calendar — done
- Blogging module — done (comments are not in yet)
- Mailing list — done, as the newsletter module
- Online course (lessons with videos and texts, saved progress) — open
That's four out of five done within a few days of being proposed. The online course is the next candidate, and if it matters to you, a vote helps.
The voting page itself is the feature-request module, so you're testing it while you use it.
Hosting: small and cheap
ForgeCMS needs very little. All our sites share one small VPS with a single forgecms process behind Caddy, which takes care of HTTPS. A €1/month VPS is enough for a small site. The README walks you through setting one up with Claude Code doing the work, even if you've never run a server.
License and pricing
- The core is open source under GPLv3. For commercial use there's a commercial license.
- Modules are a one-time license of €19 to €39, with no subscription. All six together cost €139.
- If you'd rather not do it yourself, we build the site for you at €130/hour (or 130 Ğ1). Small sites are often done in an hour.
If we ever make a profit, it isn't paid out to individuals. It goes into UBUNTU land projects that take land out of speculation.
Try it, and tell us what's missing
- Propose or vote for a feature: https://crowdware.info/forgecms/features
- Overview and modules: https://crowdware.info/forgecms
- Source code: https://codeberg.org/CrowdWare/ForgeCMS
- Get in touch: https://crowdware.info/contact
I'd love to hear what you would need before you'd move a site off WordPress. The best place for that is the feature request page, because there it gets votes.
Top comments (0)