Honcho Agency Craft Cms Developers
Michael Westwood, Matt Ellis and Ben Hartley. Craft CMS Devs IRL.

There's a good reason why we're Craft CMS developers. Before we get into that — take a look at these stats:

According to w3techs.com data — there are a mind bending 617 CMSes powering the top 10,000,000 websites!

The top 10 looks like this:

Top 10 Cmses
Top 10 CMSes. Percentage of all websites on the internet in grey. Market share percentage in green. Source: w3techs.com

We’ve used our fair share of CMSes.

Six from the top ten list above — and perhaps another five or so from further down.

For the past three years one CMS has really stood out for us:

Craft CMS.

It may be far from the top of the popularity charts — but here’s a whizz stop tour of what we think is so good about Craft CMS — and why we believe it’s worth investing in.

A (very) brief history of Craft CMS

Craft CMS is built by software development company Pixel & Tonic.

Originally formed by Brandon Kelly — they gained recognition for creating a set must have add-ons for ExpressionEngine.

You’d be hard pushed to have built an ExpressionEngine website without using one of their brilliant add-ons:

  • Wygwam
  • Assets
  • Playa
  • Matrix
  • Field Pack

Then rumours started circulating that Pixel & Tonic (at the time just Brandon Kelly) was also working on a top secret side project: Blocks CMS.

There was unrest in the ExpressionEngine community as developers had begun to push back against decisions EllisLab (the makers of ExpressionEngine) were making with the CMS.

Ellislab Tweet About Competition Ethics Addons
EllisLab's tweet on competition and ethics.

The Blocks CMS name was a little uninspiring — but the premise of the creator of the best ExpressionEngine add-ons releasing a CMS to compete with ExpressionEngine was tantalising.

Blocks CMS was announced via Twitter in 2012 and soon after Pixel & Tonic published a blog to shed more light on their ‘little side project’.

Pixel And Tonic Tweet About Craft Cms
Pixel & Tonic's tweet about 'Blocks' – the CMS before it was called Craft CMS.

In March 2013 the official announcement came:

After 27 months of about 12,500 total man hours, 3,483 commits, three product strategies, 31 redesigns, 7 major architecture shifts, countless code refactors, one name change, and approximately 327 liters of consumed Jameson, it is my very great pleasure to introduce you to Craft. Brandon Kelly from Pixel & Tonic

The name change was due to legal implications — and that they felt they’d built something greater than they’d originally intended.

The CMS is for people who like to take their time and do things right. It’s for those of us who truly approach our work with the utmost skillfulness and craft. We craftsmen actually like writing every last HTML tag by hand, and we wouldn’t touch an off-the-shelf theme with a ten-foot stick. It’s for web agencies that strive to make their clients happy by delivering the best solution possible. And it’s for site owners, who just want a simple tool to keep their website updated with fresh content, without going up a steep learning curve. Brandon Kelly from Pixel & Tonic

We love the ethos — but it sure can make Googling support articles difficult.

“Craft websites”, anyone?

Craft Is Hard To Google
Googling for Craft can be tricky

As the popularity of Craft CMS grew, so too did the Pixel & Tonic team.

Brad Bell joined in 2010 as ‘Chief mixologist’.

We’re not sure what it means either ¯\_(ツ)_/¯

Then a slew of other top tech talent, including former EllisLab CEO, Leslie Camacho as CCO.

Pixel and Tonic – The real Craft CMS Developers!
With Brad Bell, Makeila Rose, Andris Sevcenko, Luke Holder, Tyler Radabaugh, Leah Stephenson, Brandon Kelly, Leslie Steven Camacho, Benjamin David and Sam Hernandez.

Unsurprising Pixel & Tonic sold all their ExpressionEngine plugins to EE Harbour — which allowed them to focus purely on Craft CMS.

Craft is currently on version 3 — and the popularity of the CMS has grown year on year since it’s original release.

Brandon shared stats in his State of Craft keynote from last year's Dot All conference.

You can check out his slides here.

Who uses Craft CMS?

In terms of popularity, BuiltWith tells us there are over 26,000 live Craft websites on the internet.

Some high profile Craft users include: Netflix, Intel, Sonos, Salesforce, Moz, Atlasssian, Reddit, Oakley and the Dalai Lama.

Companies That Use Craft Cms
Companies the use Craft CMS include: Reddit, Netflix, Intel, Sonos and even the Dalai Lama.

But what makes Craft CMS so good?

It’s difficult to pinpoint one exact thing that makes us want to be Craft CMS developers — but if we were pushed for an answer we’d boil it down to these 2 points:

1. Craft CMS makes no assumption about the content

At its core Craft CMS makes no assumption about what the site needs to do or be.

We’ve yet to find a situation where Craft CMS can’t easily give us exactly what we want on the front-end; something you may be unfamiliar with if you’ve ever used ‘theme builders’ on other CMSes.

Pixel & Tonic sum it up nicely on their website:

Build exactly what you want from the ground up, rather than wrestling with a pre-built theme.

The admin area takes the same approach too. It assumes nothing about what the content is or how it’s structured and simply lets us manage the content.

