Features
One binary, the whole content platform
Tess bundles the API, the admin UI and the business rules. Pick your database, your media store and your hosting.
All features
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.
Serverless or container
One binary runs as an HTTP server (Docker, VM, Kubernetes) or as an AWS Lambda function.
Media library
Uploads to S3-compatible stores (Garage, MinIO, AWS S3, Cloudflare R2) or the local filesystem, with direct presigned uploads.
Full-text search
Typesense indexing kept in sync with your content, behind a pluggable search engine interface.
Private by design
Opaque, expiring, encrypted ids in the API: database ids never leave the server.
AI agents welcome
A built-in MCP endpoint lets AI agents read the schema and query or edit content, with the same permissions as the API.
Portable models
tess-transfer exports content models and users to YAML or JSON, to version them or copy them between instances.
Field types
TEXT (length bounds, regex format), MARKDOWN (raw HTML refused), INT, FLOAT, BOOLEAN, DATETIME, DATE, UUID, PASSWORD (hashed, write-only), JSON, ENUM, RELATION (single or many), COMPONENT (reusable field groups, single or repeatable) and DYNAMIC_ZONE (a list mixing components). This website's pages are built with dynamic zones.