Consolidated Service Architecture
In Umbraco 14 we have moved more responsibility to the client, and we’ve re-implemented all backend endpoints to support this updated approach.
That means, that all the endpoints used by the Backoffice combine to form the new Management API - an API that you can find a Swagger specification for on {yourdomain}/umbraco/swagger. In practice, these endpoints are the exposure of all our public-facing controllers. These controllers are now more lightweight than ever before, as all business logic now resides in the service layer. Simply put, just a really nice separation of concerns.
That also means, that while working with package development, all functionality can be called through services. When calling services, you should know that we’ve introduced the use of an “Attempt Pattern” (also known as the “Maybe Pattern”), to be able to have a single consistent and asynchronous way to call services while retrieving a rich status from the call. If in doubt about how to use it, then just take a look at one of the many controllers. It’s amazingly simple.
Talking about controllers and the management API, it’s now possible to programmatically control everything in Umbraco through this API. You can create Users, Members, Document types, Media, Content, and yeah - simply everything. The Backoffice is just one client - and you can (in theory) create your own Backoffice. You probably don’t want to build a client for everything, but if you have a scenario where information from one system should be transferred to Umbraco, or if you have a specific use case where an editor should be able to do something in Umbraco from within another application, that can now be done. You’ll log in the user through OpenID, and then the opportunities are up to you. Again, this opens up for creative integrations, and we’re curious about what cool usage we’ll see.
In addition to being the most extendable version of Umbraco ever, Umbraco 14 is also the version with the most test coverage ever. We’ve added a significant amount of tests - especially integration- and acceptance tests - to increase the reliability of new contributions, whether they originate from the community or HQ.
Breaking Changes and Deprecations in Umbraco 14
We’ve prepared for Umbraco 14 for some time and planned for the deprecation and removal of several things during the last couple of years. Umbraco 14 is not just a frontend update, it’s also a cleaned-up version for the future, where some of the not-so-maintainable implementations are removed.
Bye Json; Hi Json
On the backend, we’ve moved away from Newtonsoft.Json and adapted the Microsoft-supported System.Text.Json. System.Text.Json is way more strict and does not aim for feature parity with Newtonsoft.Json, but you (and Umbraco) gain improved performance, security, and compliance with standards. If the stricter behavior becomes an issue for your implementation, you can still take a dependency on Netwonsoft.Json yourself, however, a safer way might be to ensure that you use a JSON format that complies with the standard, and therefore will work with System.Text.Json.
Cleaning up legacy editors and functionality
In Umbraco 14 we have also removed macros. They have caused some maintenance headaches over the years, and, as we believe we have covered all relevant use cases with alternatives like partial views and blocks in the RTE, macros are now gone. Same with the Grid Layout, Nested Content, and the Media Picker (legacy), which are all property editors that have better alternatives in the Block Grid, the Block List, and the newer Media Picker. Also, for the block-related editors, we have an RFC for Reusable Content with Global Blocks in the pipeline, which will add flexibility to the various usages of blocks.
Xpath is in the past
Another project we have in the pipeline, or more precisely on the roadmap, is the Lazy-loaded content cache and the support for the .NET IDistributedCache interface. However, it will be impossible for us to support this new caching model, if we still need to support XPath traversing. XPath is therefore removed. As an alternative, we’ve already in Umbraco 13 introduced Dynamic Root in the Multinode Tree Picker, which offers the same level of flexibility but in a way more intuitive way - and with support for the future implementation of Lazy-loaded content.
See more in the Umbraco 14 release notes and umbraco/Announcements on GitHub.
Known issues
The focus is on providing a good base experience of working with the new Backoffice and APIs, and that means a bit of prioritization has been needed. As such, there are a number of features that will likely not make it into the initial release of Umbraco 14. These are:
- Tours
- Help section
- Keyboard shortcuts
- Preview
Also, in this first release candidate, you’ll not find:
- Dictionary for Backoffice translations
- Label templates
- Block live preview
- Custom icons
- Blocks Grid, Block List, and Blocks in the RTE
- TinyMce premium cloud plugins
- Various minor UI features
We will of course be (re)adding in the features as they are completed and tested. So there are a lot of back office-related things to look forward to in the upcoming versions as well.
For evaluating upgrade scenarios the Version Specific Upgrades article has a helpful list of changes that can come into consideration.