
Spin up a cloud instance or pull the container. Your content models come with you either way.
Plenary is a hybrid CMS: a strict, schema-validated content model your engineers can trust, plus a drag-and-drop Page Builder that composes the real React components in your codebase. One API, two audiences, no rebuild.
No credit card. Every feature. Cloud or self-hosted Docker.
Register any React component with the Plenary SDK and declare its configurable props. It appears in the builder palette, where editors drag it onto a page and edit its props in place — rendered by the same code that ships to production.
import { register } from '@plenary/react'
import { Hero } from '@/components/Hero'
register(Hero, {
key: 'hero',
label: 'Hero',
props: [
{ key: 'headline', type: 'text', required: true },
{ key: 'subtitle', type: 'text', ui: { control: 'textarea' } },
{ key: 'showMedia', type: 'boolean', defaultValue: true },
{ key: 'background', type: 'image' },
],
})Everything a platform team asks about before they commit — references, localization, image variants and forms — is in the core product, not a plugin.
References between content types with delete protection, named relationships and reverse lookups in the API.
type: referenceShow or hide fields based on other fields' values. Hidden fields skip validation — enforced on write, not just in the UI.
visible_whenScope read and write per role, per site and per content model. Mark fields private to keep them out of the public API.
private: trueWebhooks on create, update, publish, unpublish and delete, with secret-header auth, automatic retries and a delivery log.
entry.publishedTranslate any entry into as many locales as you need, with each translation kept together as one set.
locale: fr-caEvery change is a revision with an actor, the changed fields and a timestamp. Restore any prior state, or query the full history through the API.
GET /revisionsForms are content models: validation, storage, spam protection and a webhook on every submission, with nothing to bolt on.
form.submittedA REST API shaped by your schema, with a TypeScript client, a React renderer and Next.js helpers.
@plenary/clientDeclare variants on any image field. Plenary generates them automatically, with focal-point-aware crops.
format: webpSame container, same admin console, same API. A license key is the only difference between the two.
Run Plenary on your own infrastructure at no cost: one site, ten user seats, and the RESTful JSON API.
A perpetual license lifts every limit: unlimited sites and seats, forms, GraphQL, and OIDC / SAML single sign-on. Includes a year of version updates and priority support with a 24-hour response time.
Every feature of Plenary Cloud, managed and upgraded by us. No credit card required.
Start now →