Git-Based CMS: When a Website Without a Database Fits
A git-based CMS keeps content as files in Git, so your site needs no database. See how danubelabs.net works, what the limits are and who it suits.

A git-based CMS stores your website's content as files in a Git repository instead of a database. An admin panel edits those files and commits the changes through the GitHub API, then the host rebuilds the site. A website without a database has nothing to secure, patch or pay for on the data side, and every edit is a commit you can roll back. It suits sites where a few editors change the content, and it is a poor fit where visitors create it.
What is a git-based CMS?
A traditional CMS answers each request by querying a database and building the page. WordPress, for example, recommends PHP plus MySQL or MariaDB. A git-based CMS removes the database from the picture. Content lives in JSON, Markdown or YAML files in your repository, the build step turns those files into pages ahead of time, and the host serves the finished pages from a CDN.
Editors still get a normal admin interface. Decap CMS is an open-source example. Its documentation describes a React app that wraps the Git workflow, keeps content in your repository and works with GitHub, GitLab or Bitbucket. You can also write your own admin, which is the route we took.
How does danubelabs.net work without a database?
The site runs on Next.js 16 (App Router), React 19, Tailwind 4 and TypeScript. Every page, service, project and blog post is a JSON file in the Git repository. Appointments live in Google Calendar, as described in our booking article, so no database exists anywhere in the stack.
Content is JSON with a field per language
Every user-facing text field is an object with an en and a ro key. This is a trimmed entry from the services file:
{
"slug": "web-development",
"title": { "en": "Web development", "ro": "Dezvoltare web" },
"group": "build",
"published": true
}A small function resolves a whole object tree for one locale when a page renders. Fields that must not be translated, such as slugs and prices, are marked in the schema. The admin forms are generated from that same schema, so a new field needs no new form code.
The save path
- An editor changes a field in
/adminand presses save. - The admin calls a storage layer with two backends: the local disk in development, and the GitHub Contents API in production. Two environment variables, a token and a repository name, switch it.
- The API call creates a commit on the main branch. GitHub's endpoint needs a commit message, the file content in Base64 and, for an update, the SHA of the file being replaced.
- Netlify sees the commit and rebuilds the site.
- The new pages go live in both languages.
What are the benefits of a website without a database?
- No database to secure, patch, back up or pay for. Fewer moving parts means fewer things to break at 3 a.m. and a smaller attack surface on the data layer.
- Full history and rollback. Each admin save is a commit with a message and an author. To undo a bad edit, revert that commit.
- Free hosting. danubelabs.net runs on Netlify's free tier. Pre-built pages need little compute.
- Speed. Pages are generated ahead of time and served from a CDN. The home and contact pages score 100 in all four Lighthouse categories: performance, accessibility, best practices and SEO.
- Review and branching. Content changes can go through branches and pull requests like code, if you want an approval step.
- Portability. Your content is plain files you already hold. There is no export step and no vendor to ask.
Cost is part of the story too. We cover what a site costs in Romania, including hosting and maintenance, in how much a website costs in 2026.
What are the limits of a git-based CMS?
Build minutes run out
Netlify's free tier counts builds against a monthly allowance. On our account that is 300 build minutes. Every admin save and every media upload is a commit, and every commit is a build. This year the minutes ran out once. Deploys stopped without any failure message, and the builds skipped during the outage were not retried after the reset, so we had to trigger a fresh build by hand.
Newer Netlify accounts use credits instead. According to Netlify's billing docs, the Free plan has a hard limit of 300 credits a month and a production deploy costs 15 credits, which allows at most 20 production deploys a month. Check which model your account uses.
The fix is to stop building when nothing visible changed. Netlify skips a deploy when the commit message contains [skip ci] or [skip netlify]:
git commit -m "Update internal notes [skip ci]"The next commit without the marker builds everything, including the skipped changes. We use the marker on notes-only commits, and contact-form submissions already carry it. Media uploads are the next place to apply it, because an image does not change the rendered site until a page references it.
Writes are not instant
A save is live only after the commit, the build and the deploy finish. Build time depends on your site, so measure your own deploys. If editors need to see a change within seconds, a database-backed CMS or a headless SaaS CMS fits better.
No user-generated content at scale
Comments, reviews, user accounts, forums and carts create data all day. Every write would be a commit and a build. Keep that data in a database or a service built for it.
Concurrent edits and large files
An update must quote the SHA of the version it replaces, so two people saving the same file at the same moment is a conflict you have to handle. Git does not hide it. GitHub's contents endpoint also supports all features only for files up to 1 MB, accepts raw media types between 1 and 100 MB and refuses anything larger. Keep images small and keep them out of the content files.
Shops with live stock
Stock levels, prices and orders change by the minute and by visitor action. That is database work. A git-based CMS can hold the product descriptions, and a shop service or database should hold everything that changes at checkout.
Git-based CMS vs WordPress vs headless SaaS CMS
| Git-based CMS | WordPress | Headless SaaS CMS | |
|---|---|---|---|
| Where content lives | Files in your Git repository | A MySQL or MariaDB database | The vendor's hosted database, read through an API |
| Database you run | None | Yes | None, the vendor runs it |
| Typical hosting | Static host or serverless platform, free tiers exist | PHP host with a database, usually paid | Your front end on any host, plus the vendor's plan |
| Edit history | Every save is a commit, rollback is a revert | Post revisions, restoring the whole site needs a backup | Varies by vendor and plan |
| Live after saving | After the rebuild finishes | Immediately | Immediately through the API, or after a rebuild if the front end is static |
| Content ownership | Plain files you already hold | Database export | Export through the vendor's tools, check how |
| Plugins and ecosystem | Small | Very large | Vendor features and integrations |
| User content and shops | Poor fit | Strong, with plugins | Usually needs a separate backend for orders and users |
| Main cost | Developer time and build limits | Hosting and maintenance | A subscription that scales with usage, see the vendor's pricing page |
Who is a git-based CMS right for?
It fits company and marketing sites, portfolios, documentation, blogs with a handful of editors and bilingual brochure sites. These sites change a few times a week, by people you know, and they gain the most from speed, history and free hosting.
It fits badly with marketplaces, membership sites, forums, shops with live stock and any site with hundreds of editors or content that must go live within seconds. If you are unsure, list who creates content and how often it changes. When the answer is visitors, or every few seconds, choose a database.
How do you build a site like this?
- Pick a framework that builds pages ahead of time, such as Next.js.
- Model your content as JSON or Markdown with a schema, one file per page or item, with a field per language if the site is bilingual.
- Add an admin. Decap CMS gives you one off the shelf, and a custom admin gives you full control over forms and permissions.
- Connect the repository to a host that deploys on every commit.
- Decide the commit rules: which saves should build, and which should carry
[skip ci].
If your admin can live elsewhere, for example Decap CMS signing editors in through their Git provider, the site itself can stay a pure static export. In Next.js that is one setting:
// next.config.js
const nextConfig = {
output: 'export',
}
module.exports = nextConfigThe Next.js docs list what a static export cannot use: Incremental Static Regeneration, Server Actions, Proxy and the default image loader are all unavailable. Our admin has server routes that hold the GitHub token and write commits, so danubelabs.net runs on Netlify's Next.js runtime instead.
Want a site like this?
Danube Labs builds bilingual, database-free sites with an admin your team can use, hosted in your own repository and hosting account. You can see the result in the danubelabs.net case study, read what we build on the web development page, or book a free intro call to check whether a git-based CMS fits your site.
Frequently asked questions
- What is a git-based CMS?
- A git-based CMS keeps your content as files, such as JSON or Markdown, in a Git repository instead of a database. An admin interface edits the files and commits the changes through the Git provider's API. The host then rebuilds the site. You get version history and rollback for free, and you run no database server.
- Can a website work without a database?
- Yes. Pages can be built ahead of time from files and served from a CDN, so no query runs when a visitor arrives. This suits company sites, portfolios, documentation and blogs. It does not suit anything that collects user data all day, such as shops with live stock, forums or membership areas, which need a database or a service built for that data.
- Is a git-based CMS good for SEO?
- It helps with the technical side. Pages are pre-rendered, load fast and are easy for crawlers to read. Rankings still depend on your content, site structure, structured data and links, so no CMS type ranks a site by itself. danubelabs.net scores 100 in all four Lighthouse categories on its home and contact pages.
- Can non-technical editors use a git-based CMS?
- Yes, if the CMS puts a form-based admin in front of Git. Editors fill in fields and press save, and the admin writes the commit for them. Decap CMS is an open-source option, and a custom admin generated from a schema is another. Raw Git alone is not an editor interface and should not be handed to editors.
- When should I not use a git-based CMS?
- Avoid it for shops with live stock, marketplaces, forums, membership sites, comment-heavy blogs and any site where hundreds of people edit or where changes must go live within seconds. Every save is a commit and a build, so volume and speed are the limits. Choose a database-backed CMS or a headless SaaS CMS for those cases.
- Is a git-based CMS cheaper than WordPress?
- Hosting is often cheaper, because pre-built sites can run on free tiers and there is no database server. Build allowances apply on those tiers, so a busy editing schedule can use them up. The real cost is developer time to set up the schema and the admin. Compare setup, hosting and maintenance together.


