TypeScript
Shipping types from schema
by Maya Chen
Define once. Edit in the CMS. Query with types.
Headless CMS for TypeScript
Define your collections and globals in TypeScript. Stackpress turns your schema into a powerful CMS and gives your application fully typed access to the same content.
See how it workscollections.ts
schema → cmsGenerated fields
Stackpress infers a typed client from the same collection you edit.
cover-hero.jpg
image/jpeg · 248 KB
Hover or tap a field to trace it
How it works
One model. Four surfaces. Nothing to keep in sync.
Define
From schema
The CMS is not configured separately. Field types, relations, and media come from the same defineCollection call your app already compiles.
collections.ts
cms / collections / posts
Document
Stackpress infers a typed client from the same collection you edit.
cover-hero.jpg
image/jpeg · 248 KB
Types
The client you call from loaders is inferred from the same collection definition. Populate expands uploads and relations without losing TypeScript.
routes/posts.$slug.tsx
Post
inferredMedia
Upload files, store metadata on a media collection, and serve them through your storage adapter — S3-compatible, or anything that implements the adapter.
cms / media
Relations
Relations are fields in the schema, not a separate graph product. Populate them in a query and TypeScript follows.
Developer experience
Collections, globals, and loaders live in the repo. Types come from the schema — not a dashboard export.
Architecture
Stackpress sits between TypeScript routes and your database. Media goes through the same adapters you already configure.
The stackpress client knows your schema. Populate expands uploads to URLs and relations to documents — without losing TypeScript.
Upload to S3 (or your adapter), store metadata in the media collection, and serve files through a proxied /cms/file route.
Define your model in TypeScript. Give your team a powerful editing experience. Ship typed content wherever you need it.
Open the CMS