KeystoneJS logo
Craft CMS logo

From KeystoneJS to Craft CMS

We are the KeystoneJS to Craft CMS migration experts

Last verified:



Challenges with KeystoneJS

Key pain points

The biggest challenge with KeystoneJS is that it hands you all the responsibility that a managed CMS would normally handle. Deployment is entirely on you, and the documentation around production hosting, Docker configuration, and scaling is thin. We've seen teams struggle to go from a smooth local development experience to a reliable production setup, especially if they don't have dedicated DevOps support. The admin UI Docker image alone can balloon to over a gigabyte, which is a headache for containerised deployments.

The community around Keystone is significantly smaller than competitors like Strapi or Payload. That means fewer tutorials, fewer plugins, and slower answers when you hit an edge case. The ecosystem of ready-made integrations is almost non-existent, so you'll be building most things from scratch. For an agency working on client projects with deadlines, that time cost adds up quickly.

Content editors also tend to have a harder time with Keystone compared to more polished alternatives. The admin UI is functional but feels utilitarian, and non-technical users often need more onboarding than you'd expect. There's no visual editing, no preview infrastructure, and no real content workflow features like drafts, publishing schedules, or approval chains without building them yourself. If your client's content team needs a CMS they can pick up and run with, Keystone usually isn't the answer.

Help me migrate


Deployment complexity in KeystoneJS

Deployment complexity

Self-hosting is the only option, and the docs don't hold your hand. Getting Keystone into production requires real infrastructure knowledge, and the large Docker image sizes make it worse.

Small community in KeystoneJS

Small community and ecosystem

Compared to Strapi or even Payload, the community is much smaller. Fewer plugins, fewer tutorials, and slower support when things go wrong.

No built-in content workflows in KeystoneJS

No built-in content workflows

There are no turnkey drafts, scheduled publishing, or approval chains. Keystone provides field primitives that can be assembled into publishing workflows, but you need to wire them up yourself.

Dated admin UI in KeystoneJS

Admin UI feels dated

The admin panel is functional but lacks the polish and UX of modern CMS interfaces. Non-technical editors often find it confusing and need more training.

No visual editing in KeystoneJS

No visual editing or live preview

There's no way for editors to see content in context before publishing. You'd need to build your own preview infrastructure, which is a significant engineering effort.

Scaling challenges in KeystoneJS

Scaling requires significant effort

Running Keystone under high traffic means managing session stores, reverse proxies, and server resources yourself. It doesn't scale as smoothly as cloud-native CMS alternatives.



Benefits of Craft CMS

Key advantages

Craft CMS is one of those platforms we genuinely respect from a developer standpoint. The content modelling is best-in-class for a traditional CMS. You define sections, entry types, and fields with real precision, and the authoring experience maps cleanly to the underlying data structure. If your content team needs a CMS that actually reflects how the site is built, Craft delivers that better than most. The Twig templating layer is clean and predictable, and the admin UI is fast and intuitive once editors get past the initial learning curve.

Where Craft really shines is in the middle ground between simple marketing sites and full-blown enterprise builds. It's flexible enough to handle complex content architectures without the bloat of something like WordPress, and the built-in GraphQL API means you can use it headless if you want to pair it with a modern frontend. The plugin ecosystem is smaller but noticeably higher quality than what you'd find in WordPress, and the Composer-based workflow means your whole project can live in version control properly.

We've seen agencies build genuinely impressive work on Craft, especially for content-heavy sites where editorial workflows matter. If your team includes developers and you want a CMS that rewards careful architecture, Craft is a solid choice. It's not trying to be everything to everyone, and that focus shows.

That said, we'd typically recommend a headless CMS like Sanity for most of the projects we take on. Craft is at its best when you're comfortable with PHP and want a tightly integrated traditional or hybrid setup. If you're building on Next.js or a modern JavaScript stack, you'll find more natural fits elsewhere.

Start my migration


Content modelling in Craft CMS

Exceptional content modelling

Craft's field and section system gives you precise control over your content structure. You can model complex relationships between content types without fighting the CMS.

Clean authoring experience in Craft CMS

Clean authoring experience

The admin panel is fast, well-organized, and maps directly to how content is structured. Editors can work efficiently once they understand the layout.

Built-in GraphQL API in Craft CMS

Built-in GraphQL API

Craft ships with a native GraphQL API, so you can use it headless without plugins or workarounds. It's deeply integrated and well-documented.

Composer-based workflow in Craft CMS

Composer-based modern workflow

Everything is managed through Composer, so your project, plugins, and dependencies all live in version control. Deployments through CI/CD pipelines work smoothly.