2. Built in features

Craft CMS comes with a solid set of built-in features.

Many of Pixel & Tonic’s ExpressionEngine add-ons were repurposed and built into the core of Craft CMS.

That means that there’s scope for achieving more of what you need to do natively — rather than relying on plugins to bridge a functionality gap.

But that’s not all...

A brilliant Control Panel

Craft CMS is not only brilliant for developers, but content administrators are taken into consideration too.

The beautiful Control Panel ensures a slick content authoring experience.

Setting up sites, changing settings and managing content is intuitive and… dare I say fun?

As you’d expect, the Control Panel is responsive and the mobile experience is beautiful on smaller screens. Craft 3.6 brought a huge focus on accessibility of the Contron Panel, where many aspects including icons and focus states were updated to make sure everyone can use the system.

It's a great feature for time-pressed content writers who have to create content on the move (or on the toilet).

For developers, the Utilities section of the Control Panel will regularly come in handy.

Craft Cms Control Panel
Craft Control Panel

PHP info is right there — as well as a report showing you whether your server is meeting all of Craft’s server requirements.

There’s even a Deprecation Errors page to flag up any issues you might have with future versions of Craft.

Author drafts

When writing content, an author can choose to save an entry as a draft rather than publish straight away.

Though in itself that's fairly standard, Craft CMS once again takes it to the next level, by offering change tracking.

This allows multiple authors working on drafts to merge in each other's changes, which is incredibly useful to make sure you don't overwrite your colleage's work.

Use the Matrix for repeating content blocks

The Matrix allows you to define repeating blocks of content within an entry — and each repeating block can be made up from one or more of Craft CMS Custom Fields.

A simple example of where to use a Matrix block is a web page showing team members in a company. You would set up a Matrix block with just the Custom Fields each team member needs:

  • Name
  • Role
  • Photo
  • Bio

Content authors can click the ‘+ Team Member’ button to add a new team member — and the correct Custom Fields would appear, ready to be filled in.

Matrix blocks can easily be rearranged. In the context of the team members page, promoting a person is as simple as dragging and dropping the blocks into a new order.

Re-ordering Craft content with the Matrix

But the Matrix really comes into its own when using multiple block types.

A simple webpage could have the following sections:

  • Text
  • Image
  • Testimonial

We’ll call these the Block Types.

Within each block type, we can define the Custom Fields it needs.

For example, the Testimonial block could have:

  • Testimonial
    • Name
    • Quote
    • Photo

And the Image block could have:

  • Image
    • Photo
    • Description
    • Photographer

With the block types defined, the content author can start to build up the page in the order that best suits the article.

The article could start with a block of text and then show a sequence of images. Or start with a Testimonial, move on to a block of text and then back to another Testimonial.

It’s totally up to you.

The Matrix gives authors freedom to create engaging content without them having to code HTML or paste in [shortcode]s.

The Matrix can be as simple or complex as you need it to be.

We’ve used it for team profiles and blog articles — right through to full landing page builders which allow authors to design complex pages from a set of content types like; image galleries, contact forms and videos.

Developers have complete control over the template markup and content defined in a Matrix block will output exactly the way you want it to.

Again, no more wrestling with pre-built themes or code.

At present it’s not possible to have a Matrix within a Matrix, however this is coming in Craft 4. Pixel & Tonic have published a Roadmap of upcoming features, which can be commented on and contributed to on their public Github.

Until then there are a couple of plugins that will do the trick.

Craft CMS Tip:

The Matrix isn’t just for entries. You can get creative and use Matrix fields in categories, tags, globals, assets and users too.

Edit images in the Control Panel

Editing images for websites can be a laborious task. The less time you need to spend in Photoshop the better!

Craft CMS's baked-in image editor won’t replace Photoshop — but does come with some handy editing tools:

  • Rotate
  • Flip
  • Crop
  • Focal Point

Set the focal point for mobile-friendly images

In the age of responsive web design, getting the image looking great across all screen sizes can be difficult and time consuming.

Previously, we’d need to create a different image crop for each screen size to make sure the main elements of the image were positioned in the right place.

It. Was. Tedious.

Craft CMS allows you to set the focal point, or gravity, on a single image.

In conjunction with Image Transforms, Craft CMS uses the focal point setting to resize and crop the image — keeping the main subject the centre of attention.

Build beautiful (data) relationships

Craft CMS makes it easy to connect and cross reference entries.

Need a ‘Related Blogs’ section? No problem.

Adding a set of Speakers to an Event? Easy.

Craft CMS’s handling of relationships is first class. You can even create new related entries from within the parent entry.

There’s no need to save, create a new entry, go back and add then add the new entry — it can all be done from the same place. A lovely feature and a great time saver.

Create content from within other entries with Craft CMS

Craft CMS Tip:

Editing lots of content? You can use a keyboard shortcut cmd + S on Mac or ctrl + S on a PC to ‘Save and continue editing’.

Preview your content before publishing it

Live Preview does exactly what you’d hope; it shows you a live preview of your content on the front-end of your web page — updating in real time as you add and edit it from the Control Panel. In Craft Pro, you have controls to change the viewport to mobile, tablet, and desktop views.

