For the past year, I have been testing a few headless CMS’s, like Strapi, Contentful, and GraphCMS, in order to find the "right" one. Even headless WordPress made the list, but the one that stood out to me, in the end, was Directus 9 – so let’s give it the attention it deserves.
Directus is an open-source data platform. It currently has 12.2K Github stars, which is a lot less than some other CMS’s. That doesn’t necessarily mean its quality is worse, it just means there’s more hype around the other CMS’s. So don’t let the Github stars fool you.
Directus wraps any SQL database with a real-time GraphQL+REST API and an intuitive app for non-technical users.
Basically, it's a headless CMS that supports SQL databases. Nothing special in 2021, but let's talk about what makes it special.
When you first install Directus 9 and start using it, you might get a feeling it’s a very mature product, even though you have just heard of it. That’s because Directus actually has a relatively long and interesting history. And that’s why I'm calling it Directus 9, and not just Directus. Directus 8 and all the versions before it, were entirely different applications. Although they all do the same thing, they were written in PHP, like the Zend framework, for instance, while Directus 9 is a Node.js application.
Since the Zend framework became outdated, and they wanted to test it out in Node as well, the Directus team decided to transport it to the Laravel framework. The Node version turned out to be pretty fast to build, and it showed great promise — mostly because the API responses were 10 times faster than the PHP version.
To go even further in time, Directus first appeared as a Flash-based asset and database GUI under the working title "dir" in 2006. Versions after that were written in PHP, and then it was rewritten again in backbone.js for UI, while PHP handled the server side.
And now we have Directus 9 with Node.js in the backend and Vue.js for the CMS UI.
As far as I know, they are still developing the community-driven Laravel-PHP version, but the Node version is the official version of the platform.
As stated before, Directus 9 communicates with SQL databases to serve data to API endpoints. That way, you can consume that data with React, Next.js, Vue, or even mobile applications. Currently, the supported databases are PostgreSQL, MySQL, SQLite, Microsoft SQL Server, OracleDB, MariaDB, AWS Aurora, and many more.
One great thing about Directus 9, and the way it handles your databases, is that when you create a new Collection - which is just a fancy word for a data type (like posts, movies, books) - you are actually creating a new table in your database with all the corresponding columns that that data type consists of.
This creation process is very easy to understand due to its great UI. Even something like creating many-to-many relationships between the Collections is super easy, as shown in the image below.
Directus 9 features a pretty granular role and permission system which allows you to easily set the permissions for any of the unlimited number of roles you may have in your app.
Directus Market is not released yet, but once it’s out, you’ll be able to install extensions directly in-app, kind of like WordPress is doing with its plugin system. In the meantime, you have the option to extend Directus 9 core API yourself with additional endpoints, response filters, webhooks, and event logic.
Directus 9 just came out with a new update, but it continues adding new major features and rewoking systems.
For example - when I started using Directus 9, just a little over 7 months ago, I didn't really like the way it handled content translation. It was kind of clunky, and from what I gather I wasn't the only one that didn't like it. But, a few weeks ago I stumbled upon this on my Twitter feed.
The translations inside Directus 9 are much more streamlined and much easier to work with now.
I don't have much to say about this one, except that I'm a sucker for great design, and switching from Strapi to Directus is a breath of fresh air. I love the design of the CMS UI and even the Directus 9 website looks good.
Of course, Directus 9 has more features, which it shares with the competition: revision history, content translation, data validation, dynamic thumbnails, image editor, full white-labeling, REST API, GraphQL API, custom event hooks, and many more.
Basically, you have two options:
The self-hosted (free) version is not nerfed in any way. It's the same as the hosted (paid) one - you just have to take care of the infrastructure yourself.
Directus 9 feels fresh and mature at the same time, and you can’t really say that about many products. Most CMSs seem pretty similar and have the same (or similar) features, but Directus 9 just kind of stuck with me.
If you don’t believe me, just test it out yourself. You should never trust a random guy on the Internet. 😏
If you want to learn even more and see Directus 9 in action, make sure to check the video tutorial I made. Feel free to contact me if you have any open questions and don’t forget to give Directus 9 a try.