Skip to content

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.

graphql
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.

graphql
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 }
}

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.