Preview content edits in real-time with Craft CMS Live Preview

Many other CMSes allow you to preview the entry before it’s posted — but I’m not sure if this has ever been executed as well in a CMS as is has in Craft.

It’s a killer feature — and one that usually gets an ‘oooh’ from clients when we demo it to them for the first time.

Custom fields for custom content

Custom fields are the backbone of a great and true CMS.

Content can come in many guises; text, images, video — and everything in between.

Out of the box Craft CMS comes with a healthy set of Custom Fields with which to build the admin interface your client will create their content with.

— Assets fields allow you to relate assets (such as images) to other elements.
— Categories fields allow you to relate categories to other elements.
— Checkboxes fields give you a group of checkboxes.
— Color fields give you a hexadecimal colour input with a preview of the current colour, and on browsers that support input type="color", clicking on the preview will open the browser’s colour picker.
— Date fields give you a date picker, and optionally a time picker as well.
— Dropdown fields give you a dropdown input.
Entries fields allow you to relate entries to other elements.
— Lightswitch fields give you a simple toggle input for times when all you need is a “Yes” or “No” answer.
— Matrix fields allow you to create multiple blocks of content within a single field.
— Multi-select fields give you a multi-select input.
— Number fields give you a text input that accepts a numeric value.
Plain Text
— Plain Text fields give you either a normal text input or a multi-line textarea, where plain text can be entered.
Radio Buttons
— Radio Buttons fields give you a group of radio buttons.
Table fields give you a customizable table, where you can create multiple rows of content.
— Tags fields allow you relate tags to other elements.
— Users fields type allow you relate users to other elements.

Customise the field layout for each section

To assign Custom Fields to sections in the Control Panel, Craft CMS provides you with an intuitive drag and drop editor to build up fields for different types of content your client needs.

In addition to being able to order the fields how you'd like, Craft CMS also allows you to add UI elements such as headings, tips, warnings, line breaks, and even custom templates to each section's field layout. This greatly enhances the authorship experience and makes sure admins understand how to create the content they need to.

You're also able to rename and add custom instruction text for each field depending on the section it's in. This can be useful if, for example, an image should be square in one section, but widescreen in another — you can change the instruction text without having to create two separate fields! Equally, you might want to have different field names for developers and authors, such as "Masthead -- no image" for developers, but just "Masthead" for authors.

Drag and drop custom fields into Sections.

From here you can also group information for the entry page into tabs. We often use one tab for the main entry content and one tab for the entry's SEO data.

It’s completely optional — but does help group content together in logical chunks.

Group content together in logical chunks – like 'Content' and 'SEO'.

Place content in the right place with Section Types

In Craft-land, content falls into one of four types:


Perfect for Homepage, About us and Contact pages. Basically, anything that’s a single page that doesn’t need to be ordered or have a date associated with it.


Channels are great for date based content like Blogs, News or Events.


Structures are for content that has to be in a specific order. Ideal for resource sections, people profiles, or services your business offers.

Structures can be hierarchical too — and are perfect for something like services, which might have sub-services below them.

It’s up to you how to organise the content — but the Section Types in Craft give you more than enough freedom to make it feel like you’re never shoehorning content into somewhere it doesn't belong.

Screenshot 2019 04 15 At 15 12 48
Create a new Section.

For everything else, use Globals

For smaller chunks of content developers can also set up Global fields which have a dedicated section in the Control Panel.

This is where you might add site wide setting that aren't necessarily part of an entry — such as the cookie policy popup text, your site logo or a favicon.

Multiple types of entries

Entry Types is a magical setting that can transform the way you think about creating content.

Each Channel and Structure can have multiple Entry Types — effectively extending or completely altering the type of content available within that entry.

Confused? Yes, me too at first.

Imagine your website needed a News section. Not uncommon. The most simple approach would be to create a News Channel and have one Entry Type called News.

Now imagine there are two different types of news; articles, and announcements.

You could create a new Announcments channel, but this doesn't feel like the right decision since they're both types of news.

This could be achieved with Categories. But where having a new Entry Type shines is that you can post Event and News in the same Channel and have a unique set of Custom Fields for each Entry Type.

The Announcements Entry Type could include the same or completely different custom fields as the News Entry Type.

Entry Types can have their own front-end template. The design, layout and content the visitor sees can change according to which one is being displayed.

It’s a flexible system that you can get super creative with. Add Categories and Tags into the mix and you’ll end up with several ways to build and administer content in a logical, easy to manage way.

Powerful, PHP-free templating language

One major factor that sets Craft apart from other content management systems is that it uses a templating language called Twig, rather than PHP.

There is no inline PHP allowed in the templates. This means that your templates stay beautifully clean, and any complicated logic is deferred to the Craft application.

Templates are easier for everyone to understand. It also prevents poorly written code from clunking up your site — an issue that can affect performance, security and maintainability.

To add your own custom PHP, Craft CMS allows you to easily extend its app by adding your own modules. To get started with this, we recommend nystudio107's pluginfactory.io, Double Secret Agency's Business Logic module, and the Craft CMS Documentation.

