Learn
What is a Git-based CMS?
A content management system that keeps content as files in a Git repository instead of rows in a database. Every change is a commit, with who made it and when. People edit in a browser, and developers read the same files with the tools they already use.
an article’s life, as commits
$ git log --oneline
4f1c2e9 Publish article/spring-menu — Louise
a07b3d1 Update article/spring-menu — Marguerite
93e5c80 Update article/spring-menu — Louise via Claude
1d2f6aa Create article/spring-menu — LouiseHow it works
Content as files, history as commits
Most Git-based systems share four ideas.
Files
Content is files
Each entry is a file you can open: Markdown, MDX or JSON, depending on the system. Moteur writes JSON, one file per entry.
models/article/entries/hs-editorial/entry.json
{ "id": "hs-editorial", "type": "article", "data": { "title": { "fr": "Un an après la fin", "en": "A year after the end" }, "slug": { "fr": "un-an-apres-la-fin", "en": "a-year-after-the-end" }, "excerpt": { "fr": "Pourquoi nous revenons, une seule fois.", "en": "Why we are coming back, just once." }, "author": "louise", "readingTime": 3, … } }History
Every save is a commit
The repository’s history is the content’s history. Compare two versions, see who changed a word, put back what was lost.
Editing
Edited in a browser
Writers don’t touch Git. An editor in the browser saves their changes, and the commits happen behind them.
Ownership
Yours to take away
A repository can be cloned, pushed elsewhere and read without the CMS. Leaving means taking your files, not running an export.
Three ways to keep content1
One writes to your site’s repository. One keeps content in its own database. Moteur gives each project a repository of its own, behind an API.
| Moteur | TinaCMS | Contentful | |
|---|---|---|---|
| Where content lives | Plain JSON files in the project’s own Git repository | Markdown, MDX and JSON files in your Git repository1 | Contentful’s cloud2 |
| Git | Yes: each project is its own repository, a commit per save | Yes: each save is a commit, straight to the branch unless it’s protected3 | No2 |
| History | Every save is a Git commit, kept as long as the repository | Your repository’s Git history4 | A version at each publish, to compare and restore5 |
| Hosting | Moteur Cloud. Or host the open-source engine yourself, without the Studio | TinaCloud, or host the backend yourself1 | Hosted only2 |
| How a site reads it | REST, with an OpenAPI document per site. No GraphQL | GraphQL, generated from your schema6 | REST and GraphQL7 |
| Reviews | Drafts and reviews on every plan. A reviewer or admin approves | Paid plans: a save to a protected branch opens a GitHub pull request8 | Drafts on every plan. Approval workflows on Premium9 |
Sources
Checked 26 October 2026. Each rival’s facts link to the page that says so, and carry the date we checked.
Fit
Where it shines, and where it gets in the way
Good at
History you can trust
Every change is recorded by a tool built for exactly that. Audits, rollbacks and “who changed this?” don’t depend on the CMS.
- Diffs word by word
- Backups are a git clone
Good at
Developers’ own tools
Search the content with grep, review it in a pull request, script a change across a hundred entries.
- No export step
- Content and its models in one place
Watch for
Many people at once
Files merge well, but two people in one entry need care. Look for a CMS that shows who’s where and keeps one version of each field.
- Moteur shows who’s in which field
- On Moteur Cloud
Watch for
Things that aren’t content
What visitors send, comments, tokens and keys don’t belong in a public history. Check where a Git-based CMS keeps them.
- Moteur keeps them beside the repository
- Never committed
Questions about Git-based CMSs
A client’s editor asksDo writers need to know Git?
MoteurNo. In Moteur they write in the Studio, and every save becomes a commit with their name on it. They never see a branch or a merge.
core/src/entries.ts
// core/src/entries.ts: the message of every save
message: `Create ${modelId}/${commitRef(entry, entry.id)} — ${user.name ?? user.id}`,
// …
message: `Publish ${modelId}/${commitRef(entry, entryId)} — ${user.name ?? user.id}`,An agency owner asksIs a Git-based CMS a static site generator?
MoteurNo. It’s where content is kept and edited. A site built with Astro, Next.js or anything else reads it, at build time or on each request.
An agency developer asksDoes the content have to live in the site’s own repository?
MoteurNot with Moteur. Each project is its own repository, and sites read it through an API. So one project can feed a site, an app and a newsletter.
An agency owner asksCan I move my content out of Moteur?
MoteurIt’s already out. Push the project’s repository to your own Git remote, and the plain JSON files are yours, readable without Moteur.
Try a CMS where every save is a commit.
Start for free, save something, and read the git log.