In my State of Craft keynote at Dot All 2022, I announced that Craft is undergoing a transition: categories, tags, and global sets are going away, in favor of entries.
How did we get here?
In the early days, all forms of content—entries, globals, and “pages” (a precursor to Single sections)—were each treated as completely separate concepts, with nothing in common under the hood. That’s how CMSs worked back then, so that’s where we started.
We weren’t thrilled with it, though. We wanted to build a custom field framework that could cater to all types of content (and even things that weren’t traditionally “content” like assets and user accounts). And we wanted to be able to relate everything to everything else. But these ideas seemed fundamentally at odds with our disjointed architecture.
So we went back to the drawing board, and came up with the concept of “elements”. In Craft, everything that authors interact with is an element. Users, assets, entries, Matrix blocks, Commerce products, Super Table rows, Freeform submissions, Campaign… campaigns, and more—all elements. It’s a powerful concept that fundamentally defines what Craft is today: at its core, Craft isn’t a content management system; it’s an element management system.
We were so excited about our element framework that we found ourselves creating element types for every imaginable content modeling need:
- Entries for repeating content.
- Global sets for global content.
- Matrix blocks for nested content.
- Categories for taxonomies.
- Tags for folksonomies.
Second Thoughts
In hindsight, we went a little overboard. We’ve come to realize that not every single thing needed to be its own element type.
From a pure content modeling perspective, there’s no significant difference between a category group and a Structure section. Or a tag group and a Channel section. Or a global set and a Single section. In each case, using a section would have been just as effective at handling the content needs, with a slightly different authoring UX.
These similarities can lead to a bit of choice paralysis when it comes to building out a content model for new projects, particularly for green developers who haven’t had a chance to grok the impact their choices will have for content managers.
So that’s why we’ve decided it’s time to simplify. Category groups are going to become Structure sections; tag groups will become Channel sections; and global sets will become Single sections.
Roadmap
Craft’s entrification begins with 4.4, and will fully conclude in 6.0.
Craft 4.4
For those who want to get a head start, Craft 4.4 adds new entrify/categories
, entrify/tags
, and entrify/global-set
CLI commands which convert category groups, tag groups, and global sets over to Structure, Channel, and Single sections, along with their content. Categories and Tags field will get converted into Entries fields as well.
Entries fields tied to a Structure section are getting a new “Maintain Hierarchy” setting, which will cause them to behave like Categories fields—where when you relate a nested entry, each of its ancestors will be related as well. (Categories fields are getting the same setting as well, so they’ll be able to opt out of that behavior.)
Craft 5
Categories, tags, and global sets will begin to be phased out in Craft 5. It will no longer be possible to create new category groups, tag groups, or global sets.
To keep things intuitive for content managers, we’re also planning to replace the “Entries” control panel section with a new “Content” section, which will give admins a way to present system content in a unified information architecture view for content managers.
Craft 6
All category, tag, and global set support will be fully removed in Craft 6. Long live entries!