Plugin ecosystem in Craft CMS

Higher quality plugin ecosystem

The plugin store is smaller than WordPress but the quality bar is noticeably higher. Plugins are better maintained and less likely to break your site on update.

Granular user permissions in Craft CMS

Granular user permissions

Built-in role and permission management is detailed and flexible. You can lock down exactly what each editor can see and do without needing third-party plugins.





Common questions

KeystoneJS to Craft CMS migration FAQs

Answers to the most common questions about KeystoneJS to Craft CMS migration

What makes migrating from KeystoneJS difficult?
KeystoneJS stores data through Prisma, so the database layer is well-structured and easy to export. The harder part is replacing everything Keystone doesn't give you. Most Keystone projects have custom-built preview systems, publishing workflows, and access control logic that are tightly coupled to the Node.js backend. Rebuilding those features in a new CMS takes planning. We typically budget 4 to 8 weeks for a Keystone migration depending on how much custom infrastructure the team has built around it.
Why do teams move away from KeystoneJS?
Deployment complexity is the number one reason. Teams love Keystone during local development, then hit a wall getting it reliably into production. The Docker images can balloon past a gigabyte, the docs don't cover production hosting well, and there's no managed hosting option. The small community compounds this problem. When you hit an edge case, there are fewer people who've solved it before. Content editors also struggle with the admin UI, which lacks visual editing, live preview, and built-in publishing workflows that competing platforms ship by default.
How do we extract our content from KeystoneJS?
Since Keystone uses Prisma ORM, your content lives in standard PostgreSQL, MySQL, or SQLite tables with clean schemas. You can export directly from the database using SQL dumps or Prisma's query API. The content model is defined in your TypeScript codebase, so mapping fields to a new CMS is straightforward. We write automated scripts that handle the data transformation, including resolving relationships between lists and migrating file references. For a project with 20 to 50 Keystone lists, extraction and transformation usually takes 1 to 2 weeks.
How much does Craft CMS cost for an agency managing multiple sites?
The costs add up quicker than most agencies expect. The Solo tier is free for single-user projects, Team is $279 per project, and Pro is $399 per project. Both paid tiers carry a $99 annual renewal fee. If you're running 10 client sites on Pro, that's $3,990 upfront plus $990 per year in renewals before you've paid for a single plugin. Popular plugins like SEOmatic, Blitz (caching), and Navigation run $99-$199 each. Factor in PHP hosting ($20-$100/month per site depending on traffic) and the total per-project cost lands between $500 and $1,500 in year one. It's reasonable for individual projects but the aggregate cost across a portfolio is where agencies feel the squeeze.
What are the hidden costs of running Craft CMS?
Beyond licensing, three costs catch teams off guard. First, PHP hosting. Craft needs PHP 8.2+, MySQL or Postgres, and proper server configuration. You can't deploy to Vercel or Netlify like you would with a headless CMS. Budget $20-$100/month per site for decent managed hosting. Second, major version upgrades. Craft doesn't let you skip versions, so going from Craft 3 to 5 means stepping through 3 to 4, then 4 to 5, each with breaking changes to Twig templates and plugin compatibility. We've seen agencies spend 20-40 hours per upgrade. Third, developer dependency. Craft assumes your team has PHP developers on hand. If your agency is moving toward JavaScript stacks, maintaining Craft expertise becomes an overhead.
Should I migrate from Craft CMS to a headless CMS?
It depends on your stack direction. If your team is comfortable with PHP and Twig, and your sites are traditional server-rendered builds, Craft still works well. But if you're building with Next.js, React, or any modern JavaScript framework, Craft becomes friction. Its GraphQL API exists but it's a bolt-on, not a native experience. The content modelling in Craft is genuinely good, and that translates well to headless platforms. We've migrated Craft sites to Sanity where the content structures mapped over almost one-to-one. The frontend rebuild in Next.js typically takes 6-10 weeks, and the result is faster, cheaper to host, and easier to iterate on.
What's the biggest challenge when migrating off Craft CMS?
Twig templates. Every piece of frontend logic in a Craft project lives in Twig, and none of it carries over to a modern JavaScript framework. You're essentially rebuilding every template from scratch. Content migration itself is manageable since Craft's data structures are well-organised, and you can export through the Element API or direct database queries. The other challenge is plugin replacement. If you rely on Craft plugins for forms, SEO, or search, you need to find equivalents in your new stack. We build a dependency audit before any Craft migration so there are no surprises mid-project.


Get in touch

Fill out the form below and we'll get back to you