This might seem restrictive at first, but forcing developers to structure their PHP properly rather than dumping it into the template is great for the long term health of the project.

Organise front-end templates however you like

You can set up your Craft template folder structure however you want.

With the use of Twig’s include(), you can segment your templates up into reusable chunks. For example on the News page, you could include a news-preview partial.

This is a great way to keep coding DRY, reusable and maintainable.

Within Twig you can write macros, which are essentially little functions that generate bits of templates for you.

One of the macros we’ve written called navLink() generates the markup for a navigation link, so we only need to update it in one place.

{% macro navLink(params) %}
 <li class="nav__primary__item nav__item{% if params.active %} nav__item--active{% endif %} f_semibold">
 <a class="u_no-dec nav__primary__link" href="{{ params.url }}">{{ params.title }}</a>
{% endmacro %}

Having to write this every time would be inefficient and more likely to be inconsistent — thus saving us time and headaches!

Easy custom URL routing

Routes allows you to manually choose the URLs for all of your sections, eg: News article URLs should be /news/{article-title}.

That’s a powerful feature when you want your News Index to be called News Index in the Control Panel but you want the URL to be /news/.

Anything more complicated than that is super easy too.

You can set custom routes with a simple pattern matching system that can be done through the Control Panel or in the routes.php config file. It's also possible (and simple) to include variables in your routes.

We always recommend using routes.php because then everything is safely saved in version control.

For example, if you're building a property website, you could set up a custom route like so:

