Introduction
Stet is the CMS where marketing owns the content model and engineering gets a typed client generated from it. Start reading here.
Stet is the CMS that refuses the marketing-vs-engineering trade-off: marketing owns the content model, engineering gets a typed client generated from it, and changes cross the gap as information, never as breakage.
Stet is being built in the open and these docs grow with it.
Start here
Quickstart
Install the plugin, generate a typed client, and read your first entry.
Content model
The field types a model can carry, and what each one gives your code.
Analytics
Cookieless, type-safe product analytics routed through your own backend.
MCP server
Point Claude, Cursor or any MCP client at your content model.
Framework guides
Concise setups for Next.js, TanStack Start, Astro and SvelteKit.
Reference
Every export of every published package, and the CLI.
The shape of it
Your content team builds the model in the Stet UI. A Vite plugin reads that model and writes a typed client into your project, so the collections and maps they shape become calls your editor autocompletes:
import { stet } from './stet.gen';
const posts = await stet.posts.list(); // a collection
const post = await stet.posts.get('hello-world'); // one entry
const landing = await stet.landing.get(); // a map
Nothing about that client is hand-written, and nothing about it breaks when the
model changes. A field an editor deletes reads as null in your code, not as a
failed build.
Packages
@stetcms/client
The typed content client, and the REST client for the rest of the API.
@stetcms/vite
The plugin that generates the content client and publishes your tracking plan.
@stetcms/analytics
The tracking plan, the browser client, and the route handler.
@stetcms/config
stet.config.ts, shared by the plugin and the CLI.
@stetcms/cli
stet login, generate, sync, org, and whoami.
Built by jxd.dev
Stet is built by jxd.dev.