cmux-next sidebar: group color picker with theme colors, custom hex and emoji (cx-25az)
Summary
cx-25az: let people pick a group's color and emoji, and make the group header subtler. Builds on #18991 (landed), which added the theme-color headers and the stable default order.
-
Subtler header (Leo's screenshot feedback). The header no longer has a full pastel fill.
- The group's color is a dot on the group line, and the line runs from the dot to the last member.
- The name uses the sidebar's text color and lines up with the members' titles.
- Hover and drop fills look like a row's, right of the line.
- The faint vertical dots became the icon pack's three-dot
action.morebutton; cx-a9h6 (#19019) turns it into the full menu.
-
Theme colors. The editor's existing dots are the active theme's palette: none, then the ANSI accents.
-
Custom color. A new icon-only dot after the palette opens the system color panel, which has a wheel, sliders and a hex field.
- The group's color is stored as
#RRGGBB, a value the daemon already accepts for group colors. - Once chosen, the dot shows that color with the chosen ring.
- The header and line keep a custom color readable over the sidebar, and the ink is black or white by contrast.
- The group's color is stored as
-
Emoji. A new icon-only button runs
workspaceGroup.setIcon. That opens the shared icon picker, emoji included, so this is the same path as the menu and palette. -
Every entrypoint.
workspaceGroup.setColorand the sidebar bridge now take aGroupTint, either a token or a hex color. The CLI, palette and editor all accept#RRGGBB. -
The color and emoji controls are icon-only, never full width (Lawrence's decision on the bead).
-
Review fixes:
- The emoji and custom color controls keep a new empty group, which the editor's close used to delete first.
- The shared color panel gives back its target and settings when it closes.
-
Known gap: undo of Ungroup or Delete restores a custom color as no color, because the create intent still carries a palette token.
Testing
- No test added. The no-unit-tests rule applies, and the debug socket doesn't expose group colors, so there is no behavior boundary to assert on.
- Fleet CmuxNext suites pass on b7f4396 (51 PASS, the base merge with the icon pack). The iOS package lint passes. The emoji button draws
face.smilingthrough the pack's SF Symbol path (SidebarIconButton(symbol:)), because the pack has no emoji icon. - The two new strings (
sidebar.groupColor.custom,sidebar.groupEditor.emoji) are in all 21 locales of the sidebar catalog.scripts/localization_catalog.py checkreports nothing for this catalog; its repo-wide count is the same as base. - Not yet checked on a Mac: the color panel flow, and a custom color across light and dark themes.
Changelog
Added: Workspace groups can take a custom color from the system color panel (hex included) and an emoji, from icon-only controls in the group editor.
š¤ Generated with Claude Code
[!NOTE]
Low Risk
UI and personal-group color serialization only; hex values reuse an existing daemon wire format. Undo after ungroup/delete may still drop custom colors (noted gap).
Overview
cx-25az extends workspace group styling and editing: group colors are modeled as GroupTint (theme palette token or daemon-stored #RRGGBB), wired through actions, sidebar intents, bridge mapping, and personal-group updates via wire strings.
The group header no longer uses a full-width pastel bar. Color shows as a dot on the membersā vertical line; the title uses normal sidebar text. The editor adds an eyedropper swatch (system color panel, discrete commits) and an emoji/icon control that routes through workspaceGroup.setIcon. Opening those pickers sends keepGroupItem so a new empty group is not removed when the bubble closes.
Palette shortcuts and workspaceGroup.setColor now set .palette(...) or parse hex; SidebarGroup stores optional custom and applies colors through tint. New localized strings cover custom color and emoji picker labels.
Reviewed by Cursor Bugbot for commit b7f4396e5879a0315e1aa25990e586bb9dafbfa9. Bugbot is set up for automated code reviews on this repo. Configure here.
Showcase

