Release date: November 6, 2023

Version 1.4.0 is a minor change & bugfix release. Please note that there are several breaking changes.

This release has been tested for compatibility with .NET 8 RC2, and no issues have been found. We also expect this release to be fully compatible with the final .NET 8 release later this month.


The following changes have been made in this release:

[BREAKING] Renamed and changed the behavior of the UrlType enum

Most methods that generate a URL have a Redakt.ContentManagement.Web.UrlType enum parameter to specify which type of URL to generate. The behavior of this enum parameter has changed to be more in line with the generally accepted meaning of the different URL types. Previously, UrlType.Absolute would generate a URL based on the root of a host, for example, "/features/enterprise-content-management". However, since an absolute URL is generally understood to mean a URI including scheme and hostname (for example, ""), this behavior has been changed. The default behavior when the optional UrlType parameter is not provided (relative if on the same host) still generates the same URL as before this change.

The different UrlType enum values now generate the following URLs:

  • UrlType.Absolute - the absolute URL with the same host as the current request host, if possible; otherwise, the canonical (primary host) URL.
  • UrlType.Canonical - the canonical absolute URL based on the primary host of the site.
  • UrlType.Relative - the URL relative to the host root, i.e., without scheme and hostname parts.
  • UrlType.RelativeIfSameHost - the URL relative to the host root if the specified resource is on the same host as the current request; otherwise, the absolute URL. This is the default behavior.
  • UrlType.RelativeToRequestPath - the URL relative to the current request path if the specified resource is on a subpath from the current request; otherwise, the full relative URL (to the host root).
Additionally, the previously synchronous NodeViewModelExtensions.Url() method has now been made asynchronous and renamed UrlAsync().

[BREAKING] Moved extension methods to a different namespace
Several extension methods have been moved to a different namespace. You may have to change using statements if you are using extension methods from any of the following extension classes:

  • NodeViewModelExtensions have been moved from Redakt.Extensions.Web to Redakt.ContentManagement.Web
  • RedaktContextExtensions have been moved from Redakt.Extensions.Web to Redakt.ContentManagement.Web
  • MediaExtensions have been moved from Redakt.Extensions.Web to Redakt.ContentManagement.Web
Updated Tag Helpers
Several tag helpers in the Redakt.Web.TagHelpers namespace have been added or updated.

  • Added the BackgroundImageTagHelper, similar to the ImageTagHelper, which renders a background-image value in the element's style attribute. It also supports a background image-set value.
  • Added the CultureTagHelper for setting the culture to be used by other tag helpers, such as the dictionary tag helper and anchor tag helper.
  • Added the DefaultContentTagHelper for rendering default content if the element's current content is empty. The rx-default attribute has subsequently been removed from the ContentTagHelper.
  • Added the EmptyContentTagHelper for setting the action to take when the element's content is emptyThe rx-if-empty attribute has subsequently been removed from the ContentTagHelper.
  • Several minor tag helper optimizations and refactoring.
  • [BREAKING] Deleted the PageAnchorTagHelper since all features of this tag helper are also available from the AnchorTagHelper.
Back office editor updates
Several changes have been made to form editor controls in the back office.

  • Added a Prefix parameter to the TextEditorAttribute to render a prefix to the left side of the text editor input (single line only).
  • Added a Suffix parameter to the TextEditorAttribute and NumberEditorAttribute to render a suffix to the right side of the editor input.
  • Added an Align parameter to the TextEditorAttribute, NumberEditorAttribute and MultilineAttribute to specify the horizontal alignment of the editor input.
  • Added a Width parameter to the NumberEditorAttribute to specify the width of the editor control.
  • Updated the relevant editor components to support the additional parameters of these attributes.
  • [BREAKING] Removed the PrefixAttribute since that function is now available as a parameter on the relevant editor attributes.

Other minor changes in this release
  • SMTP messaging is no longer registered as the default email messaging module. Use AddSmtpEmailMessaging() instead to register email messaging with the DI container.
  • Updated init.ps1 script files to generate default configuration settings.
  • Updated vulnerable and deprecated dependency package versions.
  • Updated ImageSharp to version 3.
  • Other small updates, optimizations, and refactoring.


The following bugs have been fixed in this release:

  • Fixed an issue where the password reset email would not always be sent.
  • Fixed a node tree sidebar sizing issue in the node browser dialog.
  • Fixed an issue that caused XML comments to not be generated for Redakt packages.