How It Works

Design a database, not fill forms

Define your content structure. Connect relationships. Validate data. Query via API.

Content fits your business, not a template

Traditional CMS platforms force you into rigid structures. Schemaful lets you define exactly what you need.

Schema
Define content types
Blog Post, Product, Author, Category — whatever your app needs
Fields
Add typed properties
11 field types with validations, localization, and relationships
Entries
Create content
Editors work in a polished UI. Developers query via API.

Traditional CMS

  • • Fixed "Page" and "Post" templates
  • • Plugin soup for custom fields
  • • Content locked in HTML blobs
  • • One output: your website

Schemaful

  • • Create any content type you need
  • • Typed fields with built-in validation
  • • Structured JSON, query however you want
  • • Same content → web, mobile, IoT, AI

11 field types

From short text to rich content to geographic coordinates. Model any content structure.

Symbol
Short text up to 256 chars
Text
Long-form content
RichText
WYSIWYG with embeds
Integer
Whole numbers
Number
Decimals & floats
Boolean
True or false
Date
Dates & times
Location
Lat/lon coordinates
Object
Arbitrary JSON
Link
Entry or asset reference
Array
Lists of any type

Validation built in

Validate at entry time. No bad data reaches production.

Size
Min/max text length or array size
Range
Number min/max bounds
Date Range
Before/after constraints
Pattern
Regex validation with custom flags
Enum
Predefined value choices
Unique
No duplicate values across entries
{
  fieldId: "price",
  type: "Number",
  required: true,
  validations: [
    { range: { min: 0, max: 10000 } }
  ]
}

Relationships that just work

Link entries to entries, entries to assets. Resolve them with a single API call.

Link Fields

  • Reference other entries (author, category, related posts)
  • Reference assets (hero image, gallery, downloads)
  • Restrict to specific schemas for type safety

Embedded Content

  • Embed entries inline in rich text
  • Embed assets with captions
  • Same rich text format as Contentful
Resolve linked content with depth control:
const post = await cms.entries.resolve(entry, { depth: 2 });

post.author          // Resolved Author entry
post.author.avatar   // Resolved Asset
post.category.parent // Resolved Category (2 levels deep)

Developers build it. Editors love it.

A polished editing experience your content team can use from day one.

Rich Text Editor
TipTap-powered WYSIWYG. Headings, lists, quotes, code blocks. Embed entries and assets inline.
Asset Management
Drag-drop uploads. Automatic image optimization. 10 responsive sizes generated in WebP.
Side-by-Side Locales
Compare translations. Copy content between languages. Per-field localization control.
Draft & Publish
Per-locale publish states. See what's live vs. in progress. Publish when ready.

Webhooks & automation

Trigger builds, sync search indexes, notify your team.

entry.publish
entry.unpublish
entry.delete
asset.create
asset.delete

HMAC-signed payloads. Delivery tracking. Automatic retries.

Ready to build?

Get started in minutes. Self-host free or join the cloud waitlist.