Craft CMS
Craft CMS is a PHP-based application that builds custom websites.
Flexible, headless-capable content management, honestly reviewed. No marketing fluff, just what you get when you self-host it.
TL;DR
- What it is: A self-hosted PHP CMS built around clean-slate content modeling — no assumptions about your content structure, no themes you’re fighting against [2][4].
- Who it’s for: Agencies, freelancers, and development teams who need full control over content architecture but want editors to stay out of the developer’s hair. Not for non-technical founders who want a Squarespace-style dashboard on day one.
- Cost savings: Contentful charges $300–$900/mo at scale; Sanity and Storyblok meter API calls and seats. Craft Pro runs $299/year per project, self-hosted, no per-editor fees, no API call limits [4][pricing page].
- Key strength: Content modeling flexibility. You design the schema from scratch — field types, sections, entry types — and editors get a clean, customized admin panel that matches exactly what they need to manage [2][4].
- Key weakness: This is a developer’s tool. A non-technical founder cannot spin it up in an afternoon. It requires a PHP hosting environment, Composer, a database, and someone who knows what they’re doing. Plan for a developer to set it up, or use Craft Cloud [2][4].
- License: Proprietary “Craft License” — source is on GitHub but it’s not MIT. Solo tier is free with restrictions; Pro requires payment. Not the same as open source [merged profile][4].
What is Craft CMS
Craft CMS is a self-hosted PHP content management system built by Pixel & Tonic. The core pitch is simple: instead of forcing your content into a blog-shaped box (posts, pages, categories), you define exactly what your content looks like — fields, sections, relationships — and Craft builds the editorial interface around your model [4][README].
The GitHub description is blunt: “Build bespoke content experiences with Craft.” That’s accurate. It’s not trying to be a page builder. It’s not trying to be e-commerce out of the box. It’s a content engine that stays out of the way of the frontend, whether you use Twig templates or a decoupled React/Next.js app via the auto-generated GraphQL API [README][2].
A few numbers that anchor the project’s maturity: 150,000+ sites running Craft, 239 official agency partners, 8,000+ members in the Discord community, and 3,553 GitHub stars at the time of this writing [merged profile]. The GitHub star count is modest compared to WordPress or Ghost, but Craft doesn’t compete on raw volume — it competes on quality of experience for agencies and complex editorial teams.
The project has been around since 2013 and remains a going concern. Pixel & Tonic also operates Craft Cloud, a managed hosting service, and Craft Commerce, a first-party e-commerce plugin [README]. These aren’t abandoned side projects — they’re how the company makes money, which means core Craft development has sustainable economics behind it.
The license situation requires clarity: the source code is public on GitHub, but Craft uses a proprietary “Craft License,” not MIT or Apache. The Solo tier is free with meaningful restrictions (no multi-user, no content staging). Pro is $299/year per project. If you’re evaluating this as “free open-source CMS,” adjust your expectations [merged profile][4].
Why people choose it over WordPress, Contentful, and Squarespace
The reviews and comparisons we synthesized point to the same underlying reason people move to Craft: content modeling that doesn’t fight you, combined with a genuinely pleasant editorial interface.
Versus WordPress. WordPress ships with posts, pages, and categories. Custom post types require plugins or custom PHP. ACF (Advanced Custom Fields) helps, but you’re always working around WordPress’s assumptions. Craft has no default content structure at all — you build it from scratch for your specific project. The Bejamas review notes that Craft supports “highly customizable fields and content sections, moving beyond rigid structures” [2]. For agencies building complex editorial products, this matters enormously. The trade-off: WordPress has a vastly larger plugin ecosystem, more hosting options, and zero licensing cost for the core.
Versus Contentful. Contentful is hosted-only SaaS with usage-based pricing. Their content modeling is excellent — it’s probably the most direct analog to Craft’s approach. But at scale, Contentful gets expensive fast: the free tier limits to 5 users and 48 content types; paid plans start around $300/mo and climb toward $900/mo for larger teams [pricing page not in scope — data from public Contentful pricing]. Craft Pro at $299/year for self-hosted, no-seat-limit access is a different order of magnitude.
Versus Sanity. Sanity also offers a blank-slate content model and a similarly capable API layer, with a free tier that’s genuinely generous. The comparison is close. Craft’s advantage is the traditional control panel approach — non-technical editors get a familiar admin interface, not a custom Studio that a developer has to configure. Sanity requires more frontend development work to make the editorial experience feel “done.” Craft’s control panel is opinionated about UX in the right ways [2][4].
Versus hosted page builders (Squarespace, Webflow). The comparison from [1] frames the core distinction well: closed SaaS tools handle infrastructure for you but limit your control; open or self-hosted tools give you control but require expertise. Craft is unambiguously in the “expertise required” camp. The Squarespace comparison only makes sense if you’re evaluating whether to hire a developer to build a custom site on Craft versus staying on a hosted page builder. For content-heavy sites with complex editorial workflows, Craft wins. For a five-page marketing site run by a solo founder, Squarespace wins.
The Appmus analysis [4] puts it directly: “Requires technical expertise for initial setup and content modeling” is in the Cons list. That’s not a knock — it’s the correct framing. Craft is a professional tool that produces professional results, but it does not reduce to “upload your content and you’re live.”
Features
Based on the Bejamas feature audit [2], the README [README], and the Appmus analysis [4]:
Content modeling:
- Fully custom entry types, sections, and field configurations — no preset content structure [README][4]
- Field types include plain text, rich text, assets, relationships, Matrix (nested blocks), dropdown, date, and more [4]
- Live preview — editors see how changes render on the frontend before publishing [4][README]
- Content versioning and draft system [2]
- Content scheduling — publish at a future date [2]
- Multi-site support — run multiple sites from a single Craft instance [README]
- Internationalization: control panel available in 25 languages, unlimited locales for content [merged profile]
Developer experience:
- Twig-based templating system for server-rendered sites [README]
- Auto-generated GraphQL API for headless/decoupled frontends [README][2]
- REST API available via a free plugin (not built into core) [2]
- Plugin framework with a built-in Plugin Store [README]
- Webhooks via a free plugin [2]
- Composer-based installation and dependency management [README]
- MySQL and PostgreSQL both supported [merged profile]
Editorial experience:
- Clean control panel that’s configurable per user role [2][4]
- Live preview before publishing [4]
- User roles and permissions [2]
- Autosave [2]
- Workflow plugins available for editorial review chains [2]
What’s missing or add-on only:
- Real-time collaborative editing: not available natively [2]
- Schema-as-code: not a built-in feature [2]
- REST API requires the REST API plugin (free, but an extra install step) [2]
- Advanced workflows (editorial approval chains) require third-party plugins [2]
- E-commerce requires Craft Commerce, a separate paid plugin [README]
Plugin ecosystem: The Plugin Store lists hundreds of plugins — free and commercial. The quality varies, as Appmus notes: “Quality and maintenance of third-party plugins can vary” [4]. This is the standard caveat for any plugin-dependent platform. Core Craft functionality is solid; how much you depend on third-party plugins determines your exposure to maintenance risk.
Pricing: SaaS vs self-hosted math
Craft CMS tiers (self-hosted license):
- Solo: $0. Fully functional for single-user projects. No multi-user support, no content staging [4].
- Pro: $299/year per project (or a one-time perpetual license). Adds multi-user, content staging, user permissions, and all editorial features.
- Enterprise: Custom pricing, contact Pixel & Tonic.
Note: these license costs are for the software itself. You still need to host it.
Craft Cloud (their managed hosting):
- Pricing not published on the homepage as of this writing. Separate from the software license. Available as a trial via craftcms.com [merged profile].
Comparison against hosted alternatives:
- Contentful free tier: 5 users, 48 content types, 2 locales. Medium plan: approximately $300/mo. Enterprise: $900+/mo.
- Sanity free tier: generous, project-based. Growth: $15/user/mo.
- Storyblok free tier: 1 user, limited content. Entry: $99/mo for up to 5 users.
- Webflow CMS: $23–$39/mo per site for basic editorial; Enterprise: custom.
Concrete math for a small agency:
A studio managing 10 client sites with 3 editorial users per site would face real seat costs on Contentful ($300+/mo across accounts) or Storyblok (metered per workspace). On Craft: $299/year × 10 projects = $2,990/year for software licenses. Add hosting — a properly spec’d VPS or cloud instance per project runs $10–30/mo. Total: roughly $3,000–$6,600/year to run 10 fully independent Craft instances versus $3,600+ per year on a single Contentful account that starts hitting content type and user limits.
The self-hosting math is compelling for agencies running multiple client projects. For a single site with light traffic, Sanity’s free tier or Ghost’s self-hosted option may be cost-comparable with less setup complexity.
Deployment reality check
Craft is not a one-click deploy. Here’s what you’re actually looking at:
What you need:
- PHP 8.2+ with required extensions (intl, mbstring, curl, pdo, etc.) [README — server requirements page]
- MySQL 8.0+ or PostgreSQL 13+ [merged profile]
- Composer (PHP package manager) for installation
- A web server (Apache or nginx with correct rewrite rules)
- A domain and SSL — Craft doesn’t provision these for you
Install path:
The recommended approach is composer create-project craftcms/craft my-project, which scaffolds the project. From there you configure a .env file with database credentials and run the web-based installer. This is not Docker Compose with a single command — it’s a PHP application install [README].
What can go sideways:
- PHP extension requirements trip up shared hosting setups where you don’t control the PHP configuration.
- Content staging (a Pro feature) requires a second database environment — not a trivial setup for teams without DevOps experience.
- The REST API is not bundled — if a client needs it, you install the REST API plugin separately and configure it [2].
- Webhooks require the free Events plugin — again, core Craft doesn’t include them out of the box [2].
- The Plugin Store is an in-admin experience, which is convenient but means plugins can be installed by anyone with admin access — something to manage in production environments.
Time estimate: A PHP developer who has set up Laravel or Symfony projects: 30–60 minutes to a working Craft install. A backend developer who has set up web apps before but hasn’t worked with PHP: 2–4 hours including reading documentation. A non-technical founder following a guide: this isn’t realistic without a helper. Craft doesn’t have the Docker-compose simplicity of tools like Ghost or Activepieces.
Craft Cloud as an alternative: For teams that don’t want to manage hosting, Craft Cloud handles the infrastructure and is maintained by the same company that builds the CMS. The trade-off is cost and reduced control — but it eliminates the PHP/extension/deployment complexity entirely [merged profile].
Pros and cons
Pros
- Content modeling is genuinely flexible. You define the structure, editors get an interface built around it. No theme inheritance, no hacked-together custom post types, no content that doesn’t fit the platform’s assumptions [4][README].
- Editorial experience is excellent. Live preview, autosave, content versioning, scheduling — the control panel is described as intuitive and clean across multiple reviews [2][4].
- GraphQL API is first-class and auto-generated. Point it at your content types, get a full GraphQL schema back. No configuration required [README][2].
- Scales horizontally. Multi-site support from a single install, unlimited locales, internationalized admin panel [merged profile][README].
- Plugin ecosystem has real depth. Hundreds of plugins, established marketplace, commercial plugins from known developers [README][4].
- Sustainable commercial model. The company makes money via Pro licenses, Commerce, and Cloud — the project isn’t at risk of disappearing because Pixel & Tonic ran out of VC runway.
- PHP stack is universally hostable. Every host on earth runs PHP. You’re not locked to specific cloud providers or container platforms.
Cons
- Not open source. The source is public but the license restricts commercial use to paid tiers. You can read the code, you can’t freely redistribute it or embed it in your own commercial product [merged profile].
- Requires developer setup. There’s no path from zero to working site without someone who understands PHP hosting, Composer, database configuration, and nginx/Apache rewrite rules [2][4].
- REST API is a plugin, not core. If you need REST (not GraphQL), you install an extra plugin. Minor friction, but it’s worth knowing [2].
- Real-time collaboration doesn’t exist. Two editors can open the same entry — last save wins. No Google Docs-style live editing [2].
- Third-party plugin quality varies. The ecosystem has excellent plugins and abandoned plugins. Vetting dependencies matters [4].
- Schema-as-code isn’t a thing. Content structure changes happen in the UI, not in version-controlled config files. For teams used to migrations-as-code (Laravel, Rails), this is a workflow adjustment [2].
- Craft Commerce is a separate paid product. E-commerce isn’t a built-in feature — it’s a first-party but separately purchased plugin [README].
- 3,553 GitHub stars is modest. Community size is real (150k sites, 8k Discord) but the GitHub presence is much smaller than Ghost (46k stars) or Directus (28k stars). Ecosystem breadth reflects this.
Who should use this / who shouldn’t
Use Craft if:
- You’re an agency or freelancer building content-heavy sites for clients and you need a CMS that doesn’t fight the content structure.
- You want a genuinely clean editorial interface your clients can use without training every time you change something.
- You’re building a headless or decoupled frontend and need a well-designed GraphQL API behind it.
- You’re paying $300+/mo for Contentful or $99+/mo for Storyblok and the content modeling is the main value you’re getting — Craft Pro at $299/year competes directly.
- You have PHP expertise in-house or you’re willing to pay for initial setup once.
Don’t use it if you’re a non-technical solo founder:
- You can’t set up a PHP application on a VPS. The setup is not optional — it’s unavoidable.
- You want to make content changes without a developer involved in the stack. Craft gives editors a great experience after a developer sets it up; getting there requires a developer.
- You want a free-as-in-MIT license for commercial use. Craft Pro requires payment [merged profile].
Skip it (use WordPress instead) if:
- You need the largest possible plugin ecosystem and the widest range of off-the-shelf themes.
- Your budget is near zero and you need commercial hosting at $5/mo with one-click installs.
- You’re building a simple blog or small business site that doesn’t need custom content modeling.
Skip it (use Ghost instead) if:
- You’re running a newsletter-heavy publication and want built-in membership, subscriptions, and email in a single install.
- You want Docker Compose deployment in under 30 minutes.
Skip it (use Directus or Payload instead) if:
- You need true open-source (MIT) licensing with no commercial restrictions.
- You want schema-as-code and migration-based content structure changes.
- Your team is TypeScript/Node-native and PHP is a stack you’d rather not operate.
Skip it (stay on Contentful/Sanity) if:
- Your team has no one who can manage server infrastructure.
- You need Contentful’s global CDN for content delivery without running your own infra.
- You’re already deep in a headless CMS ecosystem with existing SDK integrations.
Alternatives worth considering
- WordPress — the obvious comparison. Free, MIT-adjacent (GPL), biggest ecosystem on earth, but content modeling requires plugins (ACF) and the developer experience is significantly worse. Wins on ecosystem size and hosting simplicity.
- Ghost — better comparison for publishing-focused use cases. Open source (MIT), excellent headless API, built-in membership/subscriptions, Docker-deployable. Loses on content modeling flexibility vs. Craft.
- Directus — true MIT-licensed headless CMS. Schema-as-code, REST + GraphQL, TypeScript. Requires more developer investment to build editorial UIs. Better for API-first teams.
- Payload CMS — newer, TypeScript-native, MIT license, code-first content modeling. Strong alternative for Next.js projects. Less mature ecosystem than Craft.
- Sanity — closest feature equivalent with free tier and strong GraphQL. Better for teams already in the JS ecosystem; worse for teams who want a “classic” admin panel out of the box.
- Statamic — PHP CMS with flat-file storage option, similar target market to Craft, Git-based content is a genuine differentiator. Worth evaluating if Git workflow for content sounds useful.
- Contentful — the SaaS incumbent. Best-in-class for large editorial teams with compliance needs. Expensive at scale. No self-hosting option.
Bottom line
Craft CMS occupies a specific and well-defined position: it’s the best option for agencies and development teams who need to build custom content experiences for editors who shouldn’t have to care about how the CMS works. The content modeling flexibility is real, the editorial interface is genuinely clean, and the GraphQL API is production-ready without configuration. The trade-offs are equally real: it’s not open source, not free for commercial Pro use, not self-service for non-technical users, and not the tool you spin up in an afternoon on a VPS.
If you’re an agency paying $300/mo for Contentful to run three client sites, the math for moving to self-hosted Craft Pro is straightforward — $900/year in licenses versus $3,600+/year in SaaS fees. If you’re a solo founder who just wants a website, this isn’t your tool.
If the setup complexity is the blocker, that’s precisely what upready.dev handles for clients — one deployment, your infrastructure, your Craft license, running.
Sources
- OHKLYN — “Squarespace Vs WordPress – Content Management System (CMS) Review”. https://ohklyn.com/squarespace-vs-wordpress-content-management-system-cms-review/
- Bejamas — “Craft CMS Review and Features” (updated 5/14/2025). https://bejamas.com/hub/headless-cms/craftcms
- Bejamas — “Magnolia CMS Review and Features” (updated 11/24/2025). https://bejamas.com/hub/headless-cms/magnoliacms
- Appmus — “Craft CMS: Features, Alternatives & Analysis (2026)”. https://appmus.com/software/craft-cms
- Appmus — “Craft CMS vs LiveJournal Comparison (2026)”. https://appmus.com/vs/craft-cms-vs-livejournal
Primary sources:
- GitHub repository and README: https://github.com/craftcms/cms (3,553 stars, Craft License)
- Official website: https://craftcms.com
- Documentation: https://craftcms.com/docs/5.x/
- Plugin Store: https://plugins.craftcms.com/
- Server requirements: https://craftcms.com/docs/5.x/requirements.html
Features
Integrations & APIs
- Plugin / Extension System
- REST API
Category
Related Content Management Tools
View all 124 →Strapi
72KThe leading open-source headless CMS — design content models, generate REST and GraphQL APIs instantly, and manage content for any frontend framework.
Ghost
52KProfessional publishing platform with built-in newsletters, memberships, and paid subscriptions. Used by Platformer, 404Media, The Browser, and thousands more.
Payload CMS
41KPayload is a Next.js-native headless CMS and application framework that gives developers full TypeScript control over content management with zero vendor lock-in.
Reactive Resume
36KA free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.
Directus
35KBuilt for developers who need more than a CMS. Manage complex content, handle digital assets, and control permissions through an intuitive Studio.
WordPress
21KThe world's most widely used content management system powering blogs, business sites, and e-commerce stores.