Intracia and the other Git-based CMSs
Every tool here keeps your content in your own repository. Where they differ is how much work they ask of your site, what writers get to see before they publish, and what it costs as your team grows.
Compare Intracia with
Up to three at a time; on a phone, the last one you picked.
Features
| Features | Intracia | CloudCannon | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Editing | |||||||||
| Visual editor for Markdown | Yes | Yes | Yes | Yes: Rich-text widget | Yes: Rich-text widget | Yes: Notion-style, with MDC components | Yes | Yes: Markdoc and MDX | Yes |
| Raw source view | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
| Media library | Yes: Search, tags and alt text, inserted in place | Yes: Browse and upload assets | Yes: Media manager | Yes | Yes | Yes | Yes: Asset library | Partly: Image fields; Cloud Images on Pro | Yes |
| Friendly asset names | Yes: A display name that keeps the URL | No | No | No | Not documented | No | No | Not documented | No |
| Video poster frames | Yes: Captured from any frame | Not documented | No | No | No | Partly: A poster URL per embed | No | No | No |
| Alt text stored with the asset | Yes: Set once, filled in on every use | No | No | No | No | No | No | Partly: Cloud Images default alt | No |
| Preview drafts on the real site | Partly: Nuxt Content sites | Yes: Inline visual editing | Partly: React sites, with code changes | No: A preview template inside the CMS | No: A preview template inside the CMS | Partly: Nuxt Content sites on SSR hosting | No: An approximate preview pane | Partly: Next.js draft mode, with code | No |
| Preview drafts on a preview site | Partly: On Cloudflare in PR mode | Yes: Edits happen on a branch site | Partly: Preview links for editorial branches | Partly: Deploy-preview links in the editorial workflow | Partly: Deploy-preview links in the editorial workflow | No: No pull requests to preview | Partly: Deploy previews via CI | Not documented | No |
| Version history | Yes: Saves and Git revisions, compared and restored | Partly: Lists saved changes; no restore | No: Optional link to Git host history | No | No: Logs who saved, not versions | No: Revert unpublished drafts only | Partly: Commit list linking to the Git host | No | Partly: Last 3 commits, linking to GitHub |
| Restore an earlier version | Yes: Any save or Git revision, as a draft | No | No | No | No | No | No | No | No |
| Autosave | Yes: Drafts saved as you type | Yes: Unsaved edits kept | No | Partly: In this browser only | Partly: In this browser only | Partly: In this browser only | Partly: In this browser only | Partly: In this browser only | No |
| Content model | |||||||||
| Creation | Yes: Detected from existing content | Partly: Inferred from key names, then configured | No: Written by hand in tina/config.ts | No: Written by hand in config.yml | No: Written by hand in config.yml | No: Written by hand as a Zod schema | No: Written by hand in config.yml | No: Written by hand in TypeScript | No: Written by hand in .pages.yml |
| Underlying model | JSON Schema | CloudCannon config file | TypeScript config, generating a GraphQL schema | YAML config file | YAML config file | Nuxt Content collections (Zod) | YAML config file (Decap-compatible) | TypeScript config file | YAML config file (.pages.yml) |
| YAML, TOML and JSON | Yes | Yes | Yes | Yes | Yes | Partly: YAML and JSON; no TOML | Yes | Partly: YAML and JSON; no TOML | Yes |
| No code added to your site | Yes: Optional plugin for draft previews | Partly: Inline editing needs editable regions | No: npm packages and a config | Partly: An admin page and config in the repo | Partly: An admin page and config in the repo | No: A Nuxt module, auth config and SSR hosting | Partly: An admin page and config in the repo | No: Packages, config and API routes | Partly: A .pages.yml config file |
| Review & publishing | |||||||||
| See the changes before publishing | Yes: Word-level, against any save | Yes: Per-file diff | No | No | No | Yes: Per-file diff on review | No | No: Changed badges, no diff | No |
| Full Git history | Yes: In one timeline with your drafts | Partly: A Commits tab for the site | No | No | No | No | Yes: Commit list, linking to the Git host | No | Partly: The last 3 commits, then GitHub |
| Commit directly | Yes | Yes | Yes | Yes: Simple mode | Yes: Simple mode | Yes | Yes | Yes: To any branch | Yes |
| Open a pull request | Yes: Or an auto-merged PR | Partly: Team plan and up | Partly: Team Plus and up | Yes: Editorial workflow | Yes: Editorial workflow | No: On the roadmap | Yes: Editorial workflow | Partly: Opened on GitHub from a branch | No |
| Many pages in one publish | Yes: Named batches | Yes | Partly: Edits on one editorial branch | No: A commit or PR per entry | No: A commit or PR per entry | Yes: All drafts in one commit | No: A commit per entry | Partly: Several commits on one branch | No: One file at a time |
| Media storage | |||||||||
| Amazon S3 | Yes | Yes | Partly: Via a media handler you host | No | Partly: Pro, in beta | Yes: Via NuxtHub Blob | Yes | No | No |
| Cloudflare R2 | Yes | Yes | Partly: Custom S3 endpoint, undocumented | No | Partly: Pro, in beta | Yes: Via NuxtHub Blob | Yes | No | No |
| Azure Blob Storage | Yes | Yes | Partly: Undocumented package | No | No | No | Yes | No | No |
| Google Cloud Storage | No | Yes | No | No | No | No | No | No | No |
| DigitalOcean Spaces | Yes | Yes | Partly: Via a media handler you host | No | Partly: Pro, in beta | Yes: S3-compatible | Yes | No | No |
| Other storage | Yes: MinIO, B2, Wasabi and S3-compatible | No | Partly: Via a custom S3 endpoint | No | Partly: Pro: Bunny and other S3-compatible | Yes: S3-compatible | Yes: B2, Bunny, Scaleway, Supabase | No | No |
| Cloudinary | No | Yes | Partly: Via a media handler you host | Yes | Yes | No | Yes | No | No |
| Tenovos | No | Partly: Enterprise only | No | No | No | No | No | No | No |
| Import an existing bucket | Yes: Use existing files | Yes: Browse existing files | Partly: Lists existing files, via your handler | Partly: Cloudinary only | Partly: Cloudinary; bucket browsing undocumented | Partly: Only files under its own prefix | Yes: Browse and search the bucket | No | No |
| Stays in sync with the bucket | Yes: Full or delta sync | Yes: Browses the bucket | Yes: Lists the bucket live | Partly: Cloudinary widget only | Yes: Browses the bucket | Yes: Lists its prefix live | Yes: Lists the bucket live | No | No |
| Git & hosting | |||||||||
| GitHub | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| GitLab | No: Planned | Yes | Partly: Self-hosted, with custom code | Yes | Yes | Yes | Yes | No | No |
| Bitbucket | No: Planned | Yes | Partly: Self-hosted, with custom code | Yes | No | No | No | No | No |
| Other Git hosts | No | No | Partly: Self-hosted, with custom code | Yes: Gitea, Azure DevOps | No | No | Yes: Gitea, Forgejo | No | No |
| Hosted for you | Yes | Yes | Yes: TinaCloud, or self-host | No: Self-hosted | Yes | No: Self-host only | No: Self-host only | Partly: Cloud sign-in and images; the editor runs in your app | Yes: Free hosted app, or self-host |
| Open source | No | No | Yes: Apache-2.0 | Yes: MIT | Partly: Open-source editor, proprietary service | Yes: MIT | Yes: MIT | Yes: MIT | Yes: MIT |
| Usability | |||||||||
| Edit on mobile devices | Yes: Optimized | Not documented | Not documented | No: Not responsive | No: Not responsive | Not documented | Yes: Mobile and tablet | Not documented | Yes: Optimized |
| Full-text search | Yes | Not documented | Partly: TinaCloud; first 100 characters of text | Partly: Titles and summary fields, not the body | Partly: Titles and summary fields, not the body | No: Media search only | Yes: All fields, including the body | No: Entry names only | Partly: Listed fields, not the body |
| Team | |||||||||
| Single sign-on | Yes | Partly: Enterprise | Partly: Enterprise | No | Not documented | Yes: Self-hosted SSO server | No | No | No |
| AI assistance | Yes: Built-in: alt text and schema help, optional | Partly: Setup skills for coding agents | No: Listed as coming soon | No | No | Yes: Completion and rewriting, via Vercel | Partly: AI translation only | No | No |
| Organizations | Yes: Members, roles and credentials across sites | Yes: Members, permissions and billing | Yes: Across projects, on TinaCloud | No | Yes | No | No | Yes: Keystatic Cloud teams | No: Per-repository collaborators |
| Agency and client sites | Partly: Client organizations and site handover | Yes: Partner programme, client orgs, custom branding | Partly: Agency directory only | No | Partly: Move sites between orgs | No | No | No | No |
Pricing
List prices in each vendor's own currency. They charge per different things — an organisation, a project, a site or a seat — so the unit is beside every figure.
| Pricing | Intracia | CloudCannon | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Plans | |||||||||
| Free | Yes: Free during early access | No: 21-day trial | Yes: 2 users per project | Yes: Free and open source, self-hosted | Yes: Free plan: 1 site, 1 seat | Yes: Free and open source | Yes: Free, self-hosted | Yes: Self-hosted, or Cloud for 3 users per team | Yes: Free, hosted or self-hosted |
| Paid plans from | Not yet priced | $49/mo billed yearly ($55 monthly), 3 users, unlimited sites | $24/mo per project, 3 users | No paid plans | Pro €19/mo: 1 site, 5 seats | No paid plans | No paid plans | Pro $10/mo per team | No paid plans |
| For a larger team | Not yet priced | Team: $300/mo billed yearly, 15 users | Team Plus $41/mo, 5 users; Business $249/mo, 20 users | No paid plans | +€10/mo per extra site, +€6/mo per extra seat | No paid plans | No paid plans | +$5/mo per user beyond 3 | No paid plans |
| Charged per | Site | Organisation | Project | Nothing | Site and seat | Nothing (AI usage billed by Vercel) | Nothing | Team, plus users beyond 3 | Nothing |
Checked on 27 September 2026 against each vendor's own pricing pages, documentation and repositories. Where a vendor's documentation doesn't say, the grid says "Not documented" rather than guessing. Prices and features change, so check the vendor before deciding — and tell us if something here has moved on.
Join the waitlist
We're in early access and taking on one site at a time, so we can get each one right. Tell us what your site is built with and what's slowing your team down.
Not ready to ask yet? Meet the people building it.