Craft CMS review
Best for structured PHP sites

Craft is a PHP CMS from Pixel & Tonic, a bootstrapped company in Bend, Oregon, and it is built around structured content: sections, entry types and nested entries, modelled in a control panel that agencies consistently praise. For headless use it generates a GraphQL API from that model, and the API is included in every edition, the free one among them.
That changes what the licence is for. Solo is free forever and runs GraphQL, previews and multi-site, but allows one user account. The paid editions sell people rather than features: Team is $279 per project for five accounts, and Pro is $399 for unlimited accounts and custom permissions. Both are one-off purchases that include twelve months of updates, after which updates cost $99 a year.
Two decisions outweigh the edition. The first is whether to own the licence or rent it: Craft Cloud folds Team or Pro into hosting at $120 or $240 a month, billed annually, and that licence lasts only while the project stays there. The second is timing, because Craft 6 moves the whole CMS onto Laravel and is still in alpha.
Our scorecard
Our editorial read across six dimensions, scored 1 to 5. This is our own assessment, not an aggregate of user reviews, and it is deliberately kept out of the page's structured data.
- Content modelling5/5
Sections, entry types and nested entries across unlimited sites and locales, with the model kept in version-controlled project config.
- Developer experience3/5
GraphQL and Twig are solid, but the Yii 2 base is being swapped for Laravel and the API guardrails ship switched off.
- Editor experience4/5
A polished, accessibility-audited control panel, with the catch practitioners name: anything new needs a developer first.
- Pricing4/5
Free GraphQL and one-off licences priced by logins. Commerce and Cloud are where the bill grows.
- Governance3/5
Custom roles need Pro, SAML SSO needs Enterprise, and approval workflows wait for Craft 6.x.
- Ecosystem3/5
A curated Plugin Store and partner network, shallower than WordPress's, with Laravel's arriving in Craft 6.
An editorial read, not an aggregate of user reviews, and deliberately kept out of this page's structured data.
What you can query
GraphQL API
Every edition, Solo included
Entries, assets, categories, users and globals through a schema generated from your content model, with queries, mutations and image transforms.
Schemas and tokens
Tokens live in the database per environment
A public schema that is disabled by default, plus private schemas unlocked by 32-character bearer tokens that only admins can create.
Element API plugin
First-party, MIT licensed
Hand-defined JSON endpoints for entries and other elements, configured in PHP, for teams that want REST rather than GraphQL.
Preview targets
Every edition
Previews of drafts on multiple targets, including a decoupled front end or single-page application.
Project config
The quiet differentiator
Sections, fields, entry types and GraphQL schemas written to YAML files, so the content model moves between environments through Git.
Cloud request signing
Required for headless on Cloud
Signature headers that let trusted server-side code past Craft Cloud's bot policy during static builds and revalidation.
Who Craft CMS is for
Agencies and in-house teams building structured marketing sites, where a small group edits every day and a developer owns the model. Headless Craft suits a Next.js, Nuxt or Astro front end reading a model kept in project config under version control, and the free edition lets a developer prove the whole API before anyone buys a licence.
Clients who expect to invent new page types themselves will be frustrated, and one Craft agency says so plainly. Craft is also a questionable start for a very large site, for a team that needs approval workflows this year, or for a buyer who wants no licence obligations at all.
Strengths and limits
What it does well
- GraphQL is in every edition, including free Solo, so a developer can build and prove a whole headless front end before buying anything.
- Paid licences are perpetual for the installed version: $279 or $399 once per project, with updates optional at $99 a year and no penalty for gaps.
- Two ways to pay for one product: own a self-hosted licence, or take Craft Cloud with the licence included and nothing separate to renew.
- Structured modelling with sections, entry types and multi-site localisation in all editions, stored as project config you can version and deploy.
- Licence enforcement is confined to the control panel. Craft states the front end is never affected and site visitors never trigger a call to its servers.
- A published migration path: Craft 5 gets five years of support after Craft 6 ships, and a Yii 2 adapter is meant to keep most plugins working unchanged.
- New control panel features are audited against WCAG 2.2 and ATAG 2.0, and Craft publishes a conformance report.
- Craft Commerce for bespoke stores, and free first-party Shopify and Stripe plugins for simpler ones, all inside one CMS.
Where it falls short
- Solo allows exactly one user account, so the free headless build becomes a $279 decision the day a second person needs to log in.
- No approval workflows in Craft 5. The roadmap lists approval workflows, content releases and scheduled drafts for Craft 6.x.
- A framework port is underway. Craft 6 replaces Yii 2 with Laravel, is still in alpha, requires PHP 8.5, and needs a new major version of every plugin.
- On Craft Cloud, build-time GraphQL traffic meets a bot policy unless requests are signed server-side, and signed requests can still receive 429 or 503 responses.
- The licence bundled with Cloud is valid only while the Cloud project is active, so moving to your own hosting means buying one.
- GraphQL guardrails are off by default: complexity, depth, result and batch limits all default to zero, and responses allow any origin until you add a CORS filter.
- SAML SSO exists only in the quote-only Enterprise edition, which arrived in Craft 5.3.
- Craft's own general-config reference still says GraphQL is only available for Craft Pro. The pricing table and the source code both contradict that stale line.
Craft CMS pricing
Solo is free for public and private use, indefinitely, and includes the GraphQL API, Live Preview, multi-site, versioning, 2FA and passkeys. The limit is one user account. Craft's pricing FAQ says Solo is technically allowed for client work but advises against it, because it does not expect non-developers to hold admin access.
Team is $279 per project for up to five accounts and one user group, and is listed as available only for Craft 5. Pro is $399 for unlimited accounts, custom roles, a branded control panel and the Craft Commerce integration. Each includes a year of updates and developer support, then $99 a year, and each is perpetual for the version installed.
Payment falls due at launch rather than kickoff. Paid editions can be trialled on local and staging domains for as long as you need, and licensing notices appear once an unlicensed edition reaches a public domain. Non-profits get 15% off the licence but not the renewal. Enterprise is sold by quote and brings SAML SSO, a custom licence agreement and a dedicated support manager.
Craft Cloud rents the same editions with hosting: $120 a month for Team or $240 for Pro on annual billing, or $130 and $260 month to month. Thirty-six months of Cloud Pro on annual billing comes to $8,640. A self-hosted Pro licence with two renewals is $597, and the hosting bill is then yours to add.
Commerce is the expensive branch. Craft Commerce is $1,199 per project plus $299 a year after the first, on top of Craft Pro, so a new store starts at $1,598 in licences. Commerce Lite was dropped in early 2024, and the free Shopify and Stripe plugins now cover simpler storefronts.
Solo
Free
Forever, one user account
- GraphQL API and headless mode included
- Unlimited content types, entries, locales and sites
- Live Preview, versioning, 2FA and passkeys
- Craft advises against it for client work
Team / Pro
$279 / $399 per project
One-off, then $99/yr for updates
- Team: up to five accounts and one user group
- Pro: unlimited accounts, custom roles and permissions
- Pro is required for Craft Commerce
- Email developer support in the first year
Craft Cloud
$120 / $240 per month
Annual billing; $130 / $260 month to month
- Team or Pro licence included while the project is active
- 2 or 3 environments, 10GB or 20GB assets each
- 250GB or 500GB bandwidth, then $25 per 50GB
- Plugin licences, Commerce included, are extra
Query example
A minimal fetch against the live API, with credentials read from the environment rather than pasted inline.
curl -s "https://cms.example.com/actions/graphql/api" \
-H "Authorization: Bearer $CRAFT_GRAPHQL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"{ entries(section: \"news\", limit: 10, orderBy: \"postDate DESC\") { title slug postDate @formatDateTime(format: \"Y-m-d\") ... on article_Entry { summary } } }"}'
# The action URL works in headlessMode, where custom routes in
# config/routes.php are skipped. Without a token the public schema
# answers, and it is disabled by default.
#
# Complexity, depth and result limits all default to 0 (unlimited):
# set maxGraphqlComplexity, maxGraphqlDepth and maxGraphqlResults
# before exposing the endpoint. On Craft Cloud, sign build-time
# requests or the bot policy may answer 429.Limits and quotas
- Solo: one user account. Team: five accounts at most, in a single user group. Pro: unlimited accounts and groups.
- Team $279 and Pro $399 per project, one-off, each including one year of updates; renewals $99 a year.
- Each licensed copy may run in one production environment at a time, and the control panel may be used from one public domain per licence.
- GraphQL public schema is disabled by default; private schemas require a bearer token; custom routes are skipped in headlessMode.
- maxGraphqlComplexity, maxGraphqlDepth, maxGraphqlResults and maxGraphqlBatchSize all default to 0, meaning no limit.
- Craft Cloud Team: $120 a month billed annually, 2 environments, 10GB assets per environment, 250GB bandwidth. Pro: $240, 3 environments, 20GB, 500GB.
- Cloud extra bandwidth is $25 per 50GB, and Cloud plans do not cover first- or third-party plugin licences.
- Craft Commerce: $1,199 per project plus $299 a year for updates, up to 5 stores and 5 inventory locations, Craft licence not included.
- Craft 5 requires PHP 8.2+ with MySQL 8.0.17+, MariaDB 10.4.6+ or PostgreSQL 13+. Craft 6 will require PHP 8.5.
- Update checks and Plugin Store visits send the licence key, versions, hostname and the current user's email address to Pixel & Tonic.
What developers say on Reddit
Craft's Reddit reputation splits between the people who build with it and the people who inherit it. Agency developers recommend it warmly for structured marketing sites, praise the control panel and its accessibility work, and several say they would not return to WordPress. The criticism is specific: a shallow plugin ecosystem, updates that need a developer, and doubts about very large sites.
The most useful comment for a buyer comes from a Craft specialist agency, and it is candid. Clients often feel they need a developer for anything new, because a developer has to build each new content mechanism first. That is the price of a structured model, so decide in advance whether your editors want that trade.
Headless-specific voices are fewer. One team moved from Craft to Sanity with Next.js after, by its own account, Craft's COO advised the switch; the commenter now works at the agency that did the migration. Pixel & Tonic's founder also posts pricing directly in r/cms, and in r/laravel the Laravel announcement drew mostly relief from developers who disliked the Yii 2 base.
“the biggest complaint you'll hear from client end users is, "It feels like I need a developer to do everything in Craft CMS" because it's mostly true. If you want to do something new, a developer has to put that mechanism in place first.”
r/cms on Reddit“We migrated from Craft to Sanity CMS paired with Next.js. We actually had a meeting with the Craft COO and after going through our needs she advised us to switch to Sanity.”
r/nextjs on Reddit“It has a gorgeous UI and customers the ease of content editing with it. Where I hated it was the developer experience. So much cruft to get basic testing running compared to how easy Laravel makes this.”
r/laravel on Reddit“the update process requires some handholding compared to WP. it's not ideal for a build it and deliver it project unless client has staff to deal updates. If managing yourself it is a fine replacement. The plugin ecosystem is pretty shallow though.”
r/webdev on Reddit“Craft CMS is great and we use it for all our medium-sized sites. But I would not recommend it for a 250k+ pages website.”
r/cms on Reddit
Verdict
Shortlist Craft when the content model deserves real design and a developer will own it. The GraphQL API costs nothing to evaluate, the paid editions are priced by how many people log in, and a bought licence keeps working for the version installed. For a structured site with a small editing team, that makes the long-run bill small and predictable.
Choose the ownership model on purpose. A self-hosted Pro licence is the cheapest route for a site that lives for years, and Craft Cloud is the simplest. The Cloud licence ends when the project leaves, though, and its bot policy means a headless build has to sign its requests. Price Commerce separately, because the licences alone start at $1,598.
Then pick the version with open eyes. Craft 5 is the safe start and keeps five years of support after Craft 6 ships, while Craft 6 is a Laravel port in alpha that brings approval workflows later. If your editors expect to create page types without a developer, test that before signing, because practitioners who use Craft daily say they cannot.
Craft CMS FAQ
Does Craft CMS headless use need a paid edition?
No. GraphQL reached the Solo edition in Craft 4.8, released on 26 February 2024, and today's pricing table includes it in every edition. Solo allows one user account, and Craft's own FAQ advises against using it for client work. Define a schema, create a token and, if you like, switch on headlessMode, and a front end can query it straight away.How much does Craft CMS cost?
Solo is free. Team is $279 per project for up to five users and Pro is $399 for unlimited users, each a one-off licence including twelve months of updates, renewable at $99 a year. Enterprise, with SAML SSO, is quoted. Craft Cloud includes a Team or Pro licence at $120 or $240 a month on annual billing, or $130 and $260 monthly.Craft CMS vs WordPress: which is better for a structured site?
For a bespoke, structured site built by developers, usually Craft: content modelling and GraphQL are in core, where headless WordPress usually leans on ACF and the WPGraphQL plugin. WordPress wins on licence cost, since GPL software carries no fee, and on how easily another agency can take a site over. Craft charges $279 or $399 once a second or sixth person needs a login.What does Craft CMS ecommerce cost?
Craft Commerce is $1,199 per project plus $299 a year for updates after the first year. It needs a Craft Pro licence on top, because the pricing table ties Commerce to Pro, and Cloud plans do not include it. Commerce supports up to five stores. For simpler shops, first-party Shopify and Stripe plugins work in every edition.Should a new Craft CMS project start on Craft 5 or Craft 6?
Craft 5, for anything launching this year. Craft 6, rebuilt on Laravel, was at 6.0.0-alpha.18 on 1 September 2026, and Craft's planning article expects the stable release at the end of 2026 or early 2027. Craft 5 then gets five years of long-term support, and a licence's first year of updates includes a major version released within it.Is Craft CMS open source?
No. LICENSE.md, unchanged in substance since November 2017, lets you use, modify and distribute the code on five conditions. Each licensed copy may run in one production environment at a time, licensing features such as feature restrictions must not be circumvented, and any payment prompt must be paid immediately. Breaking a condition ends the permission automatically.What happens when Craft CMS licence updates expire?
The site keeps running. Paid licences are perpetual for the version installed, so you can stay on it indefinitely, but newer releases show as expired and are not installed. Renewing later costs one year's fee with no charge for the gap. Licensing problems surface only in the control panel, and Craft states the front end is never affected.Is Craft CMS freelancer-friendly for client sites?
Usually, on Team or Pro rather than Solo, which Craft advises against for client work. You can trial paid editions on local and staging domains and buy at launch, and Craft Console lets you transfer or release a licence so the client ends up holding it. Budget the renewals, and remember that each new content type means developer time.
This is an independent review. We have no affiliate relationship with Craft CMS, earn nothing if you sign up, and no vendor pays for placement in the directory. Prices were read from the vendor's own pages in September 2026 and change without notice.