Skip to main content

Kiln vs Payload

Facts checked 2026-10-06. Review owner: the Kiln maintainers. The sources are listed at the end. The relationships facts were added on 2026-10-18, with their sources. See how these pages stay honest.

Payload and Kiln are the closest pair on this list in philosophy. Both are code-first and MIT-licensed, and both derive their APIs from content types you declare. The big difference is where they live. Payload installs into a Next.js app, in TypeScript. Kiln is its own Elixir application that serves the site and the API together.

At a glance

Payload (3.x)Kiln (1.0)
LicenceMIT (licence)MIT (licence)
OwnershipJoined Figma, announced 2025-06-17. Payload says it remains open source and self-hosting is unchanged (announcement)Independent open-source project (repository)
StackTypeScript on Node.js 20.9+, Next.js-native since 3.0. MongoDB, PostgreSQL or SQLite (databases)Elixir and PostgreSQL 17 with pgvector (deploy)
Latest major3.0.0, released 2024-11-19; 4.0 is in canary (releases)1.0.0, released 2026-10-02 (changelog)
ModelingCode: collections and fields in the TypeScript config (access control)Code (use KilnCMS.CMS.Content), or the admin UI on a running site (extending content)
RelationshipsA relationship field stores IDs on the document, to one collection or several (relationTo), with minRows/maxRows. A join field shows the other side. Data on a link needs a junction collection you model (relationship, join)From 1.5: reference fields to one or several types, with typed data on each connection, a reverse field, an on-delete rule and a limit per target, defined in the admin UI (relations)
APIsREST, GraphQL and a Local API; API keys per auth collection (API keys)JSON:API and GraphQL, both read and write, plus MCP; scoped API keys (API overview)
Access controlFunctions you write, at collection, field and row level; no roles UI (access control)Declarative policies, plus custom roles and per-field grants in the admin UI (RBAC)
Drafts, versions, schedulingBuilt in (drafts)Built in (content lifecycles)
Approval workflowsEnterprise (enterprise)Built in: draft, in review, published (content lifecycles)
LocalizationBuilt in, per field (localization)Built in, one record per locale (localization)
Live previewBuilt in, iframe-based (live preview)Built in for Kiln's own site; a bridge for external front ends (bridge)
Managed hostingPayload Cloud takes new projects from Enterprise teams only (new project)None. Self-host, or use a one-click platform (deploy platforms)

Choose Payload if…

  • Your product is a Next.js app, and you want the CMS inside it, in the same language and the same deploy.
  • You want MongoDB, or SQLite at the edge.
  • You want access rules as plain functions in the codebase you already have, rather than a policy layer.
  • Your team knows TypeScript, and nobody knows Elixir.

Choose Kiln if…

  • You want editors to change the model too. Kiln's types can be declared in code or added on a live site, and both kinds get the same APIs (extending content).
  • You want roles and permissions administered, not programmed. Custom roles, per-type scopes and per-field grants are managed in the UI, enforced by the same policies for the editor and every API (RBAC).
  • You want approval workflow in the free product.
  • You want more than a CMS in one deployment. Search, newsletters, its own mail server, paid memberships, webhooks and real-time updates ship inside Kiln (newsletter, memberships, webhooks).
  • You do not want your content service tied to a front-end framework's release cycle.

Moving from Payload

There is no Payload importer yet. Kiln's portable JSON format and its write API are the way in. See content portability and the JSON:API guide.

Sources

All checked 2026-10-06.

Added 2026-10-18, for the relationships facts: