Added Duplicate control on the Layouts tab (copies permissions + customizations). (#144)
Changed
Softened CP sidebar divider chrome for Craft 5 — line–label–line with muted hairline/text tokens instead of the solid dark label badge from Craft 3/4.
Layout selection for multi-group users now prefers layout table order (sortOrder) over Craft’s user-group order. (#150)
Manual URLs expand Craft env variables / aliases at render (App::parseEnv), then {site} / {siteHandle} tokens. (#128)
Fixed
New Craft/plugin nav items now insert between their Craft default neighbours when the layout overlay still has frozen sorts from before those items existed (e.g. Entries after adding a section no longer lands after Assets on a key tie-break).
6.0.0-beta.1 2026-08-07
Added
Added React control panel nav builder replacing the legacy Garnish flat-table UI.
Added nav sources pipeline (NavSources / NavSourceBuilder) that captures Craft’s live CP nav (Cp::nav() / Cp::EVENT_REGISTER_CP_NAV_ITEMS) with fingerprint caching.
Added nav customizations overlay in project config (customizations.nodes) — only admin overrides are persisted (order, visibility, labels, icons, manual items, dividers).
Added resolve + render stack (NavResolver, NavRenderer, NavPermissions) injecting the resolved tree via Craft’s nav registration event.
Added builder APIs for create/update/delete/reorder/indent/outdent/reparent, layout reset, and sources refresh.
Added dismissible new items notice when registry keys appear that aren’t yet acknowledged.
Added custom SVG icon support via asset upload (local filesystem path or remote asset contents).
Added {site} / {siteHandle} token substitution for manual URLs at render.
Added console commands cp-nav/migrate-customizations and cp-nav/audit-customizations (with --fix).
Added public events NavResolver::EVENT_MODIFY_RESOLVED_NAV and NavCustomization::EVENT_AFTER_SAVE_NODE / AFTER_REMOVE_NODE / AFTER_SET_NODES.
Added Pest integration test harness covering sources parity, merge/default-position insert, read-only PC safety, builder APIs, and edge cases.
Changed
Frontend assets reorganised under src/web/assets/{builder,settings,sidebar} — each owns its dist/; builder uses nystudio107/craft-plugin-vite + manifest.
Control panel page views never write project config — sync-on-read / _checkUpdatedNavItems behaviour is gone.
New Craft/plugin nav items insert at their default Craft position among siblings (not append-to-end).
Reset layout clears the customization overlay for that layout (returns to live Craft/plugin order) instead of recreating snapshot rows.
Project config shape moves layout nav data under cp-nav.layouts.{uid}.customizations.nodes.{encodedKey}.
Layout priority for users in multiple groups is the first matching layout by ascending sortOrder.
Nesting depth is capped at two levels (Craft sidebar alignment).
Plugin settings tab removed — reset lives on the builder header for the selected layout; plugin gear still opens the builder.
Craft Icon picker removed from the node editor; override icons only via Custom Icon (SVG asset). Registry/migrated icon values still render.