Content API, typed end to end.

Gem0 is a headless CMS. Define your content schema once, and it generates the API and a fully typed tRPC client, so you never write API types by hand.

Many production projects run on Gem0 today, including the ArmaTerra, Helion Research, and KangaCoders sites.

The Gem0 dashboard for a sample agency workspace, with its projects and content collections

Every headless CMS hands you a JSON API and leaves the types to you.

Contentful and Hygraph start at $199–300 a month and gate locales behind upgrades. Strapi and Payload cost less, but self-hosting them means you run a backend for every client site. Supabase types your database tables, not your content model.

If you're an agency with ten client sites, you maintain ten sets of hand-written content types, and they drift out of sync the moment an editor renames a field. Gem0 removes that work: it generates the types from the schema, so they can't drift.

How it works

  1. Define your schema

    Build collections from six field primitives, add modifiers like translatable and arrayOf, and set validations per field.

  2. Run GemSync

    It pulls a generated gemRouter.ts from your project's API. The types come with it, and you don't write any of it by hand.

  3. Import the client

    Use createGemClient for plain TypeScript, React Query hooks from sdk-react, or the Next.js wrapper from sdk-next. Every query and mutation is typed against your actual schema.

  4. Change the schema and rerun GemSync

    The compiler tells you exactly which components broke. That's the whole upgrade path.

your-app
$ bunx gemsync
✓ gemRouter.ts written (4 collections, fully typed)

const gem = createGemClient<GemRouter>({ url, key })
const posts = await gem.tables.posts.all({ limit: 10 })
//    ^? posts: Post[]  ::  typed from your schema

Why Gem0

Typed end to end
Sanity and Contentful return untyped JSON or need codegen add-ons. In Gem0 the types are the product: your schema, validation, client, and hooks all share one generated contract.
Built for agencies
One company account holds sub-companies and projects, so your portfolio of client sites lives on one invoice. You get per-project API keys with expiry and revocation, and an audit trail on every change.
EU data posture
Gem0 is EU-hosted and operated by KangaCoders BV in Belgium. Agency and Enterprise plans include a DPA, and Enterprise can run on a dedicated instance.

Pricing

Every plan includes the typed SDK and codegen, Free included.

Plan Price Includes
Free Everything you need to build. Pay when you ship. €0
  • 1 project
  • 5,000 documents per project
  • 100k API requests a month
  • 500 MB of assets
  • 2 seats and 2 locales
Solo For one person with real projects. €29 a month
  • 3 projects (€10 for each extra)
  • 50,000 documents per project
  • 1M API requests a month
  • 10 GB of assets
  • 5 seats and 5 locales
  • Weekly backups
Enterprise A dedicated instance with an SLA behind it. From €299 a month
  • Custom limits
  • Dedicated instance
  • SSO, DPA, and SLA
  • Restore-time commitments
  • Annual billing

Where it stands

Many real customer projects run on Gem0 in production today, and we're actively developing the platform.

Now in Gem0 Studio
A client-facing workspace where an AI agent designs your schema, writes the pages that render it, and gets you to a live Astro preview. Git versions every change, and nothing applies until you approve it.
Gem0 MCP server
Coding agents like Claude Code connect to your CMS through MCP. They can create tables and read and edit rows in your projects directly.
On the roadmap, not shipping yet
AI on the content itself: auto-translation for the fields you mark translatable, and semantic search.

Talk to us

You can create an account in the dashboard, but for now we'd rather talk first.