A Decap rewrite that counts its predecessor's issue tracker, and a checklist that runs all at once
Project brief: Leading Git-based headless CMS. Successor to Netlify/Decap CMS. Modern UX, first-class i18n support, mobile support + 100s of improvements. Framework-agnostic, open source & free.
At a glance
- What is it?
- Sveltia CMS is a single page, Git-based headless CMS built as a full rewrite of Netlify CMS, now Decap CMS. Its compatibility story is measured against that project's open issues, and its own quality gates are a list of check scripts wired to run together without stopping at the first failure.
- Who is it for?
- Sveltia CMS suits a team already storing content in Git that wants an editor UI without standing up a backend, and the repository backs that claim with a real engineering setup: a rewrite with tracked compatibility against the predecessor's issues, a locale checker for the i18n claim, and a component coverage threshold written into the test command. Verify three things before committing.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- sveltia/sveltia-cms3,090 ★ · +452
| Repository | 2026-07-30 | 2026-11-13 |
|---|---|---|
| sveltia/sveltia-cms | 2.6k | 3.1k |
452 Stars in the last 106 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Compatibility is measured against another project's issue queue
The project's claim to exist is a rewrite: a complete modern rewrite of Netlify CMS, now known as Decap CMS, which the documentation describes as having been neglected for years. That sentence is an assertion about a third party's maintenance record, and nothing in this repository supports it. What is measurable follows two paragraphs later. Sveltia CMS continues to deal with issues reported in the Decap repository, and it counts them: 355 solved, 805 including duplicates. So the compatibility work is defined as a queue that belongs to another project, and the counter is the project's own.
The same paragraphs attach four unmeasured adjectives to the result, significantly improved performance, security, reliability, and experience, and name U.S. government agencies among the projects that have switched. Neither the comparisons nor the agency claim appear anywhere else in the documentation. The two migration figures that are given as counts live in the example listing instead: 170 sites migrated from Decap CMS and 95 from WordPress, out of 620 listed in total.
Feature complete in an announcement, roadmap still linked in the docs
The announcements list carries a post titled Sveltia CMS is now feature complete, followed by an invitation to switch from Decap CMS. Four links up, the documentation list still offers a Roadmap page described as upcoming features and improvements. Both statements sit in the same file, neither carries a version number, and neither is dated in the text, so a reader has no way to tell which came first or what the remaining roadmap items are.
The other two announcements are operational rather than technical: a community insights round for June 2026, and a post announcing that the project now accepts donations, with the funding target pointed at a GitHub sponsors page that package.json names as the repository's funding url. The rest of the community surface is four links, Bluesky, Discord, GitHub Discussions and a contributing guide, which means support for a project that ships patch releases several times a week runs through a Discord server and a discussions board rather than through anything in the code.
Ten check scripts run together, and the audit ignores registry failures
The quality gate is one command. The check script runs every script whose name starts with check, using a regex and a no-bail flag, so a failing lint does not hide the result of the spell checker, and one run reports everything rather than the first problem. The list behind it is longer than the word gate suggests: audit, cspell, eslint, imports, l10n, oxlint, prettier, stylelint and svelte, run in that order by name.
"check": "pnpm run --no-bail '/^check:.*/'",
"check:audit": "pnpm audit --ignore-registry-errors",
"check:imports": "node scripts/find-unused-imports.js",
"check:l10n": "node scripts/check-locales.js",
"check:oxlint": "oxlint .",
"test": "NODE_OPTIONS=--no-experimental-webstorage vitest run",
"test:components:coverage": "NODE_OPTIONS=--no-experimental-webstorage vitest run --coverage --project browser --coverage.include='src/lib/components/**/*.svelte' --coverage.thresholds.branches=98.4"Two details are worth reading twice. Two JavaScript linters run over the same tree, eslint and oxlint. And the dependency audit carries an ignore-registry-errors flag, so advisories are reported when the registry answers and skipped when it does not, which means a clean audit line is not proof that the tree was checked that day.
Unit tests run with the browser storage API switched off
Every test command in package.json sets NODE_OPTIONS=--no-experimental-webstorage, including the unit run, the component run and the coverage run. That flag removes the Web Storage API from the Node process, so unit tests cannot accidentally pass against storage the browser would not have. Components are then covered in a real browser project instead, and the coverage command carries its threshold in the command line rather than in a config file: branches at 98.4, scoped to src/lib components only.
End-to-end tests are separate again, driven by Playwright with its own config under e2e/, with a second script that opens the Playwright UI for local runs. So there are three layers with three different environments, and one of them is a percentage that will fail the build when it drops. The trade is that the storage layer, which matters most in a CMS whose content arrives through Git, is the part exercised only by the browser project and the end-to-end suite rather than by the fast unit layer.
One static page, and no server-side half in the repository
The deliverable is described as a small, maintenance-free, single page web application served from a CDN, and the repository matches that shape. The root holds index.html, svelte.config.js, vite.config.js and jsconfig.json, the build script is vite build, the dev script is vite, and package.json declares the package as @sveltia/cms with type module. Nothing at the root suggests a server, and the framework-agnostic claim is supported by naming Astro, Eleventy and Hugo as the generators it pairs with, plus plain JavaScript sites.
That shape has one consequence the documentation never fills in. A Git-based CMS has to authenticate against a Git provider before it can write commits, and the five documentation pages listed at the top of the repository are Introduction, Getting Started, Migration Guides, Working with AI and Roadmap. None of them is about authentication or a backend, and the tree contains no OAuth callback, no server and no database. Whatever login flow you end up with is configuration you supply, and this repository supplies only the editor.
A CLAUDE.md at the root and an llms.txt in the docs list
Two files make this repository readable by machines as well as people. CLAUDE.md sits at the top level, next to LICENSE.txt, SECURITY.md, CONTRIBUTING.md and package.json, which means an AI assistant is given standing instructions by the project itself rather than by whoever clones it. The documentation list names the other one: a page titled Working with AI, described as an official Agent Skill and llms.txt.
Both fit a project whose entire content model is configuration files and markdown, so shipping the schema and the documentation in a form a tool can read is consistent with the rest of the design. The rest of the tooling says the same thing from the other direction: a spell checker with its own cspell.config.yaml, a Prettier config, a stylelint config covering css, scss and svelte, an eslint flat config, and two homegrown node scripts for unused imports and for locale completeness. The repository is unusually willing to be checked, which is the strongest evidence available here that the feature complete announcement describes a state somebody maintains.
The example listing is faceted, and two of its facets carry editorial labels
The 620 examples are not one list. Each facet of the listing is a query against the same set: migrated-from=decap-cms, migrated-from=wordpress, framework=astro, framework=eleventy, framework=vanilla, and feature=i18n. Two of those facets carry labels in the documentation rather than in the data, Most popular on the Decap migrations and Trending on the plain JavaScript sites. Nothing defines how either is computed, so both are editorial judgements attached to a number that is not a usage measurement.
What the facets do show is which combinations the project expects in the wild, and there the picture is coherent with the rest of the documentation. Migrated Decap installs lead, WordPress exports come second, the three named static generators are broken out separately, and i18n is a first-class filter, which is the one feature claim with a matching check script in package.json. The listing is described as updated daily, so the counts move and any number quoted from it, including the 620, 170 and 95 above, is a snapshot rather than a fixed total.
Three patches in four days, with the manifest matching the newest tag
The release cadence is visible in the tags. v0.227.4 was published on 2026-10-04, v0.227.3 on 2026-10-03 and v0.227.2 on 2026-10-01, and the version field in package.json reads 0.227.4, the same string as the newest tag. That agreement is worth stating because it is not automatic in a project shipping this often: the manifest and the published artifact can drift apart, and here they have not. The project is also still on a zero major version after all of that, so every install is on a pre-1.0 line.
For contributors, the Node version is pinned twice, once in .nvmrc and once in a .ncurc.yaml at the root, alongside a pnpm lockfile and a pnpm workspace file, so the toolchain is declared rather than assumed. The licence is MIT in package.json and the licence text sits in LICENSE.txt, which is worth knowing because a file named LICENSE alone is what most scanners look for. The last push to main is dated 2026-10-01, which is the same moment as the oldest of the three tags.
Editorial conclusion
Sveltia CMS suits a team already storing content in Git that wants an editor UI without standing up a backend, and the repository backs that claim with a real engineering setup: a rewrite with tracked compatibility against the predecessor's issues, a locale checker for the i18n claim, and a component coverage threshold written into the test command. Verify three things before committing. Read the LICENSE.txt file yourself, since the licence is declared in package.json and MIT but no licence text is quoted in the documentation. Check that the Decap CMS configuration you already have loads, because compatibility is claimed in issue counts rather than in a published compatibility matrix. And treat the published example counts and the government-agency migration claim as marketing surface, not as evidence of anything about your own deployment. The authentication story is not in this repository, so plan where the Git provider login happens before you deploy.
Frequently asked questions
what is sveltia cms
Sveltia CMS is a Git-based headless CMS for Jamstack sites, described as a complete modern rewrite of Netlify CMS, now known as Decap CMS. It is a single page web application served from a CDN, it is framework-agnostic and works with Astro, Eleventy, Hugo or plain JavaScript, and it is MIT licensed and open source.
sveltia cms vs decap
Sveltia CMS is presented as the de facto successor to Decap CMS and states that it continues to deal with issues reported in the Decap repository, counting 355 as solved and 805 including duplicates. Its published list of examples names 170 sites migrated from Decap CMS, against 95 migrated from WordPress. It also claims higher performance, security, reliability and experience, without publishing the measurements behind those four claims.
Is Sveltia CMS free to use?
The project describes itself as open source and free, and package.json declares the licence as MIT with the text in LICENSE.txt at the repository root. A separate announcement records that the project now also accepts donations through a GitHub sponsors page. No paid tier is mentioned anywhere in this repository.
Does Sveltia CMS need a server or a database?
The deliverable is a single page application served from a CDN, and the repository root holds index.html with a Vite build and no server component. The documentation list covers Introduction, Getting Started, Migration Guides, Working with AI and Roadmap, with no page about authentication or a backend, so the Git provider login is configuration you supply.
How does the Sveltia CMS repository check its own code?
One script runs every check:* script together with a no-bail flag, covering pnpm audit, cspell, eslint, a custom unused-imports script, a custom locale script, oxlint, prettier, stylelint and svelte-check. Tests run under vitest with Web Storage disabled, components are covered in a browser project with a branch threshold of 98.4, and end-to-end tests run under Playwright.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/sveltia-sveltia-cms)Star history chart for your README
[](https://hysenlabs.com/projects/sveltia-sveltia-cms)Was this useful?