Eight years, hundreds of web projects, and a dozen content management systems later, NMC has largely standardized on three options: Drupal, Wordpress, and our own HiFi. The two open source options are popular, stable, mature, and boast active development communities while we've worked hard to make HiFi flexible, powerful, and intuitive. We've made a whole bunch of sites with each and our clients like them. So why write about how we just started working with another CMS? Because it's really great. Like, I'm-about-to-write-3000-words-about-it insanely great.
Meet Craft CMS. It's sublime. We've used it on a few projects now and more and more, we want to use it for all the things. We just finished a big, custom eCommerce Craft website that would have been a nightmare with most any other CMS. But Craft let us spend more time delighting the client and less time fighting software. We delivered a better product, in less time, and with less effort. The client couldn't be happier. What’s not to love?
Craft is powerful and flexible enough to replace the need for either Wordpress or Drupal (which means less code to support), beautifully designed, easy for clients to learn and use, and a pleasure to build sites with. Beyond that, we like it because it’s modern, well-supported, actively updated, easy to deploy, easy to extend, and has built-in core features that would normally cost an arm and a leg in extra add-on fees for other CMS’s. I could go on and on. In fact, I'm about to:
7 Reasons to Love Building Websites with Craft
1. Consistent, Thoughtful Design
As a professional services agency, the products and solutions we provide our clients have to do more than just solve a problem, they should also be a delight to use, easy to learn, and fast to respond. Everything about Craft feels high-end: from its marketing site, to the custom illustration of its installation process, to its clear, elegant documentation pages, to the beautiful, responsive, total-lack-of-unnecessary-UI-chrome of its control panel, Craft's design and aesthetic is refined, consistent, and attractive. Attractive things work better. Less clutter means a shorter learning curve for clients.
Design isn't just aesthetics, though. Craft's control panel is sensibly divided into section types such as Singles (like the Home or Contact pages), Channels (anything that represents a feed of entries, like a blog or photo gallery) and Structures (ordered pages with an explicit hierarchy, like a site map). Assets like photos and videos get lovely grid and lists views and because they can be assigned custom fields, it’s easy to add data like location and caption. Together with the extraordinary Live Preview — which shows content changes on the page in real-time — publishing content is no longer a chore to be avoided.
Oh, and did I mention the control panel is responsive by default and has been localized into 16 languages? Now they're just showing off.
2. Exceptional Core Features
Craft is packed with features that normally would cost a small fortune in 3rd-party add-ons:
First and most important is Matrix, which allows for virtually unlimited flexibility in laying out complex web views. The Craft website has a short video describing it and A List Apart has a great feature on “long-form content” using it.
The rich text editor, Redactor, is best-in-class and easy to extend and customize. It makes it really easy to give clients the tools to edit content using the right brand-consistent CSS styles.
No need for a separate plugin to re-size uploaded images: it’s easy to apply transforms. You can set up some in advance or just make it up in your template on the fly.
“Relationships” are hard to do well in a CMS: they’re a kind of reverse-lookup for entries. The docs do a good job explaining how they work but don’t really tell the tale of how powerful and useful Craft’s implementation is. The fact that I can set “Entries” as a field-type that populates a drop-down with all the entries for the client to select is amazing.
It’s hard to imagine how you lived life before global custom fields. If you come from an ExpressionEngine background as I do, you know the pain of having to re-create identical fields for each channel / section! With Craft you can create some sensible defaults once and share them among all entries, adding only custom ones as necessary. Also, 18 different fields by default? Awesome.
Again, coming from an ExpressionEngine background, tags are not built-in as a first-party implementation (though there are a few really good plugins for it). Craft’s tags are built-in, can be created by clients dynamically, and are easily editable if you make a mistake.
Managing users in a CMS is typically a giant pain because they’re designed separately from the content itself. In Craft, because users are just another kind of entry in the system, they can be manipulated in templates like any other data object with the same syntax.
Did your site get fireballed and shut down? Or maybe your e-commerce site has a million visitors a day? Either way, you’ve got some serious image-serving needs, friend. And rather than deliver all those assets from your own web server, potentially racking up a ton of extra charges, or forcing you to pay for or create your own plugin, Craft lets you easily use a CDN like Amazon’s AWS, Rackspace, or Google Cloud Storage right from the control panel.
Craft’s drafts and entry-versioning approach is all you could ask for: when you save an entry, you can include a comment about those changes for the next editor and easily roll back to earlier versions.
Finally, Live Preview has to be seen to be believed — it really feels like the future. No more training clients to keep two tabs open and showing them how to edit, save, switch, refresh, lather, rinse, repeat.
3. Rapid Pace of Development
It’s nice to know that there’s a committed team of professionals constantly working to update the product. Browse the Craft Updates page and you’ll see that they’ve maintained a blistering pace of new features, bug fixes, and refinements. The team is incredibly responsive to support requests: send a tweet or post on the official help forum and you get replies right away.
Craft's developers have been able to accomplish so much in a short time because they made some smart decisions to off-load development of some of the underlying plumbing to other smart teams. For example, the PHP framework they used to write it (Yii) and the software package that powers the templating language (Twig) are modern, robust, popular, and themselves rigorously maintained and upgraded by other independent teams. Craft's developers avoid the overhead of developing all that foundation code themselves and instead focus on really improving their own product. Plus, whenever Yii or Twig gets updated, Pixel & Tonic can roll it into the latest Craft version, giving access to the new features to developers like us. The result is like having a much larger company but with smart employees... who work for free.
Good Code Libraries == Smart, Free Employees
It doesn’t just end with Yii and Twig, though. Craft includes a number of other 3rd-party libraries that are frequently updated and that make Craft such a terrific product. Excellent libraries like:
jQuery UI, Timepicker, Placeholder, & File Upload
Redactor
Velocity.js
Guzzle
Imagine
SimplePie
PEL Library
Mockery
PHPMailer, PHPUnit, & DBUnit
4. Top-notch Support & Educational Resources
New software can be challenging to learn. With Craft, there’s no shortage of places to go to ask for help, look up an answer, or even watch a video tutorial:
Official Documentation
Official Support Forum
Mijingo’s Screencast Tutorials
Friday Craft Live Chat
If you’re just getting started, I recommend Jerome Coupe’s excellent beginner’s guide and Jake Chapman’s project boilerplate. Pixel & Tonic’s Brandon Kelly has a superb comparison of the difference in templating between ExpressionEngine & Craft and, of course, you can always hit up the #craftcms hashtag on twitter to ask questions and follow the latest.
4. Vibrant 3rd-Party Developer Community
When a lot of people are excited about making plugins for your software, it’s a good sign of the health of the product. A good ecosystem is essential for supplementing the software’s core features and makes the original more valuable (think Apple’s App Store). For being a relatively new CMS, there’s a ton of great, high-quality, and useful plugins available. And while there’s not (yet) an official plugin store or repository, the Straight Up Craft Plugin Directory is pretty close. Some of our favorites include:
Directory provides access to Straight Up Craft so you can browse and install plugins directly from the control panel
Charge is perfect for integrating Stripe for one-off payments and donations
Import allows you to import data from CSV files and map it to Craft fields
Typogrify prevents ugly apostrophes and widows
Control Panel CSS gives you easy access to styles to modify the control panel
Pimp My Matrix lets you sort Matrix block types into groups
Sprout Forms makes it easy to create multiple forms
Redactor Clips adds the “clips” plugin to insert predefined code snippets
5. Sensible Pricing
The free version of Craft, called Personal, comes with one user, one channel, five singles, and will be plenty adequate for a large majority of sites. Having a totally free-for-life version is great not just for clients’ pocket books but also for developers who want to download the software for their own use and learn how to develop with it.
There are two paid tiers: Client for $199 and Pro for $299, both exceptionally reasonable (especially if you’ve had clients paying $10,000+ per year per computer for a Microsoft license). The really great thing is you can use the Client or Pro versions for free when developing: if your local web development environment contains “craft.dev”, you’ll see a link in the footer to unlock all the features. Add as many subomains as you want, like site1.craft.dev, site2.craft.dev, and you can extend it indefinitely. Then, when you’re ready to deploy to production, you can pay for the commercial license (or bill the client!).
6. Easy for Web Developers to Implement & Deploy
It’s not just our clients that like it — Craft makes our lives as developers easier, as well:
Twig
At the heart of any CMS is how to fetch & display data from the database. Every CMS uses a different templating language and they are certainly not all created equal. ExpressionEngine, for example, has a simple and powerful syntax using {exp:channel:entries}. For all Wordpress’s strength, it altogether lacks a template language: developers just write raw PHP in the templates and even simple things like repeating calls to the Loop requires disappointing kludgy workarounds. A good CMS should abstract away the database call with simple, predictable, and flexible syntax.
That's where Twig comes in. You’ll hear a lot of developers sing its praises and rightly so. It’s powerful, concise, and expressive and supports all manner of cleverness like performing math calculations and text manipulation filters like upper and slice. Perhaps its best known and most useful feature is how it can extend one template from another, replacing selected regions of content and easily setting variables for use in either one. (And don’t forget macros! They’re like reusable bits of code that will seriously make your life easier.)
It does take a little getting used to but its appeal is undeniable: take a look through Twig’s examples and you’ll see what I mean. Craft’s creator, Brandon Kelly, has a nice starter guide called Twig for Designers and the Craft documentation includes a handy Twig Primer.
Multi-Environment Configuration
This is so killer. Web developers typically work on websites on their own computers, usually called “local”. Then they push the site — with the database — to a test server, known as “staging”. Assuming everything is copacetic, they deploy the site to “production” where it’s visible to the world. Normally, keeping track of all the settings as the site moves from spot to spot is a gigantic hassle. But Craft feels our pain and combines all the differences into a single configuration file. No muss, no fuss.
Dev Mode
Craft allows developers to set a flag in the configuration file so that the system knows it's under active development. The Dev Mode provides a whole suite of useful information and functions:
PHP errors and exceptions will be reported in the browser window, with a complete stack trace and code previews
Template syntax errors will be reported in the browser, with a preview of the offending template
Craft will log the database queries, POST data, active cookies, and active session variables to craft/storage/runtime/logs/craft.log
Twig’s dump() function will be enabled
Also, developers can export the database with one click (it's stored in craft/storage/backups/).
Easy Plugins
Last but not least, Craft’s plugin architecture is transcendent, which comes as little surprise inasmuch as the makers of Craft started as pro ExpressionEngine developers. (My guess is they saw Craft as an opportunity to make a CMS that made it as easy as possible for people like themselves to write new plugins.)
Craft makes all of its core services available to developers so that it’s easy to extend the functionality: for example, if one of the 18 field types that Craft comes with isn’t enough, plugins make it easy to add another. The class reference is sensible and straightforward which means that you don’t need to be a back-end developer to supplement your project with extra functionality. The ease of plugin development is no doubt a large part of why there are so many good ones.
7. One-click Updating
‘Nuff said.
Bonus Reason: Smart People Like It
You know, great minds and all that:
Happy Cog: “Add new fields on a shared development server, download the database from the admin panel, then update your local database. Easy breezy.”
A List Apart: “I use the Matrix field to drive longform content on my own site, and you can see how much flexibility it gives me to create interesting layouts filled with images with captions, quotes with citations, and more.”
Taecho Group: “The range of built in field types cover nearly every content scenario.”
Made by Kind: "Craft’s clean and flexible templating system allows us to then output that data exactly as we wish, allowing us to achieve very the highest level of interface polish."
Viget: “[W]hile you are creating an entry, you can click on Live Preview to bring up a split-screen view that lets you edit and view your changes as you type. You can also generate shareable URLs so others can view the entry as it would appear on the page before publishing it.”
Matt Wilcox: “Craft doesn't assume you'll be wanting a blog, or that you'll want to work in one particular way. It just provides a really solid, flexible, intuitive, and well documented set of tools to let you build your own thing.”
And Yet, No CMS is Perfect
Just because we’re big fans — and excited about Craft’s potential — doesn’t mean we’re oblivious to its shortcomings. Here’s how we think Craft could improve:
Multi-site Manager
ExpressionEngine has had a multi-site manager for years; it allows you to run the same CMS across multiple domains. This means clients only have to manage one login for several properties and is relatively rare as far as CMS’s go. I’ve heard that they’ve considered it; in fact, early versions of Craft had this functionality but that it proved to complex and buggy. Maybe some day soon! But as it stands, you need one license per domain and multiple logins.
Official Plugin Directory
The Straight Up Craft directory is good but an official one from the makers of Craft would be even better. There are rumors it’s in the works — not just an official plugin store, but one that’s built into Craft’s control panel where you can browse, buy, and install right from the dashboard. Popular developer of Craft plugins, Dukt (he of the Plugin Directory, um, plugin) was recently hired to work for Craft full-time — probably to work on this.
E-commerce Plugin
This is the big one! Though to be fair, this is no flaw of Craft itself. But for software as powerful and easy to extend as Craft, it’s surprising that there’s no great, go-to e-commerce and shopping cart plugin yet (we wrote our own for Fleet Feet Sports). There are some developers actively working on a solution but it’s not available yet and as it is right now, developers are limited to one-off charges or integrating 3rd-party JavaScript solutions like SnipCart or FoxyCart. My wish? Something like Expresso Store for Craft!
We Think You'll Be Crazy About Craft, Too
NMC knows a thing or two about CMS's: in fact, that’s how it all got started. Waaaaay back in 2006, two of NMC's founders developed one while completing computer science degrees that was so promising they were awarded seed money to start a company around it. That software eventually became HiFi, our in-house CMS, which currently powers more than 500 of our clients' websites. The right CMS can make a big difference.
That's why when it comes to technology, we think a lot about what we use and recommend. Wordpress and Drupal are common in our law firm websites and non-profit website markets, respectively, and a few years ago we used to use ExpressionEngine (that’s for another blog post). Multiple CMS competence is a lot to keep up with so most firms specialize in a single one to reduce overhead. When Craft came along, the initial idea of trying out Yet Another CMS wasn’t super attractive.
But once we started using Craft, we want to use it more and more. Craft’s developers have done an exceptional job balancing the right combination of power, simplicity, and flexibility. Good CMS’s are hard to find! If you haven’t tried it out, definitely give it a shot — you can even give it a spin with a live demo site to fool around with. If you have, what’s been your experience with Craft? Let us know in the comments.