Skip to content

Commit 6d07963

Browse files
committed
workflow 18 release notes
1 parent 5a6c009 commit 6d07963

3 files changed

Lines changed: 156 additions & 20 deletions

File tree

18/umbraco-workflow/release-notes.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,53 @@ Check the [Version Specific Upgrade Notes](upgrading/version-specific.md) articl
1515
## Release History
1616

1717
This section contains the release notes for Umbraco Workflow 18, including all changes for this version.
18+
19+
### 18.0.0-rc1 (June 2026)
20+
21+
* Compatibility with Umbraco 18-rc.
22+
23+
#### Element type workflow support
24+
25+
Workflows can now be applied to element types, not just documents. This extends the same multi-stage approval workflow model to the new element content type introduced in Umbraco 18. Element folders are also supported, allowing workflow configuration inheritance down nested element folder hierarchies.
26+
27+
#### Workflow actions
28+
29+
A new extensible action system allows configuring pre-approval and post-approval actions per document type. Actions execute automatically before or after a workflow completes, and can optionally block the workflow on failure.
30+
31+
Developers can create custom actions by implementing `IWorkflowAction` or extending `WorkflowActionBase<TConfig>`, and register them via `WorkflowActionCollectionBuilder`. A built-in Webhook action ships as the first implementation, sending a POST request with workflow instance details to a configured URL.
32+
33+
Actions are managed from a dedicated "Document Type Actions" section in the content approvals settings sidebar.
34+
35+
#### Unified configuration model
36+
37+
The permissions system has been consolidated: the split `NodeId`/`ContentTypeId` columns on the permissions table are replaced by a single `EntityId` column paired with an `EntityType` discriminator. The separate config update models (`DocumentConfigUpdateRequestModel`, `DocumentTypeConfigUpdateRequestModel`) are replaced by a unified `ConfigUpdateRequestModel`.
38+
39+
This simplification enables element type support and provides a single API surface for all entity-type configurations.
40+
41+
#### Standalone settings workspaces
42+
43+
Content Approvals, Content Reviews, and Release Sets settings have each been converted from tree nodes within a shared settings workspace to standalone workspaces with dedicated URL routes. The previous settings tree is replaced with a menu and sidebar pattern, providing a cleaner, more focused navigation experience.
44+
45+
#### Frontend performance
46+
47+
* Static JavaScript imports replace lazy loading across manifest files, reducing the chunk count by 225 and total JavaScript file size by 21%.
48+
* Core implementations (conditions, contexts, modals, components) are now embedded rather than loaded as lazy chunks, reducing the number of HTTP requests at startup.
49+
* TypeScript enums have been replaced with string-union types, eliminating additional emitted JavaScript.
50+
51+
#### Backend modernization
52+
53+
* Feature-slice namespace reorganization: models and view models previously in flat `Umbraco.Workflow.Core.Models`/`ViewModels` namespaces are now organized into feature-specific namespaces (e.g. `ContentApprovals`, `ApprovalGroups`, `Settings`).
54+
* All previously `[Obsolete]` members from v17 have been removed.
55+
* Legacy migrations (pre-v17) removed. Fresh installs use a single `InitialCreate` migration.
56+
* SwaggerGen replaced with `Microsoft.AspNetCore.OpenApi`.
57+
58+
#### Other improvements
59+
60+
* Auto-save before submit: dirty variants are automatically saved before initiating a workflow submission.
61+
* Validate before submit: form validation runs before workflow submission is allowed.
62+
* Localization keys for task statuses updated from integer-based (`status1`-`status10`) to camelCase equivalents matching the `TaskStatusModel` enum names.
63+
* Conditional frontend package registration: licensed features (Alternate Versions, Release Sets) are gated by license state, preventing UI loading for unlicensed features.
64+
65+
## Legacy release notes
66+
67+
You can find the release notes for versions out of support in the [Legacy documentation on GitHub](https://github.com/umbraco/UmbracoDocs/blob/umbraco-eol-versions/11/umbraco-workflow/release-notes.md)

18/umbraco-workflow/upgrading/upgrading.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ If you are migrating from Plumber to Umbraco Workflow, see the [Migrate from Plu
88

99
## Get the latest version of Umbraco Workflow
1010

11+
You must upgrade to the closest [Long-term Support (LTS) major](https://umbraco.com/products/knowledge-center/long-term-support-and-end-of-life/) version before upgrading to the latest version. For Umbraco Workflow 18, the closest long-term support version is Umbraco Workflow 17. Once the project is on version 17, you can move on to 18.
12+
1113
To get the latest version of Umbraco Workflow, you can upgrade using either of the two options:
1214

1315
* [NuGet](upgrading.md#nuget)

18/umbraco-workflow/upgrading/version-specific.md

Lines changed: 104 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,117 @@ description: >-
66

77
# Version Specific Upgrade Notes
88

9-
This page covers specific upgrade documentation for when migrating to Umbraco Workflow version 17.
9+
This page covers specific upgrade documentation for when migrating to Umbraco Workflow version 18.
1010

1111
{% hint style="info" %}
1212
If you are upgrading to a new minor or patch version, you can find information about the breaking changes in the [Release Notes](../release-notes.md) article.
1313
{% endhint %}
1414

1515
## Version Specific Upgrade Notes History
1616

17-
Version 17 of Umbraco Workflow has a minimum dependency on Umbraco CMS core of `17.0.0`. It runs on .NET 10.
18-
19-
This version introduces granular permissions for Workflow features:
20-
- Active Workflows: Read
21-
- Advanced Search: Read
22-
- Alternate Versions: Create, Read, Update, Delete, Promote
23-
- Approval Groups: Create, Read, Update, Delete
24-
- Configuration: Read, Update
25-
- Content Reviews: Read
26-
- Document: Initiate, Unlock
27-
- History: Read
28-
- Release Sets: Create, Read, Update, Delete, Publish
29-
30-
Default permissions are set in a migration:
31-
- Administrator group has all permissions
32-
- Editor group has all Read permissions
33-
- Other groups have no permissions
34-
35-
Workflow settings (for content approval, content reviews and release sets) are relocated to the Settings section. Combined with the above permissions, this allows broader access to the Workflow section. Permission can be read-only for the views in the Workflow section (Approval Groups, Active Workflows, Content Reviews, History).
17+
Version 18 of Umbraco Workflow has a minimum dependency on Umbraco CMS core of `18.0.0`. It runs on .NET 10.
18+
19+
## Breaking changes
20+
21+
Version 18 contains a number of breaking changes. The details are listed here.
22+
23+
### Dependencies
24+
25+
* Umbraco CMS dependency was updated to `18.0.0`
26+
* SwaggerGen/Swashbuckle dependency was removed in favor of the built-in `Microsoft.AspNetCore.OpenApi` package
27+
28+
### Database
29+
30+
The `WorkflowUserGroupPermissions` table has been updated: the `NodeId` and `ContentTypeId` columns are consolidated into a single `EntityId` column paired with the existing `EntityType` discriminator.
31+
32+
A new `WorkflowActionConfig` table is added for storing workflow action configurations.
33+
34+
All legacy migrations (pre-v17) have been removed. Sites upgrading from versions earlier than v17 must first upgrade to v17 before upgrading to v18.
35+
36+
### Namespace reorganization
37+
38+
The flat `Umbraco.Workflow.Core.Models` and `Umbraco.Workflow.Core.ViewModels` namespaces have been dissolved into feature-slice namespaces. If you reference any Workflow types directly, update your `using` statements:
39+
40+
The feature-slice namespaces include `Actions`, `ApprovalGroups`, `ContentApprovals`, `ContentReviews`, `Settings`, `Common`, `Email`, `Document`, `Element`, `AlternateVersions`, `Charts`, `HistoryCleanup`, `ReleaseSets`, and `SignalR`.
41+
42+
DTOs were also renamed from `Poco` to `Dto` suffix to remove the implied coupling to NPoco.
43+
44+
### Code
45+
46+
The list below includes changes raising validation errors `CP0001`, `CP0002` and `CP0006` between versions 17.3.2 and 18.0.0-rc1.
47+
48+
Of note are the removal of split config models in favor of unified `ConfigUpdateRequestModel`, the consolidation of `NodeId`/`ContentTypeId` into `EntityId` on permission models, and the removal of previously obsoleted members on `IWorkflowInstanceResolver`, `IEmailTemplateLocator`, and `IPropertyValueTransformer`.
49+
50+
#### Removed Types
51+
52+
* `Umbraco.Workflow.Core.ContentApprovals.ViewModels.DocumentConfigResponseModel`
53+
* `Umbraco.Workflow.Core.ContentApprovals.ViewModels.DocumentConfigUpdateRequestModel`
54+
* `Umbraco.Workflow.Core.ContentApprovals.ViewModels.DocumentTypeConfigUpdateRequestModel`
55+
* `Umbraco.Workflow.Core.ContentReviews.Models.ContentReviewsNodeQueryResponseModel`
56+
* `Umbraco.Workflow.Core.Models.Enums.IPermissionsModel`
57+
* `Umbraco.Workflow.Web.Api.Configuration.BackOfficeSecurityRequirementsOperationFilter`
58+
* `Umbraco.Workflow.Web.Api.Configuration.GenerateWorkflowSchemaDocumentFilter`
59+
* `Umbraco.Workflow.Web.Api.Configuration.SwaggerParameterAttribute`
60+
* `Umbraco.Workflow.Web.Api.Configuration.SwaggerParameterAttributeFilter`
61+
* `Umbraco.Workflow.Web.Api.Configuration.WorkflowOperationIdHandler`
62+
* `Umbraco.Workflow.Web.Api.Configuration.WorkflowSchemaIdHandler`
63+
64+
#### Removed Members
65+
66+
* `Umbraco.Workflow.Core.ApprovalGroups.Models.ApprovalGroupPermissionsDto.get_NodeId`
67+
* `Umbraco.Workflow.Core.ApprovalGroups.Models.ApprovalGroupPermissionsDto.get_ContentTypeId`
68+
* `Umbraco.Workflow.Core.ContentApprovals.Models.PermissionRequestModel.get_NodeId`
69+
* `Umbraco.Workflow.Core.ContentApprovals.Models.WorkflowSearchFilterModel.get_NodeId`
70+
* `Umbraco.Workflow.Core.ContentApprovals.Processes.IWorkflowInstanceResolver.CompleteForScheduler`
71+
* `Umbraco.Workflow.Core.ContentApprovals.Processes.IWorkflowInstanceResolver.CompleteNow`
72+
* `Umbraco.Workflow.Core.ContentReviews.Models.ContentReviewsScaffoldModel.get_Culture`
73+
* `Umbraco.Workflow.Core.ContentReviews.Models.ContentReviewConfigPoco.SplitPath`
74+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.GetEmailTemplateInfo`
75+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.GetEmailTemplateVirtualPath`
76+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.InstallTemplates`
77+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.GetViewEngineResult`
78+
* `Umbraco.Workflow.Core.AlternateVersions.Services.IPropertyValueTransformer.ForDisplay(IEnumerable<PropertyDataDto>, Guid, Guid)`
79+
* `Umbraco.Workflow.Core.AlternateVersions.Services.IPropertyValueTransformer.ForPersistence(IEnumerable<PropertyDataDto>, Guid, Guid)`
80+
* `Umbraco.Workflow.Core.Settings.ViewModels.WorkflowSettingsPropertiesViewModel.GeneralSettingsViewModel.get_DocumentTypeApprovalFlows`
81+
* `Umbraco.Workflow.Web.Api.Controllers.Email.InstallEmailTemplateController` (removed `install-sync` endpoint)
82+
* `Umbraco.Workflow.Web.Api.Controllers.Information.GetInformationController` (removed obsolete constructor overload)
83+
84+
#### Added Interface Members (Breaking)
85+
86+
* `Umbraco.Workflow.Core.ContentApprovals.Processes.IWorkflowInstanceResolver.CompleteForSchedulerAsync` (default implementation removed, now required)
87+
* `Umbraco.Workflow.Core.ContentApprovals.Processes.IWorkflowInstanceResolver.CompleteNowAsync` (default implementation removed, now required)
88+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.InstallTemplatesAsync` (default implementation removed, now required)
89+
* `Umbraco.Workflow.Core.Email.Interfaces.IEmailTemplateLocator.GetViewPath` (default implementation removed, now required)
90+
* `Umbraco.Workflow.Core.AlternateVersions.Services.IPropertyValueTransformer.ForDisplay(AlternateVersionDto)` (default implementation removed, now required)
91+
* `Umbraco.Workflow.Core.AlternateVersions.Services.IPropertyValueTransformer.ForPersistenceAsync` (default implementation removed, now required)
92+
93+
### Localization
94+
95+
Status localization keys in the `workflow` section have changed from integer-based to camelCase:
96+
97+
| Old Key | New Key |
98+
|---|---|
99+
| `status1` | `approved` |
100+
| `status2` | `rejected` |
101+
| `status3` | `pendingApproval` |
102+
| `status4` | `notRequired` |
103+
| `status5` | `cancelled` |
104+
| `status6` | `errored` |
105+
| `status7` | `resubmitted` |
106+
| `status8` | `cancelledByThirdParty` |
107+
| `status9` | `excluded` |
108+
| `status10` | `awaitingResubmission` |
109+
110+
This applies to both the XML language files (server-side) and TypeScript language dictionaries (client-side). Custom email templates or integrations referencing the old `statusN` keys must be updated.
111+
112+
### OpenAPI
113+
114+
SwaggerGen/Swashbuckle has been replaced with `Microsoft.AspNetCore.OpenApi`. The changes in Workflow follow those introduced in the CMS.
115+
116+
### Frontend
117+
118+
* TypeScript enums have been replaced with string-union types. If you reference Workflow enums in custom extensions, update to use the string values directly.
119+
* The `@umbraco-workflow/backoffice` NPM package has been restructured with static imports, reducing chunk count and overall bundle size. Custom extensions importing from the package should verify their import paths are still valid.
36120

37121
### Legacy version specific upgrade notes
38122

0 commit comments

Comments
 (0)