Git as the backend

Every save is a commit.

Each Moteur project is its own Git repository. Plain JSON files, a commit for every save with the name of whoever made it, and a way back from any mistake. Your content is never locked in a database you can’t read.

Louise fixes the accent in an English headline, “Montreal” to “Montréal”, and publishes. The History tab shows the save. Then a terminal: the project’s Git log has the commit, and the site’s script reads the new headline from the API.

One save: the Studio, the commit it made, and what the site reads.

No database

Plain files, in plain folders

A project is a folder you can read: one JSON file per model, per entry, per block. Clone it, search it, diff it, back it up, with the tools you already have.

  • A commit for every save or delete, authored by the person who made it
  • Agents’ changes say who they acted for: “Louise via Claude”
  • Comments, reviews and form submissions stay out of the content’s history

the project’s repository

moteur-journal/
├── project.json
├── models/
│   └── article/
│       ├── model.json
│       └── entries/
│           └── issue-01-1/
│               └── entry.json
├── blocks/
│   └── pull-quote.json
├── layouts/
├── pages/
└── templates/

History

Drag through an article’s past

Every save is a commit, so every version is still there. This article from the demo project went through four hands in one night: drag back through it, and see what each person changed.

57d5758Update article/issue-04-226 Oct 2026, 01:15
Title
COMPAGNON-1: L'Originale: An Obituary for L'Originale
Excerpt
I should not have been there. That is the technicians' work, not the founder's. But when they told me they were going to switch off the COMPAGNON-1 — our first, our prototype, the unit we simply called L'Originale — I…
The demo project’s own history for this entry, commit by commit: the Studio’s History tab shows the same, and so does git log.

In practice

What Git gives you

Things a database-backed CMS sells as extras, because they come with every save.

  • History

    History for every entry

    Every version of every entry, who made it and when, in the Studio’s History tab.

    • See exactly what changed
    • Restore any version as a new one

    git show 4947387

    4947387  Louise Gagnon
    Update article/issue-01-1 — Louise Gagnon
    
    @@ -7 +7 @@
    -  "en": "We Started in a Garage in Montreal"
    +  "en": "We Started in a Garage in Montréal"
  • Schemas

    History for the models too

    Models, blocks and templates are files in the same repository, so a model change is a commit like any other.

    • Restore an old model in the Studio
    • Review a model change in a pull request
  • Branches

    Branches, when you need them

    Rework a site’s models on a branch, then merge it back, through the API or the CLI.

    • List, create, switch, merge
    • For developers only

    terminal

    moteur branches create --project=client-site --name=redesign
    moteur branches switch --project=client-site --branch=redesign
    moteur branches merge --project=client-site --source=redesign
  • Remote

    A remote of your own

    Push each project to your GitHub, GitLab or own server after every commit. A copy you hold, always up to date.

    • Any https remote
    • A failed push never fails a save
  • Ownership

    No lock-in

    Plain JSON in a repository you can take anywhere, read by an engine that’s open source.

    • The engine is MIT
    • Nothing to export
  • Safety

    A way back from anything

    A wrong publish, a deleted field, an agent that got carried away: every one is a commit you can undo.

    • Restoring never deletes history
    • Deleted models go to a trash first

The groove

Four people, one history

Everyone works at once, each in their own lane: writing, translating, reviewing. Every save lands in the same history, and what goes live is what the reviewer approved.

  1. Marguerite Fontaine: Drafts the headline; Asks for review.
  2. Louise Gagnon: Fixes the French title; Adds the cover.
  3. Claude: Translates the excerpt; Marked: not yet read.
  4. Céleste Armand: Sees one word changed; Approves.
  5. Published
Each dot is a save, and each save is a commit in the project’s Git history.

Questions about Git

A writer asksDo writers need to know Git?

MoteurNo. They write and save in the Studio. Moteur makes the commits. Git is there for whoever wants the history, the branches or a copy.

A developer asksCan we use GitHub or GitLab?

MoteurYes. A project can push to any https Git remote after each commit, so your copy is always current. For a private repository, a developer adds a token that can write to it. Moteur keeps it encrypted, outside the repository, and never shows it again.

A tech lead asksWhat isn’t in the repository?

MoteurNotes, reviews, the activity log and form submissions are kept beside the content, not in its history, so the history stays about the content.

A developer asksWhat about merge conflicts?

MoteurMoteur makes the commits itself, so people never resolve Git conflicts. When two saves cross in the Studio, whatever doesn’t clash merges by itself, and the Studio asks which version to keep for the rest.

A leader asksWhat if we stop using Moteur?

MoteurYou keep the repository: every entry, model and file, as JSON. The engine that reads it is open source, so you can keep running it yourself.

Start a project, and read its git log.

Every save from the first one is a commit. Start free, and see for yourself.