Author it once.
Read it from anywhere.
An AI-native headless CMS. Define content types, publish entries, and read them over a typed Delivery API. No auth UI, no writes — just fetch and render.
●8 content types · 22 published entries · rendering now
Author in the dashboard. Read from anywhere.
- 01
Define
Model content types in the dashboard — text, media, richtext, references. No schema migrations, no server restarts.
- 02
Publish
Author entries and hit publish. Drafts stay hidden; the Delivery API only ever returns published content.
- 03
Read
Fetch over a typed read API. A wrk_live_ key is project-scoped and public-safe — ship it straight in the bundle.
Not a mock. Fetched when this page rendered.
- product · saasWriven CMSThe AI-native headless CMS
A read surface for published content.
Content model
Typed fields — text, number, boolean, date, select, media, richtext, reference. Compose flat, render-friendly types.
Delivery API
Published-only, paginated, with select, filter, sort and reference expansion. One endpoint per content type.
Media, resolved
Media fields arrive as { url, alt, width, height }. Render the CDN url directly — no extra lookup, no asset ids.
Rich text
Bodies are ProseMirror JSON. Inline images hydrate with src and dimensions. Render with one component.
References
Point one entry at another. Expand them inline with include=1..3 and skip the request waterfall.
Read keys
A wrk_live_ key reads published content for one project. Public-safe, revocable, never writes.
Fetch and render. That is the whole integration.
The official typed client — zero dependencies, retries on 5xx, and pass-through caching for Next.js ISR. That is this site's entire data layer, exactly as shipped.
import { createClient } from '@wriven-ai/client';const wriven = createClient({ projectId, token: process.env.WRIVEN_TOKEN,});const { items } = await wriven.getEntries( 'blog_post', { sort: '-publishedAt', limit: 10, include: 1 },)Edit in the dashboard. Refresh here. Done.
The Delivery API stamps every response with cache tags; this site fetches under the same tags and the webhook purges them on publish. One key space, three systems, zero staleness.
- 01
Publish in the dashboard
An editor hits publish on an entry. Wriven records the revision and purges its CDN cache tags — proj_…, type_…, entry_….
- 02
Webhook, signed
Wriven POSTs an HMAC-signed webhook to this site. The route (via @wriven-ai/next) verifies signature and timestamp — no CDN in front can forge it.
- 03
revalidateTag
The route purges the same type_… tags this site fetched under. Affected pages regenerate on the next request — no rebuild, no redeploy.
Define a content type. Publish an entry. Read it here.
Wriven is an AI-native headless CMS — author in the dashboard, read over a typed Delivery API. Every page beyond this one is rendered from live published content.