Dot All 2023 took place in Barcelona last week and it was an incredible experience to attend and to speak at. Among the things revealed were Craft Cloud, Commerce 5, Craft 5 and a little surprise of my own!

Dot all 2023 talk

1. Craft Cloud #

Over four years in the making, Craft Cloud is finally being release to the public later this year. This will be fully managed, first-party hosting with a long list of built-in features.

Brad Bell explaining Craft Cloud
Brad Bell explaining Craft Cloud.
  • Auto scalable, always available
  • Global CDN (provided by Cloudflare)
  • Static caching
  • MySQL and PostreSQL
  • Automated backups
  • Enterprise-grade WAF (web application firewall)
  • Auto SSL
  • CI/CD build pipeline
  • Craft CLI commands
  • Multiple environments (up to 3)
  • On-demand queue workers
  • On-demand image transforms
  • Fully supported (by the team behind Craft)
  • Craft Pro included

Prices are expected to begin at $240 per month, and the full details are available at craftcms.com/cloud.

2. Commerce 5 #

One of the most requested features, multi-store and multi-currency are finally coming in Commerce 5. This makes it possible to build multiple stores with a single instance of Craft Commerce, each with one or more currencies.

Nathaniel Hammond explaining multi-store and multi-currency in Commerce 5
Nathaniel Hammond explaining multi-store and multi-currency in Commerce 5.

Another exciting feature is catalog pricing, which allows you to set conditional pricing, meaning that different users can see different prices based on the conditions you have chosen.

Commerce 5 will be released along with Craft 5, expected in Q1 of 2024.

3. Craft 5 #

Craft 5 contains significant content modelling improvements and possibly the biggest refactor to the underlying content storage since Craft 1. This refactor unlocks some long-awaited features that were impossible to implement until now.

The full list of features coming in Craft 5
The full list of features coming in Craft 5.
  • Address fields (globally available field type)
  • Field instances (fields can be reused in the same field layout)
  • Chips and cards (improved element index views)
  • Matrix entrification (matrix blocks are becoming entries)
  • JSON content column (the entire content database table is being replaced by a single JSON content column in the elements_sites table)
  • Decoupled entry types (entry types are reusable across sections)
  • Cross-site field copying
  • Element thumbnails (improved element index views)
  • Inline editing (bulk editing of elements within the tabular elements index view)
  • Single sign-on
  • 2FA and passkeys
  • Content releases
  • Embedded indexes
  • Translatable alt text (for image assets)
  • Multi-author entries
  • Accessibility improvements (getting closer to WCAG 2.1 AA compliance)
  • Volume subpaths
  • PHP 8.2+

Possibly the biggest implication of the content model refactor is that fields can now be reused in the same field layout and that matrix-in-matrix is finally a reality!

Longform Content #

Brandon Kelly’s “one more thing” moment may have been dwarfed by the previous announcements, but the ability to embed entries within CKEditor fields may solve the issue of longform content that has been so omnipresent since Craft was first released.

Longform content using embedded entries in the CKEditor field
Brandon Kelly explaining longform content using embedded entries in the CKEditor field.

No longer will it be a choice between an underwhelming rich text editor and an excessive matrix field, which tends to lead to unintuitive experiences for content authors. It is my hope that now there will be a clear use case for when to reach for a matrix field (page builders or repeatable content) and when to use a CKEditor field (longform content).

Craft 5 is expected to be released in Q1 of 2024. View the WIP changelog.

4. Sprigshow #

My presentation, entitled “Reactive Front-ends with Sprig”, was about how when we go back to basics and follow the grain of the web, then developing for the web can be simple and fun again. In it, I showed lots of demos of how you can do more with less, leveraging everything that you already know about Twig.

Ben Croker revealing his Sprig powered slide show
Ben Croker revealing his Sprig powered slide show.

The grand finale was the revelation that my entire presentation was powered by Sprig, and that each of my slides was an entry in a structure section in Craft. This was intended to drive home the fact that you can build practically anything you can dream up with Sprig.

Watch the recorded presentation →

View the slideshow →

To show you what I mean, below is the Twig code in its entirety to create a slideshow using Sprig (with Tailwind CSS classes).

{% set slide = slide ?? 1 %}
{% set entry = craft.entries.section('slides').offset(slide - 1).one() %}
{% set totalSlides = craft.entries.section('slides').count() %}
{% do sprig.pushUrl('?slide=' ~ slide) %}

<div class="h-screen flex justify-center items-center bg-cyan-800">
    <h1 class="text-white text-9xl">{{ entry.title }}</h1>
</div>

<div class="absolute bottom-0 right-0 mb-5 mr-8 flex space-x-2">
    {% if slide > 1 %}
        <button sprig s-val:slide="{{ slide - 1 }}" s-trigger="click,keyup[key=='ArrowLeft'] from:body" class="rounded-full w-6 h-6 bg-white">←</button>
    {% else %}
        <button class="rounded-full w-6 h-6 bg-white opacity-50">←</button>
    {% endif %}
    {% if slide < totalSlides %}
        <button sprig s-val:slide="{{ slide + 1 }}" s-trigger="click,keyup[key=='ArrowRight'] from:body" class="rounded-full w-6 h-6 bg-white">→</button>
    {% else %}
        <button class="rounded-full w-6 h-6 bg-white opacity-50">→</button>
    {% endif %}
</div>

Go forth and make great things!