What's Changed
π Notable Changes - Testing encouraged and appreciated!
- Global Elements: Initial implementation by @kjac in #21431
- Open API: Use
Microsoft.AspNetCore.OpenApifor Open API document generation by @lauraneto in #21058 - Delivery API: Generate typed OpenAPI schemas per content type by @lauraneto in #22666
π₯ Breaking Changes
- Obsolete Code: Remove obsolete methods and constants relating to allowed application and start node claims by @erikjanwestendorp in #20124
- Umbraco Helper: Align
GetDictionaryValuenullability with behaviour by @AndyButland in #21372 - Entities: Prevent changing Key property on existing entities by @AndyButland in #21374
- Global Elements: Refactor content and element repositories into a common base by @kjac in #21637
- Code Clean-up (18): Remove obsoleted code flagged for removal and address
TODOcomments by @NguyenThuyLan in #21980 - Dependencies: Update selected dependencies to latest major versions by @NguyenThuyLan in #22060
- Dependencies: Upgrade NUnit and related test dependencies to latest major versions by @NguyenThuyLan in #22155
- Webhooks: Change the default payload type to "minimal" by @kjac in #22217
- Code Clean-up (18): Remove obsoleted code flagged for removal (Part 2) by @NguyenThuyLan in #22137
- Content Types: Granular content type change types by @kjac in #22223
- Elements: Add flag support for pending changes and scheduled publish by @lauraneto in #21877
- EF Core: Align casing of EF Core code constructs (closes #22247) by @AndyButland in #22313
- Code Clean-up (18): Resolve V18 TODO comments by @NguyenThuyLan in #22357
- Code Clean-up (18): Remove obsoleted code flagged for removal (Part 3) by @NguyenThuyLan in #22335
- Deprecations: Client-side removal of v18 deprecated code by @leekelleher in #21984
- Elements: Cleanup element TODOs in infrastructure by @kjac in #22443
- Hybrid Cache: Element cache by @lauraneto in #22369
- Hosting: Make
IHostingEnvironment.ApplicationMainUrlnullable by @AndyButland in #22558 - Code Tidy: Clean up further obsoleted code scheduled for removal in Umbraco 18 (
IEmailSender,MemberConfigurationResponseModel,MediaPermissions) by @AndyButland in #22642 - Code Tidy: Clean up obsoleted code scheduled for removal in Umbraco 18 (
IMemberGroupService) by @AndyButland in #22632 - Templates: Rename "Master Template" to "Layout Template" by @nul800sebastiaan in #21743
- Code Tidy: Clean up further obsoleted code scheduled for removal in Umbraco 18 (
LogFiles, legacy permissions tables,LoggerConfigExtensions) by @AndyButland in #22679 - Code Tidy: Remove obsolete code scheduled for removal in Umbraco 18 (
UrlSegmentextension method) by @AndyButland in #22682 - Code Tidy: Remove obsolete code scheduled for removal in Umbraco 18 (
UmbracoApiControllerand front-end API auto-routing) by @AndyButland in #22692 - Code Tidy: Clean up further obsoleted code scheduled for removal in Umbraco 18 (
IMemberService.GetMembersByPropertyValue) by @AndyButland in #22678 - Dependencies: Bump selected NuGet packages to latest versions by @AndyButland in #22693
- Migrations: Removed obsoleted
MigrationBaseand all migrations between old and current LTS (13-17) by @Migaroez in #22618 - Code Tidy: Clean up obsoleted code scheduled for removal in Umbraco 18 (
IDataTypeService) by @AndyButland in #22634 - Code Tidy: Clean up obsoleted code scheduled for removal in Umbraco 18 (
IDomainService,IContentTypeBaseService) by @AndyButland in #22629 - Code Tidy: Make name non-nullable on content/element/media/member constructors by @AndyButland in #22638
- Code Tidy: Clean up further obsoleted code scheduled for removal in Umbraco 18 (
ILocalizationService) by @AndyButland in #22677 - Code Tidy: Remove unused obsoleted
InstalledPackagemapping by @Migaroez in #22713 - Elements: Clean up the remaining TODOs by @kjac in #22689
- Code Tidy: Clean up further obsoleted code scheduled for removal in Umbraco 18 (
IFileService) by @AndyButland in #22675 - Code Tidy: Remove obsolete
MoveEventInfo.NewParentby @Migaroez in #22728
π Internal
- Elements: Split content type validation for create and update by @lauraneto in #21906
- Localization: Remove unused recycleBin keys from XML language files by @lauraneto in #22299
- Change Element migrations to a premigrations by @Migaroez in #22617
- Claude MD: Code Comments by @nielslyngsoe in #22690
- Management API: Refactor element tree controllers to use start node filter service by @lauraneto in #22598
- Code Tidy: Remove package validation suppression files by @AndyButland in #22696
- Current User: Fix reload not fetching fresh data when entity events fire by @madsrasmussen in #22719
- Backoffice Mocks: Derive user language access from user groups by @madsrasmussen in #22721
- Login: Consume sibling Umbraco.Web.UI.Client by source for v18 parity by @iOvergaard in #22591
- Login: Reuse backoffice localization (closes #20082) by @iOvergaard in #22743
- QA: E2E: Added v18/dev so it runs on the nightly test pipeline by @andr317c in #21902
- E2E: QA Added acceptance tests for global elements by @nhudinh0309 in #21608
- E2E: QA Remove @smoke tags from element tests (temporary) by @nhudinh0309 in #22363
- E2E: QA: fixed outdated acceptance tests to match frontend changes by @andr317c in #22590
- E2E: V18 Fixed the failing smoke tests by @nhudinh0309 in #22248
- Tests: Set AllowedInLibrary on element content type in permission tests by @lauraneto in #21908
- E2E: QA: Merge moved testhelpers/builders from 17 to 18 by @andr317c in #21970
- E2E: QA Added acceptance tests for reference tracking info tab of elements by @nhudinh0309 in #21949
- E2E: QA Added acceptance tests for element picker in content and element by @nhudinh0309 in #21745
- E2E: QA Added .skip tags to failing acceptance tests due to known issues by @nhudinh0309 in #22122
- QA: Fix element tree integration tests and SQL Server container service error by @andr317c in #22130
- E2E: QA Updated acceptance tests in v18 due to the auth changes by @nhudinh0309 in #22110
- E2E: QA Added acceptance tests for audit trail in content by @nhudinh0309 in #22479
- E2E: QA Updated acceptance tests for Global elements to match the UI changes by @nhudinh0309 in #22511
- E2E: QA Added acceptance tests for backoffice login, logout and reset password by @nhudinh0309 in #22635
π¦ Dependencies
- UUI: Updates to UI Library version 2.0.0-alpha.1 by @iOvergaard in #21994
- Bump the npm_and_yarn group across 3 directories with 3 updates by @dependabot[bot] in #22578
- Bump lodash from 4.17.21 to 4.18.1 in /src/Umbraco.Web.UI.Client by @dependabot[bot] in #22723
- Build: Upgrade @hey-api/openapi-ts to 0.97 by @iOvergaard in #22735
- build(deps): bumps @umbraco-ui/uui from 2.0.0-alpha.1 to 2.0.0-rc.0 by @iOvergaard in #22827
π Accessibility Improvements
- Accessibility: Added missing labels to number fields in the settings tab by @andreaslborg in #22667
π New Features
- Elements: Implement validation for Element editing endpoints by @lauraneto in #21562
- Elements: Add reference tracking and recycle bin query support by @lauraneto in #21481
- Elements: Add restore from recycle bin functionality by @lauraneto in #21556
- Global Elements: Reference Tracking UI by @leekelleher in #21710
- Global Elements: Workspace Validation UI by @leekelleher in #21711
- Global Elements: Rollback UI by @leekelleher in #21712
- Elements: Add reference settings support by @lauraneto in #21601
- Elements: Add AllowedInLibrary flag to content types with dedicated endpoint by @lauraneto in #21723
- Elements: Add audit log retrieval endpoint and UI support by @lauraneto in #21777
- Content Version Cleanup: Include element versions in the background cleanup job by @lauraneto in #21839
- Elements: Add scheduled publishing support for elements by @lauraneto in #21796
- Elements: Replace block keys on element copy and save by @lauraneto in #21814
- Elements: Add permission-based filtering to element tree endpoints by @lauraneto in #21729
- Recycle Bin: Adds destination overrides to
restoreFromRecycleBinentity-action kind by @leekelleher in #21867 - Elements: Add missing notifications to element container and element editing services by @lauraneto in #22012
- Global Elements: Add "Allowed in library" toggle to Document Type structure view by @leekelleher in #21875
- Global Elements: Adds "Start Node" and "Ignore User Start Nodes" to Element Picker configuration by @leekelleher in #22255
- Global Elements: Recycle Bin UI by @leekelleher in #21872
- Global Elements: Create options with allowed types and
entityCreateOptionActionextensions by @leekelleher in #22265 - Current User: Adds Current User workspace modal by @NguyenThuyLan in #22268
- Redirect Url Management: Implement workspace by @Zeegaan in #22624
- Elements: Clear element entity cache on content type changes by @iOvergaard in #22362
- Blocks: Adds
blockActionextension type by @leekelleher in #22459 - Elements: Published element extensions by @lauraneto in #22585
- Global Elements: Implements
auditLogandcontentRollbackkinds for History and Rollback by @leekelleher in #22633 - Elements: Add the Library section to the admin group on upgrade by @kjac in #22706
- Elements: Add elements to the backoffice global search by @lauraneto in #22674
- Global Elements: User permissions for Element Folders by @leekelleher in #22274
- Open API: Add fluent builder for registering custom backoffice OpenAPI documents by @lauraneto in #22774
- v18 login photo by @nielslyngsoe in #22814
- System information: Adds
__uuiVersionsto sysinfo output by @iOvergaard in #22831
π Bug Fixes
- Global Elements: Exports all constants for
@umbraco-cms/backoffice/elementby @leekelleher in #21727 - Global Elements: UI refinements, element picker and constants tidy-up by @leekelleher in #21737
- Elements: Fix delete blocked by trash-tracking relation by @lauraneto in #21725
- Elements: Add webhooks support by @kjac in #21697
- Fix the integration tests project file structure by @kjac in #21766
- Repository Caches: Fix GUID cache key prefix in PublishableContentRepositoryBase by @lauraneto in #21836
- Elements: Add missing documentation endpoint attributes by @lauraneto in #21979
- Elements: Treat local elements as global elements by @kjac in #21795
- fix(media): allow focal point to be set to null in image cropper by @Francluob in #21340
- Form Control: only validate if value was changed during focus by @nielslyngsoe in #21815
- Elements: Fixes
HasChildrenfor Element Folder entities by @leekelleher in #22142 - Elements: Clean up container relations before deleting them by @kjac in #22154
- Library: remove library sidebar app + menu by @nielslyngsoe in #22139
- Build: Cherry pick #22164 for V18 by @nhudinh0309 in #22165
- User Permissions: Resolve and persist element start node IDs when updating a user by @lauraneto in #22297
- Elements: Add PublishedCultures and UnpublishedCultures to ElementCacheRefresher by @lauraneto in #22302
- Global Elements: Element Tree Item "Draft" state by @leekelleher in #22228
- Global Elements: Workspace UI updates: split view, variant selector, save modal, and pending changes by @leekelleher in #21897
- Management API: Fix ambiguous constructor in PasswordConfigurationPresentationFactory by @nikolajlauridsen in #22391
- Elements: Align
ElementPermissionServicefor performance improvements by @kjac in #22405 - Rendering: Use explicit dependency instead of access-via-casting by @kjac in #22442
- Elements: Cleanup element TODOs in core by @kjac in #22399
- Tests: Fix unit test build by @lauraneto in #22453
- Document Types: Prevent disabling isElement when elements of that type exist by @lauraneto in #22454
- Collection Action: Refactor to use extension-with-api-slot by @engijlr in #21974
- Output Caching: Evict cached documents when a related element is published by @AndyButland in #22496
- Integration Tests: Split Windows ManagementApi shard to avoid LocalDb memory pressure by @andr317c in #22559
- Dependencies: Revert NUnit 4 upgrade to unblock integration tests by @andr317c in #22562
- Handle "broken" ancestor publish path in legacy routing by @kjac in #22586
- Fix the NullableLanguageId build errors after merge by @kjac in #22589
- Document Types: Show message for non-applicable Element Type settings by @engijlr in #22396
- Add a constant for the "unroutable content" route by @kjac in #22593
- Member surface controllers: Add XML documentation and unit test coverage by @AndyButland in #22584
- Health Check: Add check for untrusted database constraints on SQL Server by @AndyButland in #22592
- Variant-Selector: improve visual alignment for segments by @nielslyngsoe in #22605
- Link picker: Added swedish translations for link picker (closes #22542) by @andreaslborg in #22596
- Public Access: Honour custom
IMemberGroupServicein backoffice dialog (closes #22580) by @AndyButland in #22588 - Migrations: Align type attribute casing in locallink migration for integer-based legacy links (closes #22597) by @AndyButland in #22599
- Collection: Add table kind collection view by @madsrasmussen in #22163
- Integration tests: Tolerate deadlocks in concurrent external login test by @AndyButland in #22583
- Rich Text Editor: Mark as supports read only by @nielslyngsoe in #22600
- Current User: Reload when the current user or their groups change by @madsrasmussen in #22623
- Content Rollback: Add notification message meta property by @leekelleher in #22631
- Enable single blocklist migration by @Migaroez in #22627
- Revert fix for making block editors read-only in trashed documents which causes a regression in certain multi-lingual block editing scenarios (closes #22472, re-opens #21973) by @nielslyngsoe in #22656
- Cache: Do not assume "published" when unpublishing a single culture by @kjac in #22662
- Ensure published querying parity between V13 and V17 by @kjac in #22622
- Media: Record the trashing user against the History audit entry (closes #22661) by @AndyButland in #22668
- Localization: Use invariant culture when parsing node paths (closes #22610) by @AndyButland in #22625
- Routing: Ensure
IPublishedContent.UrlSegmentrespectsumbracoUrlName(closes #22655) by @AndyButland in #22663 - Global Elements: Localize bulk publish/unpublish notifications by @leekelleher in #22641
- HttpClients: Deprecate unused
HttpClientregistered with certificate validation bypass by @NguyenThuyLan in #22684 - E2E: Revert npm command for smokeTest by @nhudinh0309 in #22683
- Document Type Workspace: Hide non-applicable settings when Document Type is configured as Element Type by @engijlr in #22388
- Code Quality: Add
ModelStatevalidation toBackOfficeLoginControllerby @NguyenThuyLan in #22681 - Templates: Update Umbraco extension template for OpenAPI route changes by @lauraneto in #22670
- Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996) by @AndyButland in #22422
- Document picker: show ancestor breadcrumb path in document picker search results (closes #22645) by @andreaslborg in #22649
- User management: Improved error message when deleting active user (closes #22669) by @NillasKA in #22687
- Property Editor UI Picker: Implement fuzzy search by @nielslyngsoe in #22468
- Validation: fix data lookup mismatch for JSON Path Queries by @nielslyngsoe in #22609
- Content Workspace: Add variant sync when switching app culture (closes #16853) by @engijlr in #22566
- Accessibility: Added missing labels to add property and create new collection by @andreaslborg in #22701
- MD: improve knowledge on get vs consume context by @nielslyngsoe in #22676
- Backoffice: Introduce Value Type and Value Summary extensions by @madsrasmussen in #22481
- State System: more tests, MD updates and a tiny bit more consistency by @nielslyngsoe in #22673
- Tags: Close suggestion dropdown on blur and escape (closes #22636) by @andreaslborg in #22650
- Caching: Invalidate published content type cache for element types by @AndyButland in #22704
- Delivery API: Drop $type discriminator from response payloads by @lauraneto in #22710
- E2E: QA Updated acceptance tests to reflect UI changes in v18 by @nhudinh0309 in #22709
- Management API: Override document-level security on AllowAnonymous endpoints by @iOvergaard in #22712
- Update SupportsBlockLayoutAlias obsoletion timeframe by @Migaroez in #22715
- Languages: Sort the global content language selector (closes #22628) by @AndyButland in #22711
- Dashboard: Browser title + Hints by @nielslyngsoe in #22517
- Radio button list: Not saving value on keyboard navigation (closes #22698) by @andreaslborg in #22699
- Backoffice QA: Add client-side tests for Webhook item, detail and collection repositories by @madsrasmussen in #22524
- fix(installer-user): added min length message for installer user elem⦠by @Yinzy00 in #21829
- E2E: QA Update test setup for custom property editor (close #22703) by @NguyenThuyLan in #22708
- File-system Services: Complete child scopes on read-miss and validation-failure paths by @AndyButland in #22717
- MD files for Design knowledge by @nielslyngsoe in #22725
- Typeloader: Comply with public obsoletion by making the Properties internal by @Migaroez in #22726
- Clarified BackOfficeTokenCookieSettings obsoletion message by @Migaroez in #22727
- Fix main branch after merge issue by @AndyButland in #22729
- Delivery API: Fix broken discriminator mapping refs for polymorphic schemas by @lauraneto in #22733
- Elements: Disable inaccessible parent folders in element tree by @lauraneto in #22749
- Open API: Skip operation ID generation for non-controller endpoints by @lauraneto in #22760
- 18.0-beta1: Elements: Show trashed folder ancestor names in breadcrumb (closes #22768) by @AndyButland in #22780
- 18.0-beta1: User Management: Invalidate cached element start nodes on user save and fix access summary display (closes #22770) by @AndyButland in #22779
- Tiptap RTE: Ignore no-op transactions in onUpdate to prevent phantom dirty state (closes #22767) by @AndyButland in #22781
- Distributed background jobs: Improve gracefull shutdown behaviour by @Migaroez in #22796
- Content: Ensure correct variant change tracking when unpublishing variant content by @kjac in #22799
- 18.0-beta1: Recycle Bin: Fix empty action button in collection view (closes #22798) by @AndyButland in https://github.com/lauraneto/Umbraco-CMS/issues/22811
- Sort Children: Show loading state on Sort button (closes #22651) by @AndyButland in https://github.com/lauraneto/Umbraco-CMS/issues/22813
- User Permission: Re-export fallback condition config type and global augmentation by @ronaldbarendse in https://github.com/lauraneto/Umbraco-CMS/issues/22794
- UI: UI Library adjustments for v18 by @nielslyngsoe in #22824
New Contributors
- @Francluob made their first contribution in #21340
Full Changelog: release-17.4.0-rc3...release-18.0.0-beta1