Releases: WordPress/wp-admin-sidebar
Release list
v0.1.10: Customizer follow-ups
What's changed
- Adds the auto-save customizer flow with Undo, Retry, Done, and Escape to close.
- Lets Escape cancel an active pointer drag before leaving customize mode.
- Adds returning drop target hints while reordering.
- Keeps row move menus quiet until hover or focus while preserving keyboard access.
- Stabilizes icon color and opacity across wp-admin color schemes and plugin icon types.
Notes for hosts
- No WPCOM integration adapter changes are required for this release.
- The release asset is the
wp-admin-sidebar.zippackage expected by the WPCOM vendoring script.
v0.1.9: release review follow-ups
Runtime review follow-ups for the wpcom vendoring release.
- Removes stale customize-mode move-menu code from the portable plugin.
- Improves admin color-scheme preview syncing by rechecking after both stylesheet load and delayed fallback timers.
- Bumps the plugin header and runtime constant to
0.1.9.
Verified on the public plugin test suite and on a JN site before release.
v0.1.8: public parity polish bundle
What's in this release
This release bundles the verified public parity polish for the redesigned wp-admin sidebar before the next wpcom vendoring pass.
Changes
- #64: default-expand My Plugins on first encounter.
- #65: replace the customize-mode hamburger icon with a clearer pencil entry point and tooltip.
- #66: keep groups expanded and locked while customize mode is active.
- #70: close the More options menu when the user starts dragging a row.
- #71: remove invalid group destinations from the per-item More options menu.
- #72: adopt wp-admin's native admin color-scheme accent at runtime, including Profile-screen live preview.
- #75: bump the plugin version to
0.1.8.
Install
Drop wp-admin-sidebar.zip into wp-admin's Plugins > Add New > Upload Plugin, or unpack it into wp-content/plugins/wp-admin-sidebar/.
Compat
No storage or API shape changes from v0.1.7.
v0.1.7 — emptied-group drop fix
What's in this release
Fix — drag-drop on a customize-mode group header now lands in that group's children-UL if the group is collapsed OR expanded-and-empty (previously only handled collapsed). Closes the "can't re-add items to an emptied group" bug: once the user has reassigned every item out of a group, the group's children-UL has zero content and the header is the only hit-target, but the prior code's branch fell through to continue when the group was expanded.
Surfaced while testing the Calypso-side mirror of this customizer; identical bug existed on both sides. Verified on the WPCOM sandbox via an in-tree-copy cherry-pick of the upstream fix.
Changes
- #50 — Fix: allow drag-drop into an emptied group's expanded header
Install
Drop wp-admin-sidebar.zip into wp-admin's Plugins → Add New → Upload Plugin, or unpack into wp-content/plugins/wp-admin-sidebar/. No DB or activation-state changes from v0.1.6.
Compat
No breaking changes from v0.1.6.
v0.1.6 — Customize-mode hover-paint suppression bundle
What's in this release
Fix bundle — host-CSS hover paint no longer leaks onto inert customize-mode rows. The v0.1.3 + v0.1.4 customize-mode rules covered :hover on the LI, but several paint paths weren't reached:
- LI hover bg on hosts that paint at the LI level (notably WPCOM's wp-admin chrome — vanilla wp-admin paints at the
<a>level, already covered) .opensub > a.menu-toppaint after core's hover-intent JS adds the class on a ~200ms delay.wp-menu-image::beforeicon-color override that soft-greyed icons on hover (read DES-605 literally — no hover paint at all)- Reassignable rows showing the same blue bg + left-edge box-shadow stripe through the inner anchor
- Right-edge
::afterarrow on items with submenus (the "submenu opens here" affordance — irrelevant when flyouts are disabled)
Net effect: inert rows in customize mode stay visually inert across the full hover → hover-intent → opensub state machine, on every host.
Changes since v0.1.5
- #48 — Customize-mode hover-paint suppression bundle (4 commits)
Compatibility
- WordPress 6.5+
- PHP 8.0+
Sources
- Tag:
v0.1.6(commita7d71c6) - Source archive:
wp-admin-sidebar.zipattached
v0.1.5 — Targeted plugin-injected-separator hide (closes #25)
What's in this release
Fix: Plugin-injected separators in the wp-admin sidebar are now hidden when the redesigned sidebar is active. Targeted CSS-only fix that hides wp-menu-separator elements injected by 3rd-party plugins (so the redesigned grouping doesn't show stray gaps).
Caveat per PR review: this is a class-ordering-dependent hide rule and may need revisiting if WordPress Core's class ordering changes. See PR #45 discussion for context.
Changes since v0.1.4
Compatibility
- WordPress 6.5+
- PHP 8.0+
Sources
- Tag:
v0.1.5(commit532ea14) - Source archive:
wp-admin-sidebar.zipattached
v0.1.4 — Plugins group polish, label ellipsis, signal rendering, folded-state + sticky-menu fixes
v0.1.4 lands a batch of design follow-ups, mostly on the Plugins group and customize-mode interactions, plus a couple of cross-cutting bug fixes.
What changed
Plugins group → "My Plugins"
- Renamed
Plugins→My Plugins. Disambiguates from the core Plugins admin area, leaves room for the inline attention dot to sit next to the label (matching wp-admin's nativeUpdates [1]pattern). (#31, #38) - New chevron-down icon rendered via CSS mask, sized to match the customize icon. Both icons hover-fade
0.7 → 1with matching timing. (#31) - Chevron moved out of the toggle button (nested
<button>is invalid HTML), placed as a header sibling. A JS click-delegate on the chevron callstoggle.click()so clicking it still toggles expand/collapse. (#31) - Header tightened: 34px height (matches wp-admin's top-level item baseline),
box-sizing: border-box, padding4px 4px 4px 8px(left-8 aligns label with menu-item icon column), 16px top spacing to separate from the row above, hover-bg removed. Toggle and label are flex-shrinkable withtext-overflow: ellipsisfor longer future labels. (#31)
Customize mode
- Plugin labels stay on a single line in customize mode.
.wp-menu-namegotoverflow: hidden,white-space: nowrap,text-overflow: ellipsisso long names like "LiteSpeed Cache" / "WooCommerce" no longer wrap and break drag-target predictability. (#34) - Customize button tooltip —
Customize pluginsshows on hover/focus-visible above-and-right of the button, 250ms show-delay, 100ms hide. CSS-only viadata-tooltip+::afterwith matchingaria-label. (#20) - Collapse Menu stays visible (disabled) in customize mode instead of being removed, so the layout doesn't jump on enter/exit. Disabled state: opacity 0.4, cursor not-allowed,
pointer-events: none,tabindex="-1",aria-disabled="true". Selector covers both<a>(legacy) and<button id="collapse-button">(wp-admin 6.9+). (#18)
Visual fixes
- Group-header hover no longer paints child icons blue. wp-admin's
li.menu-top:hover .wp-menu-image::beforecascade was bleeding through to all children of the group LI; now only the actually-hovered child picks up the hover blue. (#36) - Item-level signals render for
countandbadgetriggers, not justnumeric_badge. Children that fired attention via count (e.g. Payments, Yoast SEO withcount-1) now show an inline badge matching native wp-admin'sUpdates [1]styling — circular for single digits, pill for multi-digit. Badge appended inside.wp-menu-nameso it sits next to the label, not on a new line. (#40)
Folded sidebar
- Folded state shows only the chevron for the My Plugins group, centred in the icon column, matching peer top-level items. Click-to-toggle still works. (#33)
- Folded-state CSS gated to ≥783px so the ≤782px mobile drawer keeps the full group header alongside the rest of the sidebar items. (#42)
Bug fixes
- No more empty band at the top of the sidebar after collapsing/expanding the My Plugins group on long admin pages. Toggle now dispatches a synthetic
resizeevent so wp-admin'ssetMenuPositionreflows the sticky menu against the new height. (#44)
Tests
PHP test suites pass on trunk. JS/CSS changes are covered by manual verification (per-PR test plans).
Requires
- WordPress 6.5+
- PHP 8.0+
License
GPL-2.0-or-later.
v0.1.3 — customize-mode polish, drag-drop polish, flyout fix
v0.1.3 lands the first batch of post-Reddit-launch design follow-ups, plus a small bug fix surfaced while testing them.
What changed
Customize-mode polish
- Plugin submenus collapse and stay closed during customize mode. When you click the Plugins customize icon, every plugin submenu in the sidebar collapses and hovering a row no longer opens its flyout — keeping the canvas calm while you reorder. On exit, your pre-customize hover state is restored. (#11)
- Non-draggable rows are inert in customize mode. Reassignable items already had no link-follow on click (drag-drop intercepts) and a grab cursor — they read as edit-only. The rest of the sidebar (Dashboard, Posts, Pages, Users, etc.) now matches: no hover paint, no
hreffollow. The.current(selected page) indicator stays visible so you still know where you are. Group headers stay interactive. (#24)
Drag-drop polish
- Ghost preview matches the source row's dimensions. No more "lifted = grown" effect — the floating preview uses the exact width and height of the row you grabbed, so alignment with drop targets is direct.
- Drop indicator spans the full sidebar width. The half-width line is gone; the indicator now stretches edge-to-edge, making the insertion point unambiguous.
- Row hover paint is suppressed during a drag. While you're dragging a plugin item, sidebar rows the cursor passes over no longer light up with their hover/selected state — the drop indicator is the single visual signal of where the item will land.
- All three changes ship as (#12).
Bug fix
- Submenu flyouts no longer clipped inside the Plugins group. Hovering a plugin item with submenus inside the expanded Plugins group used to swallow the flyout because the group's children container clipped overflow. The flyouts now appear correctly. (#22)
Tests
All four PHP test suites pass: test-grep-no-wpcom-tokens.php, test-signals.php (13/13), test-normalizer.php (7/7), test-rest.php (25/25).
Requires
- WordPress 6.5+
- PHP 8.0+
License
GPL-2.0-or-later.
v0.1.2 — strip admin-bar toggle + restore install-is-the-opt-in default
v0.1.2 carries two related changes that together restore the plugin's original design framing for plain-WP enablement.
What changed
- Removed the admin-bar opt-in toggle. The "Try the new sidebar" / "Restore default sidebar" admin-bar node and its
admin_initGET handler are gone from the bootstrap. - Restored "install is the opt-in" as the default. The
wp_admin_sidebar_enabledfilter now returnstruefor any logged-in user. Activating the plugin enables the redesign site-wide; deactivating reverts.
Together these eliminate a stranded "default-off-no-UI" state. Hosts that need finer control (per-blog, per-user, percentage rollout) override wp_admin_sidebar_enabled from a host adapter.
Why
- A top-bar toggle entry was heavier than this feature warranted.
- The toggle UI was leaking onto host environments where the gate is bound externally (e.g., a managed-WordPress host using its own per-blog feature flag), creating click-targets that did nothing visible.
- The right opt-in surface is a design question we'd rather take deliberately than inherit. Tracked in #16 — Explore opt-in / opt-out mechanism for the redesigned sidebar.
What stays
- The
wp_admin_sidebar_enabledfilter itself. WP_ADMIN_SIDEBAR_FORCE_ENABLED/WP_ADMIN_SIDEBAR_FORCE_DISABLEDconstants (dev override + kill switch).- Data-preserving deactivation: saved layouts persist across deactivate / reactivate cycles.
Tests
All four PHP test suites pass: test-grep-no-wpcom-tokens.php, test-signals.php (13/13), test-normalizer.php (7/7), test-rest.php (25/25).
Requires
- WordPress 6.5+
- PHP 8.0+
License
GPL-2.0-or-later.
v0.1.1 — rebrand pass: WordPress/ canonical home, generic identifiers
Cosmetic release — runtime is unchanged from v0.1.0. This release rebrands the public-plugin identifiers to neutral, host-agnostic names so the source no longer surfaces unexplained wpcom-prefixed names. The runtime behaviour, public extension API, and data shapes are byte-identical to v0.1.0.
What changed
Identifiers (CSS, JS globals, DOM data attributes, PHP @package)
- Body class
wpcom-sidebar-active→wp-admin-sidebar-active - CSS classes
wpcom-sidebar-*/wpcom-admin-sidebar-*→wp-admin-sidebar-* - JS global
window.wpcomAdminSidebarData→window.wpAdminSidebarData - Script handles
wpcom-admin-sidebar-*→wp-admin-sidebar-* - DOM data attributes
data-wpcom-{item-id,menu-slug}→data-wp-admin-sidebar-{item-id,menu-slug} - DOM
dataset.wpcomSidebarReady→dataset.wpAdminSidebarReady - PHP
@package WPCOM_Admin_Sidebar→WP_Admin_Sidebar
Kept (with explicit explanatory comments) — backward-compat / migration-cycle:
wpcom_admin_sidebar_layoutsuser-meta key (saved data carry-over from incubation as a WordPress.com mu-plugin; renaming would orphan saved layouts).- Legacy filter aliases
wpcom_admin_sidebar_*continue to fire one cycle viaapply_filters_deprecatedand emit deprecation notices when callbacks attach. Drops in v0.2.x. - Legacy admin-ajax action
wp_ajax_wpcom_admin_sidebar_layout_savecontinues to fire one cycle. Drops in v0.2.x. - Legacy function-name wrappers
wpcom_admin_sidebar_default_registry()andwpcom_admin_sidebar_unknown_default()continue to work (with_deprecated_functionnotices). Drops in v0.2.x.
URL rebrand
- Plugin URI:
github.com/Automattic/wp-admin-sidebar→github.com/WordPress/wp-admin-sidebar(the staging repo atAutomattic/wp-admin-sidebarwas archived 2026-05-05; this is the canonical home). - README, CONTRIBUTING, SECURITY URL refs: same.
- Dropped the
wp-admin-sidebar.php"staging notice" docblock paragraph (no longer staging).
Test suite (PHP unit-style, no toolchain dependency)
- All 4 suites pass clean: grep gate (no host-platform tokens leaked into
/src/), REST validate-delta 25/25, signals 13/13, normalizer 7/7.
Try it
The Playground demo (boots WP with The Events Calendar + Contact Form 7 + Classic Editor + Query Monitor + this plugin pre-activated) runs from the Playground link — entirely in-browser, no install needed.
Requires
- WordPress 6.5+
- PHP 8.0+
License
GPL-2.0-or-later.