Sanity Studio is the best editing experience in this category. Real-time
collaboration, live preview with visual editing, a customisation model that
actually holds up. If the editorial experience is your deciding criterion, stop
reading — pick Sanity.
This comparison is about the two lines on the invoice that surprise teams:
seats and datasets.
A dataset is, in practice, a project's content. Two are included. The third
costs $999 a month.
If you run one product, that ceiling is far away and this section is noise. If
you run an agency, a portfolio, or a SaaS where every customer needs isolated
content, the third client is a four-figure annual decision — and the fourth is
another one.
corpusctl does not have a per-project line, because a project is not a billing
unit:
One panel, unlimited spaces.
A user carries a separate role per space — editor on one, owner on
another, invisible on a third.
Isolation is enforced by PostgreSQL row-level security, in the database,
under the application layer where the forgotten WHERE clause lives.
Multi-tenancy is in the core, next to auth and the module registry. It is not a
tier you upgrade into.
At $15 per seat, adding a proofreader costs money. Adding a translator costs
money. Adding the client who wants to review their own copy before it goes live
costs money — every month, whether they log in or not.
The effect is predictable and quiet: teams share logins, or they route review
through email, or they simply do not add the person who should have been in the
system. The pricing model has changed the workflow, and not in the direction
anyone chose.
corpusctl is flat-rate. The people who should be in the system are in the
system.
There is a second-order effect worth naming. On Growth, higher usage is
pay-as-you-go, and the increased-quota add-on is described in units of
documents, API CDN requests, API requests, bandwidth and assets. Those are all
numbers that move when your content gets read — which means they are numbers
strangers control.
corpusctl has no read meter at all. Publishing writes the rendered content to
an immutable, hash-addressed file in object storage and refreshes a manifest.
The client resolves the slug to a manifest shard locally, then fetches that
immutable address from the nginx edge cache — cacheable for thirty days,
because the same address can never return different content. Two requests,
both from cache, neither touching the API or PostgreSQL.
Sanity's Content Lake is a hosted, real-time content database. It is genuinely
good technology and it is genuinely somebody else's server.
corpusctl runs every component on infrastructure you can point at:
PostgreSQL, Valkey, Typesense, Garage, nginx. A fully self-hosted install is
available on the Enterprise plan. There is no third-party service in the stack
that bills per usage — that is a product constraint written into the
architecture, not a pricing decision we might revisit.
Whether that matters depends on your regulator, your customers, and your
appetite for a dependency you cannot inspect. For a lot of teams it does not
matter at all, and they should take the hosted product.
Sanity ships Portable Text and a set of renderers. They are good, and you still
end up mapping them to your design system.
corpusctl's block renderers ship with zero default styling — not one line
of CSS. Every block type is overridable, and an unknown block type is skipped
gracefully rather than throwing. The core render tree is framework-agnostic;
React, Vue and Next.js adapters sit on top as thin layers.
The rule behind this: if rendering a block type requires framework-specific
code, the abstraction is in the wrong place. The hardest part of adopting a
headless CMS is turning the API response into styled markup, and a package that
imposes a design has not solved that problem — it has renamed it.
The Studio. Real-time collaborative editing, live preview and visual
editing, and a customisation model that has been refined for years. corpusctl's
panel is competent and does not match this.
GROQ. A genuinely expressive query language. corpusctl offers REST filters
and a GraphQL module whose schema is derived from your content types — useful,
but not the same instrument.
Ecosystem reach. Sanity's client library sees millions of npm downloads a
month; the templates, plugins and framework integrations are extensive.
AI tooling. Content Agent, Agent Actions, an MCP server. If your roadmap
includes agentic content workflows this year, Sanity has shipped and we have
not.