Features

Everything stet does

The launch set, grouped by what it does for you — every entry ships free, and works across every site you run.

Adopt

Get stet into an existing site

Auto Install

Installs into your existing codebase

One command detects your framework and store, writes the registry and fallback, and leaves the first key rendering.

✓Two questions asked; the store is detected, never asked.

Copy scan

Finds the copy your site already has

Finds the copy already in your components and adopts it — the rewrite touches only the leaf, printed as a diff first.

✓--write is opt-in; callers never change.

Stores

Start without a database, add one later

Snapshot-only with no database, or plain Postgres in your own instance.

✓Four adapters pass one conformance suite.

Framework support

Works with Next.js, React, Astro and more

First-class Next.js, React and Astro; every other host reads the same committed bundle; a Python reader ships.

✓The read bundle is a plain key→value map.

Migration

Bring your content over from another CMS

One mapping file over your JSON or CSV export.

✓Per-CMS recipes, no connectors to break.

Edit

Everyday editing and publishing

Typed keys

Your editor autocompletes every copy key

Every string is a typed key — a wrong key is a compile error, not a blank space in production.

✓Keys generate into your types.

Instant publish

Fix a typo in seconds, no build needed

Publishing is a database transaction, not a build — the next request serves the new words.

✓One transaction; values immutable.

Snapshot fallback

Every string has a backup committed in your repo

Every key has a committed fallback, so a missing value or unreachable database never breaks a page.

✓A read failure is an absence, never a page failure.

Versioning

Undo any change in one click

Every publish is kept; revert restores any prior wording without losing anything.

✓Revert mints a new row; drafts untouched.

Content rules

Guardrails on every field, checked at save

Character limits, a variable whitelist, advisory fit budgets — checked before anything is stored.

✓Offline checks; hard limits reject, advisory warn.

Environments

Test copy in staging before it hits production

Each environment is a named store connection — never a copy of your data.

✓--env on every store command.

Promotion

Preview exactly what will change before promoting

Staging to production with a dry run and conflict detection.

✓Writes drafts by default.

Scheduling

Set a date and time for any publish

Set the moment; the copy goes live without anyone awake.

✓publish_at on the row; your cron or Cloud's clock.

Review

Changes wait for approval before going live

Every draft waits with its author recorded; approval is the publish.

✓Cloud adds roles and who-approves-what.

Workspace

Run all your sites and apps from one place

Every site and app you run, listed and edited in one workspace.

✓Each product is a project; the workspace file lists them and the dashboard and Cloud are its consoles.

Editor

Editing without touching code or layout

A plain-labels editing UI that mounts as components into your own app's chrome — your auth, your theme tokens, no separate admin site.

✓Editors touch words, never structure.

Email

The words in your emails

Email slots

Editors change email text without breaking the design

Email copy as named slots on your own template.

✓Extraction gated by rendered-output equality.

Compliance gates

Apply marketing rules so that your mail is always sent correctly

Marketing mail is blocked until the unsubscribe is in scope; a missing postal line warns.

✓Checked against the render path actually used.

Contacts

Keep track of the contacts who are interested

Join and unsubscribe routes, consent provenance, a suppression list — in your own Postgres.

✓The list never enters git.

Broadcasts

Send group emails to your customer list

Linted before it goes, with per-recipient send records.

✓A re-run tops up; it never double-sends.

SEO

The fields search engines read

SEO

Edit titles and descriptions like any other copy

The fields that decide how you appear are ordinary keys — versioned, publishable. Catches SEO mistakes before they go live: eight offline rules — missing descriptions, duplicate titles, over-length, canonical→noindex, markup-vs-content, alt text.

✓Reads two files, no network — runs on a fork PR.

Structured data

Structured data that stays in sync with your pages

Markup bound to the keys that render on the page.

✓A binding to an unrendered key is an error.

Agents

Working with AI agents

MCP

Connect Claude or any agent over MCP

An MCP server with stet_* tools — assistants read and propose copy without screen-scraping your admin.

✓Same operations as the CLI; scoped tokens.

Agent guardrails

Scope your agent behind an approval wall, or allow it to yolo

Everything an agent writes is a draft with its author recorded; brand keys are locked entirely.

✓Draft-only default; agentPublish: false per key.

Leave

You can always leave

Committed snapshot

A full copy of your content lives in your repo

A complete, buildable copy of every string, at every moment.

✓Checked complete against the registry as a set.

Eject

One command removes stet and keeps your content

Writes everything back, exports history, removes the mount.

✓Part of the pitch, not a support article.

Open source

Free to self-host, with everything included

Self-hosted is the whole mechanism, not a trial — Cloud sells hosting, identity and review.

✓The site renders with stet off.