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.