24.04.24 LTS: Upgrade to the Universe

Jamie Mauro

dotCMS 24.04.24 LTS, the first long-term supported release of 2024, began as most software projects do: deep below the Earth's crust. As plates subduct, driving hydrous minerals into the mantle, their water content creates geologic-scale volatility. 

As we all know, that's how you get magma — from content. Likewise, as pressure mounts from features and functions, new releases erupt from the dotCMS core, changing the landscape and enriching the soil of content management anew.

As tempting as it is to declare this result "earthshaking" or "a landmark achievement," I cannot do so in good conscience; the truth is, dotCMS 24.04 LTS is not of this world. Rather, it has already shed its earthly tethers — transcending even the familiar "hybrid" horizons to be bathed in the sidereal glow of the cosmos as a universal CMS.

Somewhere across space and time, a gong is sounding. I have no idea what that's about. Regardless, once it pipes down, I'd like to catch you up on the fruits of our labors, and discuss why you should upgrade to the universe

What's New Since 23.10.24 LTS?

It's been about six months since our last LTS release — a mere two-thirds of the time between 23.01 and 23.10. With that in mind, it may be surprising, even startling, to see how much ground we’ve covered.

We'll start with the item with the most conceptual weight, because to do otherwise would be to bury the lede.

A Universal Solution


The Universal Visual Editor (UVE) allows in-context editing to pages in both traditional and headless paradigms — whether local to the instance or a remotely served front-end web application. The same interface and user experience now applies to both ends of the spectrum, and anywhere in between; that is, the same site can use both traditional and headless pages according to URL path patterns you've defined.

The UVE represents the fusion and evolution of two formerly separate features: Edit Mode for traditional pages and Edit Mode Anywhere for headless sites. The result is a feature both simpler than EMA and more powerful than Edit Mode. And calling it "more than the sum of its parts" by no means minimizes its parts: a drag-and-drop content palette, language and persona selectors, device and social media previewing options, A/B testing, page-specific layout design and rule definition, and more. 

We argue this style of universal CMS functionality represents, as VP of Product Preston So put it recently, "a new grand compromise for all the personas that leverage the CMS on a daily basis" — from developers to editors to DevOps.

"In my view," he summarized, "the universal CMS portends a future in which content experiences are editable anywhere, deployable anywhere, and, in the age of AI, generable anywhere in the stack."

And I appreciate his saying so, because that's also a fabulous segue!

Smartificial Intelligration

Artificial intelligence technology is here to stay, and certain thought experiments suggest that the only appropriate play is to throw rose petals at the feet of our new computational overlords, lest we face simulated horrors beyond all reason. dotCMS couldn't agree more — or less! — because we agree exactly the correct amount.

The dotAI feature, which began its life as a plugin, quickly matured into a core functionality; all you need is an OpenAI key to get started.

Looking to generate text content or images? You can do it through the admin panel, API endpoints, scripting, or directly within the Block Editor. Want to implement semantic searches? See for yourself! What if you hate tagging content? Easy: Just have the large language model do it.

Ok, ok. But what if you want to really reach for that brass ring and automate the generation of entire units of structured content? New AI Workflows make this possible.

As CTO Will Ezell blurted out during an early internal demo of this feature: "Guys, we're [screwed]. We're all gonna be out of a job in five years." He was joking, I think. Let's not dwell on it!

Besides, we’ve got other kinds of automation to discuss as we shift from the generative to the administrative.


Embrace Dot, Command Line

In the world of CI/CD (continuous integration and continuous delivery), you may find yourself interacting regularly with a command line — a go-to instrument across the entirety of the digital age. Before that, it was all waterwheels and abaci, or so I've heard.

Either way, the dotCMS Command Line Interface (dotCLI) extends the growing dotCMS universe into the command shell. Just install it via package manager, and you're off to the races — pulling to local workspaces, pushing to remote instances, synchronizing files, sites, languages, and more. The interactive configuration can help you define your instances, or you can work without a config entirely by specifying your targets ad hoc.

dotCLI can even use a GitHub repository as a workspace. If GitHub Actions are already part of your automation pipeline, you'll find our CLI right at home; if they're not, our tool might be the perfect excuse to start!

