Headless CMS · Rust · GraphQL
Every entry is a tile. Your apps are the mosaic.
Tess is a self-hostable headless CMS in a single Rust binary. Define your content models at runtime and get a typed GraphQL API instantly, on the database you already run.
query {
posts(where: { title_contains: "tess" }, first: 3) {
total
items {
title
publishedAt
authors { name }
}
}
}Everything a content team needs, nothing to rebuild
Tess keeps the business rules in one place, so the GraphQL API, the admin UI, uploads and plugins all behave the same.
Models at runtime
Create content types in the admin or through the API, in production. The GraphQL schema is regenerated on the fly: no rebuild, no redeploy.
GraphQL-first
Typed queries, filters, sorting, pagination, relations and mutations generated for every model, with a GraphiQL IDE built in.
Your database
PostgreSQL, MySQL, SQLite, MongoDB, DynamoDB or embedded RocksDB. Every backend passes the same conformance suite.
Review workflows
Draft and publish for every entry, plus an optional submit → approve workflow per content type, in every edition.
Roles and scoped tokens
Owner, Admin, Contributor, Reviewer and Member roles, limited to some content types if needed, and scoped API tokens for machines.
Sandboxed plugins
WebAssembly plugins installed by admins at runtime, written in Rust, Go, JavaScript and more, with timeouts and memory limits.
A content model is one mutation away
Create a content type and Tess generates its queries, filters, sorting, pagination and mutations on the spot, on every instance.
Prefer clicking? The admin UI has a model editor. Prefer files? Keep your models in YAML and import them with tess-transfer.
mutation {
createContentType(input: {
apiId: "Post"
workflow: true
fields: [
{ name: "title", type: TEXT, required: true }
{ name: "body", type: MARKDOWN }
{ name: "cover", type: RELATION, relationTarget: "Asset" }
{ name: "authors", type: RELATION, relationTarget: "Author", many: true }
]
}) { apiId }
}How does Tess compare?
Honest, dated comparisons with the CMSs you probably know, including when they are the better choice.
Tess vs Strapi
Open-source headless CMS (Node.js)
Tess vs Hygraph
GraphQL-native headless CMS (SaaS)
Tess vs WordPress
Traditional CMS (PHP), usable headless
Tess vs Contentful
Composable content platform (SaaS)
Tess vs Directus
Data platform over SQL databases (Node.js)
Tess vs Payload
Code-first headless CMS (TypeScript, Next.js)
Tess vs Sanity
Hosted content platform with an open-source studio
Questions
Is Tess free?
The Community edition is free for personal use. Commercial use needs the Enterprise edition, which also adds advanced features, official plugins and hosting. See Community & Enterprise.
Which database do I need?
None to start: Tess embeds RocksDB. In production use PostgreSQL, MySQL, MongoDB or DynamoDB, or keep SQLite or RocksDB for small sites.
Is there a REST API?
Content is served over GraphQL only. REST endpoints exist for binary payloads: media uploads and downloads, plugin modules.
Can I move my models from another CMS?
Describe them in the tess-transfer YAML format and import them in one command. Each comparison page explains how a model maps to Tess.
Run Tess in one command
docker compose up, open the admin, create your first model.