Your stack. Your workflow. Your content.

Model content in SCHMA, generate TypeScript types, and deliver structured content through REST, GraphQL, and the tools you already use.

SCHMA CLIschma generate
Usage: schma generate [options]
Pull schemas and generate TypeScript types
Options:
-t, --tenant <tenantSlug>The tenant slug to generate types for (or reads
from SCHMA_TENANT_SLUG env var / local config)
-o, --out <path>Output file path (default: "schma-types.d.ts")
-h, --helpdisplay help for command
SCHMA APIREST & GraphQL
GET https://api.schma.dev/v1/delivery/entries?type=blogPost&limit=10&offset=0
Authorization: Bearer <YOUR_API_KEY>
Expected response shape (illustrative, not a live response):
{
  "entries": [
    {
      "id": "<entry-id>",
      "dataJson": {
        "title": "<published title>"
      },
      "publishedAt": "<timestamp>"
    }
  ],
  "meta": {
    "limit": 10,
    "offset": 0,
    "count": 1
  }
}
SCHMA SDK@schmadev/client
import { createClient } from "@schmadev/client";
const schma = createClient({
  tenantSlug: process.env.SCHMA_TENANT_SLUG!,
  baseUrl: process.env.SCHMA_API_URL || "https://api.schma.dev",
});
const { data: posts } = await schma.entries.list({
  typeSlug: "blog-post",
  status: "published",
  limit: 10,
});
for (const post of posts) {
  console.log(post);
}
SCHMA Studio· Visual schema & content modeling
Core Content Hub
SCHMA Studio visual content modeling workspace showing content types, fields, and draft entries

Your Content
Stays in Your Database

SCHMA gives you the tools to model and manage structured content while your content remains in your own PostgreSQL database. Your applications retrieve published content through SCHMA's delivery APIs.

SCHMA Studio

Schema & content management

Management
model: "article"Draft / Publish
titlestring (required)
slugstring (unique)
bodyrichText
authorref → Author

Structured content management

Model schemas and manage content through SCHMA Studio.

Your PostgreSQL database

Your content. Your database.

Customer-Owned
database: "production"PostgreSQL 15+ (pgvector)
public.schma_entriespublished & drafts
public.schma_content_typesschemas & models
public.schma_fieldsfield definitions
public.schma_revisionsversion history
Supabase, Neon, AWS RDS & Self-Hosted100% Data Ownership

Your database

Your content is stored in your own PostgreSQL database.

Your applications

REST & GraphQL delivery APIs

REST & GraphQL
// Read published content via Edge CDN
GET /v1/delivery/entries?type=article
Authorization: Bearer <API_KEY>
✔ Sub-50ms Edge Cache (s-maxage=60)

Flexible delivery

Retrieve published content through REST and GraphQL APIs.

Your content model. Your codebase.

Build with the tools you already use.

Define content structures in SCHMA, generate TypeScript types, and access published content through the delivery tools that fit your workflow.

  • Type-safe development
  • CLI-powered type generation
  • REST and GraphQL delivery
schema.schma.dev
SCHMA Content Model interface showing structured fields and schema definitions
@schmadev/client
import { createClient } from "@schmadev/client";
const schma = createClient({
  tenantSlug: process.env.SCHMA_TENANT_SLUG!,
  baseUrl: process.env.SCHMA_API_URL || "https://api.schma.dev",
});
const { data: posts } = await schma.entries.list({
  typeSlug: "blog-post", status: "published", limit: 10,
});
for (const post of posts) { console.log(post); }
REST & GraphQL
GET /v1/delivery/entries?type=blogPost&limit=10
Authorization: Bearer <API_KEY>
{
  "entries": [{
    "id": "<entry-id>",
    "dataJson": { "title": "<published title>" },
    "publishedAt": "<timestamp>"
  }],
  "meta": { "limit": 10, "offset": 0, "count": 1 }
}
schma generate
Usage: schma generate [options]
Pull schemas and generate TypeScript types
-t, --tenant <tenantSlug>

Tenant slug to generate types for (or reads from SCHMA_TENANT_SLUG env var)

-o, --out <path>

Output file path (default: "schma-types.d.ts")

-h, --help

Display help for command

Your AI assistant. Your SCHMA context.

Connect your AI coding assistant to SCHMA through MCP. Explore schemas, inspect content, and generate schema proposals without leaving your development workflow.

Illustrative SCHMA AI-assisted development workflow showing an IDE code editor, an MCP-connected assistant querying schema tools, and an interactive schema proposal inspector

Schema context on demand

Give compatible AI assistants access to SCHMA content models, schema definitions, and entries through MCP tools.

Schema changes, proposed with context

Generate schema proposals and inspect the proposed changes and warnings before deciding whether to apply them.

Built around your development workflow

Connect through SCHMA's documented MCP server rather than relying on a proprietary SCHMA IDE extension.

Keep your production content in sync.

When content changes in SCHMA, webhooks notify your application so your own revalidation logic can refresh the content your users see.

Stage 01/Publish
entry.published

A supported publishing action occurs in Studio or via the Management API.

SCHMA StudioTarget: article
title:A slower kind of Sunday
slug:a-slower-sunday
status:published
Stage 02/Notify
HMAC-SHA256

SCHMA dispatches an HTTP POST payload with signatures and idempotency headers.

POST /api/revalidatex-schma-signature
{
"event": "entry.published",
"data": {
"contentTypeSlug": "article",
"slug": "a-slower-sunday"
}
}
Stage 03/Revalidate
Application Handler

Your receiving application handler verifies the signature and invokes its own cache revalidation logic.

app/api/revalidate/route.ts200 OK · Revalidation accepted
// Illustrative receiver (e.g. Next.js App Router)
const rawBody = await req.text();
const sig = req.headers.get("x-schma-signature");
// Verify HMAC-SHA256 signature with secret
if (!verifySignature(rawBody, sig, secret)) {
return new Response("Invalid", { status: 401 });
}
// App revalidates its own cached tag
const payload = JSON.parse(rawBody);
revalidateTag(payload.data.contentTypeSlug);
return Response.json({ revalidated: true });

Signed webhook delivery

Every delivery includes an HMAC-SHA256 signature header (x-schma-signature) and an idempotency key so your endpoint can verify authenticity and safely deduplicate requests.

Automatic retries with backoff

If your endpoint returns an error or times out, SCHMA retries delivery automatically using progressive backoff and random jitter so your receiver is not overwhelmed.

Application-controlled revalidation

SCHMA dispatches the event, and your application’s handler controls how to respond—whether invoking Next.js revalidateTag(), updating an edge CDN, or triggering a build.

Build with SCHMA. Keep your workflow yours.

Bring structured content, type-safe development, and AI-assisted workflows into the tools you already use.

Questions developers ask

Quick answers to help you understand how SCHMA fits into your development workflow.