Significantly, dotCLI has become our recommended method for manipulating dotCMS file systems, superseding and deprecating WebDAV and earlier Bash-based command-line tools. It should come as no surprise that we're making constant use of dotCLI, ourselves. We're pretty much ecstatic with this thing, and we think you will be, too.

Just as we've gone down to the lowest dimensions — the line and the dot — the time has come to extend our gaze off into the highest and farthest expanses to ponder their confusing geometries.

The Outer Worlds of JavaScript

The JavaScript realms can seem strange, with frameworks growing mutually alien in their idiosyncrasies. A front-end developer can take countless forms, and JavaScript is even used on the server side. We, therefore, extend salutations to this diverse galaxy, for diplomacy is the cornerstone of civilization.

As we open hailing frequencies, the dotCMS JavaScript SDK is the first of our two overtures. The SDK offers libraries that permit a front-end developer to interact securely with a dotCMS instance, and to more easily develop components that leverage the data they fetch.

With these libraries, you can develop your site according to your favorite JavaScript paradigm without any stylistic twists or quirks demanded. Moreover, the SDK was designed from the ground up to work with the UVE, such that "headless" can also mean painless. And our SDK continues to grow; additional libraries will target further frameworks, and users can even build custom libraries to tackle their own stacks — no matter how peculiar.

Our second offering was hinted at in the "server-side" reference: dotCMS's Scripting API feature has expanded to include JavaScript. No longer limited to Velocity, you can now build custom endpoints in what StackOverflow's surveys have declared the most commonly used language for 11 years running. Any survey of the universe, after all, should take seriously its lingua franca, its commonplaces and conventions. 

Indeed, we trek so you don't have to.