return [
 'properties' => ['template' => 'properties-index']

And you may then also want to pass a variable into your template:

return [
 'properties/<propertyid>' => ['template' => 'property-details']

which will expose the propertyid variable to the template, so you can use it like any other variable:

{{ propertyid }}

Really simple and super useful!

Multisite CMS from one Craft installation

Craft CMS comes with multisite straight out the box. You can run and manage multiple sites from one Craft CMS install but share data, templates and assets across them all. Boom!

We worked on a project for The Church of England which needed 20 individual sites, with different user access permissions, running on different domains — but they shared the same templates and themes.

Craft CMS's built-in multisite feature worked perfectly in this situation. There was no need for 3rd party plugins.

Multi-lingual support

Craft CMS's native multisite is also how multi-lingual sites can be created. You can set your (for example) French website to use exactly the same templates and entries as your English site, and use the language switcher within the Control Panel to write the French content.

One-click updating via the Control Panel

Craft CMS allows admins to update Craft and any plugins through the Control Panel with a handy update button.

A database backup is automatically created before performing any updates, and will automatically roll back if the update fails for any reason, so we have no anxiety around clicking update. This hasn't been the case with other CMSes.

Craft Cms One Click Updating Via Control Panel
Hit the button! One-click updating via Craft's Control Panel

...Or update from the command line

Whilst non-major updates can be installed with one-click through the Control Panel, you might not want to do that for a variety of reasons; testing, risk of failure, clients clicking it when you don’t want them to, etc.

Luckily, Craft CMS has a solution for this too.

You can update Craft — and any plugins — through the command line and disable the ability to update them via the Control Panel with a config setting.

Run ./craft update from the command line and it’ll list all available updates for your version of Craft.

Then run ./craft update all will update everything for you and save the changes into composer.json, so everything is stored in Git.

This means you can update locally, test everything out, then deploy to production and have the updates run as part of the deployment process.

Craft CMS Tip:

Migrating from Craft 2 to Craft 3? Check out our guide.

Storage for all your media assets

Assets are where you store the sites media — such as images, documents and videos.

When stored as Assets, items can be assigned to entries to populate the website content.

Like Section Entries, Assets can use Custom Fields to enhance and customise the information stored within the asset.

A video asset could have Director, Length, and Year Custom Fields assigned to it to help filter the entries on the front-end or in the Control Panel.

Individual asset sources can even have their own user permissions; helpful if you have a set of assets that should never be deleted by click-happy admins.

From a user administration point of view, the Assets drag and drop functionality is easy and intuitive to use.

Craft Cms Assets
Assets storage in Craft CMS

Craft CMS Tip:

Need more storage or want to keep your assets off the server? You can connect Craft to Amazon S3 with the Pixel & Tonic Amazon S3 plugin.

Image manipulation on the fly

In addition to the built-in Image Editor, there’s also a more programmatic way to manipulate images using Image Transforms.

Instead of forcing content admins to upload images at specific dimensions, Craft CMS lets you define custom image resizing rules.

Image Transforms let you set the final image output's width and height — along with whether the image should be cropped or stretched to get to the final dimension.

You can define where the crop should start from using pre-set parameters:

  • Top-Left
  • Top-Center
  • Top-Right
  • Center-Left
  • Center-Center
  • Center-Right
  • Bottom-Left
  • Bottom-Center
  • Bottom-Right

Image Transforms allow you to set the image quality on-the-fly; helpful when trying to shave off kilobytes from images to improve page loading speed.

The Image Format setting lets you specify the image output type as either JPG, PNG or GIF.

We’ve found this immensely helpful thwarting content admins who insist on uploading high-res photos saved as PNGs!

No matter what image settings you apply, the original image will stay intact on the server — so you’ll always have that available if you need to reuse it at a different size on the site.

You can also set a maximum image upload size in the site configuration, to prevent large photos from being uploaded in the first place.

Image Transforms can be defined in the Control Panel or directly in the code. We tend to take the latter approach so that the transforms (along with Routes) can be version controlled.

Craft CMS Tip:

We love Spacecat Ninja's Imager X plugin - well worth the licence fee - which adds more image transformation options into the mix. This combined with the image service Imgix is our preferred way to transform and serve images.

Multi-environment config file

An overlooked but incredibly important and powerful feature of Craft CMS is the use of an environment file.

The environment file lets you specify things like database settings, site URL, and API keys for third-party services.

The important point here is that settings in this file will be environment-specific.

One developer’s database settings will be different from another’s, which will be different from the staging site — and should definitely be different from the production site.

Keeping these settings in an environment file eliminates the need to edit app files directly on the server, reducing the risk breakages due to human error.

Because environment files are not stored in Git (they shouldn't be, anyway!), it’s also an added security measure as your passwords aren’t saved anywhere but your own computer.

It also has the added bonus of reducing Git conflicts and developer headaches, if, for example, Alice prefers to develop on example.local, but Bob prefers example.dev.

Keep projects in sync across different environments

One of the biggest headaches with any CMS is keeping development and production databases in sync.

Craft CMS has solved this issue perfectly by having a Project Configuration file (project.yaml), which saves the structure of the project, without saving the content.

The Project Config allows us to keep in sync:

  • Asset volumes and named image transforms
  • Category groups
  • Craft and plugin schema versions
  • Craft edition
  • Email settings
  • Fields and field groups
  • Global sets
  • Matrix block types
  • Plugin editions and settings
  • Routes
  • Sections and entry types
  • Sites and site groups
  • System name, time zone, and status
  • Tag groups
  • User settings and user groups

The Project Config can be deployed directly when going to production. By clicking the “Sync Changes” button in the Control Panel the database is then updated according to the project config data.

This saves us loads of time.

The previous option was to either tell clients to not make any changes while we develop (content freeze!) — or to manually replicate any database changes we made when adding a new feature (hassle, prone to error).

It also means the project config can be checked into Git, so Alice and Bob can both develop without having to email or Slack their database to each other.

Craft Cms Sync Changes
A "Sync Changes" button appears after config deployment.

Craft CMS Tip:

You can also sync project changes automatically on deployment, with the command ./craft project-config/apply or ./craft project-config/rebuild if you need to rebuild from scratch.

Logically group content with categories and tags

Categories and Tags help keep content organised.

Set up as many Category Groups as you need and then apply Categories to any element (Entries or Assets) with a Categories field.

In a similar fashion, Tag Groups can contain their own unique set of tags — which can be created on the fly from a Tags field.

Using either or both together — Categories and Tags are a powerful and logical way to group content into meaningful sets.

Users, User Groups & Registration

On installation Craft CMS sets you up as an Admin with full permissions to do everything you’ll need to as the site creator.

If more people need access to the Control Panel you can set up and assign them to User Groups and give Users specific Permissions.

Users within User Groups share the same permissions and can be updated en masse. Permissions, on the other hand, allow you to fine-tune individual Users access.

You can also decide which users can see which Globals, to avoid a client accidentally changing important settings.

Craft user permission are extensive and incredibly flexible.

  • Access the site when the system is off
  • Access the CP
    • Access the CP when the system is off
    • Perform Craft and plugin updates
    • Access [Plugin Name]
  • Edit users
    • Register users
    • Assign permissions
    • Administrate users
  • Delete users
  • Edit [Site Name]
  • Edit entries
    • Create entries
    • Publish entries
    • Delete entries
    • Edit other authors’ entries
      • Publish other authors’ entries
      • Delete other authors’ entries
    • Edit other authors’ drafts
      • Publish other authors’ drafts
      • Delete other authors’ drafts
  • Edit [Global Set Name]
  • Edit [Category Group Name]
  • View [Asset Volume Name]
    • Upload files
    • Create subfolders
    • Remove files

Front-end user registration forms

Public Registration is off as default — but if required visitors can self register as Users through a front-end form.

The User Group and Permissions can be assigned on form submission — making Craft perfect for membership sites, guest posting opportunities and member-only content.

Keep developer teams in sync using Composer

With other CMSes, plugins were a big mess of unsorted ZIP files downloaded from various unmanaged places on the internet and then uploaded to the server.

This nightmare is over with Craft CMS.

The CMS itself, any plugins you’re using, and their dependencies are all managed through Composer.

The version-controlled composer.json knows the exact version of Craft you're using, and the exact version of any plugins you're using.

All your dev team needs to do is run composer install from the command line and composer will download all the correct bits and bobs you need.

Again, no more sending ZIP files to fellow developers. Yay!

Craft Cms Composer
Composer + Craft CMS, FTW!

Graph QL and Headless Mode

Out the box, Craft CMS has full support and functionality in place to use Craft as a headless CMS.

Through the CMS's Graph QL area you can test queries, and create access tokens and schemas for security.

This is super useful if you're creating a project with a JAM Stack approach, as your database and content is decoupled entirely from your front end code.

Craft Cloud

Though Craft Cloud isn't released yet, we're keeping an eye on their blog for updates.

The idea is that you could pay for a subscription to have all your database and content managed on the Cloud, and use Graph QL and Headless Mode to access the data in your JAM Stack project.

This will certainly make hosting less complicated!

Dev Mode for testing and debugging

When Dev Mode is enabled, Craft will react slightly differently and makes developing with the CMS even easier.

With Dev Mode on, if there’s an error in your Twig template code, Dev Move will display a full stack trace in the browser showing you what’s gone wrong and where abouts.

Dev Mode will display PHP errors and exceptions, template syntax errors and extra logs will be created in the craft/storage/runtime/logs folder to help you work out what’s going wrong and how to fix it.

Dev Mode is on by default.

You’ll know it’s active by seeing a strip of construction tape along the top of the Control Panel.

Craft Cms Dev Mode
Construction tape along the top of the Craft CMS Control Panel means you’re in ‘Dev Mode’.

Craft CMS Tip:

Dev Mode should always be turned off for production environments.

Error messages look ugly to visitors — and the full stack trace could potentially expose a vulnerability to visitors with malicious intent.

We set Dev Mode on or off automatically depending on if we're in production or not with 'devMode' => getenv('ENVIRONMENT') != 'live'. This helps us reduce human error.

Further Reading

Super helpful Yii Debug Toolbar

Craft CMS is built on the Yii PHP framework and baked into Craft is the Debug Toolbar.

By the flick of a user preference, the Debug Toolbar can be configured to appear at the bottom of the browser window of your Craft CMS site — whilst viewing the Control Panel or the front-end.

It shows statistics and information about the page you’re currently viewing — including:

  • Timeline
  • Block and macro rendering time
  • User
  • Router
  • Requests
  • Logs
  • Deprecation Errors
  • Database Queries
  • Memory Usage

You can drill down into each set of data to see more information to help debug your site.

Or use the data to streamline your page loading speed by seeing where the database queries are coming fro, and where performance bottlenecks are.

Craft Cms Yii Tool Bar
Show the Yii debug toolbar on the front end.

Plugin Store one-click installation

Admins can install plugins directly from the Control Panel using Craft’s built-in Plugin Store.

There are over 370+ plugins to enhance Craft’s functionality and integrate with 3rd party services like Stripe, Mailchimp and Amazon.

Plugins range from Free to $99. With the exception of Pixel & Tonic’s own Craft Commerce plugin at $999.

Plugins are available in the following categories:

  • E-commerce
  • Templating
  • SEO & Accessibility
  • Performance
  • Security
  • Control Panel
  • Forms
  • Fields
  • Widgets
  • Assets
  • Utilities
  • Mailer Adapters
  • Social Networking
  • Integrations
  • Development

You can see the full list of plugins on the Craft Plugin Store page.

Craft CMS Tip:

Try before you buy! As long as you’re running the site on a domain Craft does not consider to be public you’re free to try plugins out before shelling out hard cash for them.

Craft has it's own development environment: Craft Nitro

Though you can run Craft CMS with whatever development environment you want — MAMP, Vagrant, DDEV, or a custom LEMP stack — Pixel & Tonic also have a dedicated Craft option for you called Craft Nitro.

Powered by Docker, Craft Nitro will get you up and running without hassle and make developing with tools such as Redis and PostgreSQL a breeze.

Craft is brilliant for SEO

The fact that Moz use Craft CMS for their website should tell you pretty much everything you need to know about how good Craft is for SEO.

Out the box Craft assumes nothing — even when it comes to how you roll your SEO.

Because you mark up template HTML you have complete control over the onpage SEO.

There are typically two approaches you can take: 1) Install a plugin or 2) create your own SEO custom fields.

The two main protagonists in the SEO plugin camp are SEOmatic and Sprout SEO. They’ll both do the leg work for you in terms of creating the core set of SEO fields you’ll need.

We’ve used SEOmatic several times and have been impressed with the depth of options available.

Our base Craft install includes an SEO tab with the following fields set up and ready for content.

  • Meta Title
  • Meta Description
  • Social Image

These work in combination with the SEO Global defaults that we also have in our base install. The Global content display conditionally depending on if the SEO entry fields have been filled in or not.

The SEO Globals include Geo Location and Social Media accounts — which allow us to output Open Graph data to the templates.

Thanks to the default Asset fields it’s easy to output image Alt and Title Tags (another SEO win).

Routes should get another mention here too — as adding keywords to your sites URLs is simple with Craft and is just one of the many (alleged!) Google ranking factors.

Craft CMS is secure 🔒

Simply put — Pixel & Tonic take security seriously and as far as we’re aware there’s been no reported security incidents.

Off the back of a detailed StackExchange answer about Craft CMS security, the team wrote a Security Q&A post which follows on and expands from Brad Bell’s (Pixel & Tonic CTO) StackExchange post.

Further Reading:

Also see the Securing Craft Guide: a guide to making your Craft installation secure.

A community of Craft CMS developers

The growing Craft CMS community is one of the most talented groups of developers we’ve ever come across.

There’s a regularly updated list on the Craft CMS Awesome page where Craft peeps go.

Some of the most frequented Craft CMS developer community hangouts are:

Craft CMS Conference:

Pixel & Tonic put on a Craft CMS developer conference each year called Dot All Conference.

Host Craft CMS everywhere

With the increasing popularity of Craft CMS it's inevitable that hosting companies have started to offer Craft CMS specific server setups - including:

There are also guides for setting up Craft on:

We’re currently using DigitalOcean servers — which have been fast and reliable and easily meet the Craft server requirements.

How much does Craft CMS cost?

Craft originally came in three pricing bands:

  1. Personal (Free)
  2. Client ($199)
  3. Pro ($299)

But since Craft 3 this has been simplified to just two tiers:

Solo — FREE

For when you’re building a website for you or a friend.

  • All core CMS features
  • Single admin account

Pro — $299 Per Project

For when you’re building something professionally for a client or team.

  • Unlimited user accounts
  • System branding features
  • Developer support
  • Includes one year of updates
  • $59/year for updates after that

Just like plugins, the Pro version of Craft can be tried before buying as long as your not developing on what Craft considers to be a public URL — it will let you test on URLs such as localhost,, mysite.test, etc.

Upgrading from one version to another is done in the Control Panel. It’s a simple process — click to upgrade and then enter your (or your clients) payment details.

There’s also the option to create a Craft ID account which connects to a separate website where you can view your order history and manage your Craft and plugin licenses.

Try the Craft CMS demo

If downloading and installing Craft locally seems like too much effort to test it out — there’s a Craft CMS demo you can take for a spin.

Enter your name and email and Pixel & Tonic will automatically spin up a full featured installation for you to try out.


Limitations, downfalls and criticism of Craft CMS

There’s a lot to love about Craft — but it does come with (and it would only be fair to mention) some caveats.

Craft is not free

This is usually the first reservation developers have about trying Craft CMS.

In a world of open source CMSes it does seem a tough pill to swallow — especially if you’re a lone freelancer.

But for the amount of functionality and features — and if you’re pricing projects correctly — IMHO the fee is nominal.

You can think of the licence fee as a guarantee that Craft CMS will continue to be actively developed by a first-class team of developers and a passionate community.

PS: If you think $299 is expensive for a CMS you should check out SiteCore's pricing!

Craft Cms Sitecore Price
Brandon's post on the Craft community on Discord about a $1m A/B test on SiteCore.

It can be a steep learning curve

Getting your head around Craft’s Section and Entry Types can be daunting. It’s a different way to approach content than many other CMSes.

Due to Craft’s flexibility, there are similar ways to achieve similar outcomes  —  but finding the best way is something only time and experience (or Googling) will tell you.

Developers coming from CMSes where you can just paste in PHP wherever you feel like it may struggle with Craft CMS's rigid structure for adding modules, but it's for the greater good of code quality and maintainability.

You could be effectively learning Craft and Twig for the first time at the same time.

The documentation can be confusing — especially when you’re unsure if it’s a Craft or a Twig issue you’re searching for — though the docs are definitely improving.

It has a smaller developer community than other CMSes

The Craft CMS StackExchange community currently has 6800+ users — which is dwarfed compared to the 124,000+ users in the WordPress StackExchange group.

We’ve had clients specifically request that we do not use Craft.

Being the only Craft CMS developers they knew — they were fearful of not being able to find replacement developers if Honcho fell off the face of the internet.

I did point them towards the StackExchange and Slack groups to give them confidence in the growing communities of Craft CMS devs — but it didn’t help swing the deal.

For reference, the top CMS based StackExchange’s are:

  1. WordPress — 124,000 users
  2. Drupal — 57,000 users
  3. Magento — 56,000 users
  4. Joomla — 7400 users
  5. Craft CMS — 6800 users
  6. ExpressionEngine — 5900 users
  7. SiteCore — 4800 users

Not bad considering Joomla has been going since 2005.

Lego vs Craft CMS

Just for context (and the fact that I love Lego) — ‘Bricks’ the question and answer site for LEGO and building block enthusiasts has 8,000 users.

The Craft community may be comparatively small — but as mentioned earlier in the article — it is mighty.

Members of the StackExchange group answer 91% of all questions posted there, compared to 72% on the WordPress StackExchange. (Source: StackExchange)

The Official Slack group (recently ditched in favour of Discord) has over 7600 members who have collectively sent over 1,600,000 messages.

That’s a lot of cat gifs!

Lack of Plugins

The plugin ecosystem is infinitely better now than it was before Craft Version 3 with the addition of the Official Plugin Store.

But with ‘only’ 500 plugins available it does look like a ghost town in comparison to the 54,000+ plugins available to WordPress users.

Two reasons for this could be

  1. Craft does more out of the box than WordPress, so fewer are needed.
  2. A more developer-based community may just write their own custom modules without publishing them.
  3. That same developer community could mean people contribute to open source plugins - rather than write their own - so you don't end up with 10 plugins that do the same thing!

Lack of themes

Craft doesn’t come with themes in the same way other CMSes do.

There’s no theme installer or theme switcher.

Craft is very much geared towards developers creating their own bespoke front-end templates — which harks back to Craft’s philosophy:

For craftsmen who wouldn’t touch an off-the-shelf theme with a ten-foot stick.

But... is Craft CMS better than WordPress?

As you can hopefully gauge from this article — we’re big fans of Craft.

But no article about the CMS would be complete without at least attempting to answer everyone's burning question: is Craft better than WordPress?

Craft CMS vs Wordpress

I’m sure this argument discussion will run until the end of the internet. There’s already been a tonne of 'Craft CMS vs Wordpress' articles written already..

But for what it’s worth — here’s our 2p on the topic.

DISCLAIMER: We use WordPress — and Craft CMS (and ExpressionEngine too).

Plugin Mentality

We’d never attempt to build a WordPress site without Advanced Custom Fields.

Straight out the box we’re relying on a third party plugin.

In Craft CMS, Advanced Custom Fields type functionality comes built into the core courtesy of the Matrix.

It’s more than likely that you’ll use plugins on a Craft CMS build — but I believe there’s a different mentality to plugin use in the WordPress development world.

Rather than taking a step back and asking what tool is right for the project — WordPress developers ask: “What plugins can I use to make WordPress behave like I need it to?”.

When a client asks for new functionality on a WordPress site — the immediate response is often: “is there a plugin for that?”.

“Is there a plugin for that?”
Every WordPress developer ever

We’re guilty of this too.

There’s nothing wrong with plugins — in fact they’re a good thing! They’ll save you development time and effort, as well as making you part of the open source community on the internet.

But the problem is when you have to rely on using plugins to make a CMS behave how you need it to.

For even simple CMS functionality in WordPress you can soon end up swimming in a deep murky sea of plugins.

WordPress was developed as a blogging platform — not a CMS.

But if you throw enough of the 54000 available plugins at it - you can cover up its lack of functionality, bloated and outdated code base  —  and it'll masquerade as everything and anything it was never really intended to be.

WordPress security

The more plugins you rely on — the more susceptible you’ll be to the unsettling array of poorly developed and maintained WordPress plugins.

Poorly developed plugins can lead to security issues — and security issues can lead to hacks — which is one reason why WordPress is the most hacked CMS in the world.

90% of hacked CMS sites in 2018 were powered by WordPress

If you’re planning on using WordPress and you’re not a developer — then you’ll need to factor in the cost of regular maintenance to keep your website and plugins up to date and out of harm's way.

Remember the Mossack Fonseca data breach — aka The Panama Papers leak a few years ago?

Thousands of confidential financial documents were stolen and exposed to the public.

That allegedly happened via an out of date WordPress plugin.

To date, there have been no reported security incidents with Craft.

Functionally vs Plugins vs Cost vs Sanity

There are some fantastic – and brilliantly developed – plugins for Wordpress: Advanced Custom Fields for example (most likely an inspiration for the Matrix). Yoast SEO and Ninja Forms too.

But even though WordPress is open source and free — the cost of plugins you’ll need can soon add up.

You’ll definitely want to use Advanced Custom Fields.

But what about contact forms?

Proper caching?

Search and filtering functionality?

Membership login areas?

You’ll most likely need paid plugins for all those.

This is partly why the price of Craft doesn't bother us. The missing functionality listed above (and more) comes as standard with Craft CMS.

The Craft CMS plugin landscape may have a fraction of the number of plugins available — but with good reason: what you can do out of the box is vastly more than you can with a WordPress site.

From our experience so far the quality of the plugins from the Craft CMS community is brilliant.

The BYO front-end approach cascades down into Craft plugin-land.

Customising the output is easy — rather than going through the familiar WordPress dance:

  1. Search for plugin
  2. Install plugin
  3. Test plugin
  4. Uninstall plugin
  5. Cry
  6. Repeat

All whilst trying to find the elusive solution that:

  1. Does what you need it to
  2. Works on WordPress Version 5.0 and
  3. Is still supported and maintained by the developer

WordPress decline

Wordpress powers 30% of the internet.

But according to Google Trends — the Google tool that visualises search terms — WordPress is on a steady decline… and has been since 2013.

Wordpress Decline On Google Trands
The decline of interest in WordPress since 2013.

If a client is just looking to clothe the site in a generic theme for a run of the mill blog — then there’s absolutely no reason not to use WordPress.

But if they need something more bespoke — more flexible, with a custom design — and an admin experience tailored to the way you need to administer content — then you owe it your clients and their business to try Craft CMS.


Matt Ellis Honcho Sm No Bg Matt is a Craft CMS developer

Need a Craft CMS developer for your project?

Arrange a discovery call with Matt.

Speak with a Craft CMS expert