Add customization options to tailored navigation sidebar
What does this MR do and why?
Tailored navigation is the right default for most users. Showing only pinned items reduces cognitive load and avoids designing the sidebar around a narrow set of advanced workflows. Keeping a feature permanently visible is not the same as driving its adoption.
Admins, owners, and maintainers face a different problem. The change is disruptive to workflows they've built over time, and without clear context for why it happened, the experience feels like regression. The category structure was a mental map they'd internalized, and pinning alone doesn't fully replace it.
To bridge that gap, this MR adds a way to customize the tailored sidebar without giving up the pinned-only default. Users open a Customize sidebar dropdown — an ellipsis button in the group and project context header — rather than digging through the feature library modal. The control is a single-select listbox, so the options are mutually exclusive by construction. The choice is persisted in localStorage, and the dropdown only appears while the hide_unpinned_sidebar_items feature flag is active.
The listbox offers three navigation modes, ordered from least to most expansive:
- Flat (Pinned only) — the default pinned-only flat list.
- Organized (Pinned in categories) — pinned items grouped under their parent category. Each group is labelled with the category name, and the feature keeps its own icon rather than a category icon. Groups follow the natural navigation order, and items stay reorderable within a group. When the sidebar is collapsed to icons, the groups flatten into a single list of icons separated by dividers, since there's no category header to show.
- Everything (All categories) — restores the full navigation category structure inline.
Selecting a mode fires a single internal event, select_sidebar_navigation_mode_in_sidebar_preferences. The event carries the chosen mode as a property — pinned_only, grouped_pins, or all_categories — so each option can be counted directly instead of being inferred from on/off toggle pairs.
References
Feedback : Feature library + tailored navigation (#604008 - closed) • Austin Regnery
Screenshots or screen recordings
| Expanded | Collapsed | |
|---|---|---|
| Flat | ![]() |
![]() |
| Organized | ![]() |
![]() |
| Everything | ![]() |
![]() |
How to set up and validate locally
- Enable the
hide_unpinned_sidebar_itemsfeature flag. - Visit a project or group; open the "Customize sidebar" control (ellipsis) in the sidebar context header.
- Select each mode and confirm:
- Flat (Pinned only): pins shown as a flat list.
- Organized (Pinned in categories): pins grouped under category headings; collapse one category and reload — each category keeps its own collapse state.
- Everything (All categories): full navigation shown.
- Confirm the selection persists across reloads (localStorage).
- Screen reader: confirm the navigation list is announced with the context title only (not "Customize sidebar").
Note: Preferences are persisted to
localStoragefor now. DB-backed persistence (so the setting follows the user across browsers and devices) is deferred to a follow-up.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.