All Systems Green (And Some Glorious New Colors I've Never Seen Before)

When cruising the corridors of the infinite, it's important to know your vessel is up to the task. Our engineering team has finally recovered from whatever ectoplasmic radiation they absorbed when passing through that event horizon, and they're waving hello. Their limbs move fluidly — elongated in proportion, bending at too many points. They whisper their greetings directly to your pineal eye. Otherwise, things are pretty normal; their teeth are the normal degree of sharpness, if you don't stare directly at them. 

Their works, on the other hand, are extraordinary. A few items of note:

  • We've added a short-lived cache to permissions lookups, which significantly improves performance on repeat checks over large content pulls.

  • We also added another caching mechanism for retrieving content-version information.

  • The team implemented a chainable metadata provider — balancing file system checks with database checks in a more resource-optimizing way. It's apparently an interesting enough idea that if you search the web for the phrase "chainable metadata provider," we're pretty much the result.

  • Storage providers have been reconfigured to load lazily to improve system performance. 

  • We jettisoned the system behavior of refreshing properties before fetching, a relic of the days of non-containerized binary installs, now posing unnecessary drag.

  • More concurrency control, with more error handling in API storage classes.

  • After our wild success last time with the Workflow databases, we've additionally added indices to inode and identifier databases, improving lookup performance by a factor of as much as 4600x!

These and still other performance improvements have helped dotCMS, in a word, a̸̧͇̅̓̽̊s̸͉͉̫͕̝̞̪̍̑̚c̶̛̛̤͙̠̲̈́̓̂̿͠ë̷̼̯́́̎̅̀̀͝n̸̡̛̛͙͇͎̂͑̏̈́̋̎d̶̛̛͙̫̝͍̘̗̐͂̂̚.

All the Stars in the Sky

Amid constellations of improvements, some stars shoot solo. In the name of brevity, let us glide most elegantly over some of the cooler bits of miscellany.

First of all, we've added an Announcements menu to our admin panel. 

Screenshot 2024-05-28 at 4.34.37 PM.png

"Announcing announcements is the starkest form of metannouncery," our changelogs' handsome author once observed. I now disagree, having here found a way to announce the announcement of announcements. But no matter; the important thing is that we plan to use it with two guidelines in mind: to keep you apprised of what's new and interesting in our world, and to do so tastefully — quality over quantity, signal over noise.

We also found time for a number of API enhancements, as is our wont. A new content report endpoint is capable of listing content types, and contentlets of that type, that live under a given site or folder entity; one may wish to use something like this before, say, moving or deleting such entities. The Page API can now retrieve the languages in which a page is available, and also returns content related to a page asset itself, depending on relation depth. We've even added API methods to update and fetch custom content tools.

We've added more useful error messages; blocks can now use a justified alignment; site-selector behavior has improved, prioritizing the shortest matches; a system table allows configuration properties to be adjusted on the fly via API calls; license configuration has been streamlined down to just the upload field; and we’ve squashed roughly a zillion bugs. It's like Starship Troopers over here, but in some kind of non-dystopic way that arguably misses the point of the piece. But Barthes’ "The Death of the Author” says that’s not my problem. Probably.

Oh, and templates now accept themes specified as paths rather than folder identifiers. Why fetch a UUID when you already know the path? “Because you have to.” Well, not anymore; we liberate you thus!

A Sidebar for the Devs and DevOps

Let's pause from all the exciting stuff. You know why you're in this section. "What breaks?" you ask. "What terrible fates lie in store for one such as I, Atlas, who holds aloft a world?"

Well, the first thing to note is that from 23.10 LTS to 24.04 LTS, there have been zero (0) breaking changes introduced. You can count them, but only if you can count to zero. I mostly know how to count from zero; in this case, where would I start, and why? I'll leave this one to the specialists.

We've been upgrading and changing a lot of dependencies — Tomcat upgraded, Jetty Server discarded; XStream updated, but soon to be replaced with Jackson; updated Postgres JDBC drivers; etc. Some of these have been for security reasons, others for performance. And some of them, importantly, have been part of a larger project: upgrading our Java chassis. We've settled on moving to Java 21, and the process is indeed underway. "Enthusiastic cheer!" he exclaims, reading the stage direction and then further narrating his blunder.

Gazing Into the Fourth Dimension

Customarily, as we urge people to upgrade to the new hotness, we take a moment to acknowledge the section of our user base who may have yet to adopt even the previous hotness. You're in an exciting position because, in addition to everything I've been discussing, you can look forward to even more — the "more" of yesterday, today!

A sampling of standout items:

  • The Pages Tool is a hub for every page — singletons and URL-mapped content alike.

  • The Block Editor's remote extensions allow you to modify the behavior of the Block Editor.

  • New and improved designer interfaces make building templates and content types easier and more fun.

  • The Secrets Viewtool allows you to keep your secrets in an Apps configuration and access them in scripts via variable calls.

  • All REST APIs now paginate!

And if you're farther back than that, you can look forward to getting to know any of a huge assortment of other new and excellent devices — Block Editor, itself; the JSON field; a viewtool for generic object caching; playgrounds of every sort; the Content Palette; content history tabs... the list goes on.

For those instead staring through the same scope in the other direction: The boundless future holds great things, so long as one does not trigger a paradox of causality. In particular, prepare for an all-new content editor — rebuilt from the ground up to be much improved. But be cautioned, also: Its arrival will mark the end of long-deprecated support for legacy relationship fields. For any still using those, be sure to migrate to standard Relationship Fields some time this year!

Wrapping Up the Cosmic Envelope

I'd like to close with a word about our own evolving processes. Consider: The nine-month span between 23.01 LTS and 23.10 LTS included 8 agile releases, while the six-month span to 24.04 LTS included 11 — that is, we've more than doubled our release rate in the last two LTS cycles. Things are speeding up, approaching something new: a prophesied dotEvergreen, at which time upgrading will proceed so simply as to occur in the background with almost no downtime. It’s not a trivial process, so we’re taking our time to get it right.

But in the meantime, you get to come in here and read me ramble on about the celestial majesty of illimitable existence, not to mention all the mischief we get up to. It can be overwhelming. An angel might here say something like "Be not afraid," blinking some number of its uncountable eyes. 

The camera pans over to observe dotCMS staffers snickering and gesticulating at the heavenly being’s empyrean radiance, as if to say, "Get a load of this bossy-britches." After all, we at dotCMS encourage you to feel as many or as few of your emotions as you please; breadth of options is one of the joys of a hybrid-unto-universal CMS.

Until next time!

Recommended Reading

Beware of CMS Fads

This blog warns against adopting new technologies without sufficient consideration, using examples to illustrate how jumping on trends can lead to wasted resources.

Getting started with the dotCMS Universal Visual Editor with Next.js

In this blog post, I’ll demonstrate how you can get started with the Universal Visual Editor and Next.js in just fifteen minutes.