kittymux

Roadmap

What to work on next, in order: why each item matters, what blocks it and what done looks like. The docked panel on a real desktop comes first.

This list is ordered by value to someone who lives in kittymux all day. Each item says what blocks it and how you know it is done. Nothing here is promised for a date. The feature status list shows what is planned.

1. Check the docked panel on a real desktop

Why. The panel's placement beside the bar has only been tested in a virtual display, which cannot show a compositor's behaviour. Until a person checks, the panel stays beta.

Blocked by. A person on the real compositor. tests/probe_panel.sh is written and has not been run.

What to look at. Does the panel sit flush beside the bar, how long does it take to start, and does it stay on the right output when you have several?

Done when. The result is recorded in Platforms and compatibility, and the panel's status in docs/feature-status.yaml is updated.

2. Build the docs site

Why. The pages are written and checked. A site makes them searchable and linkable.

Blocked by. Nothing. See Docs maintenance for the contract.

Done when. /docs renders every page with working navigation, search and images, Steps renders correctly, and the docs checks run in continuous integration.

3. Workspace switcher

Why. A recent-first list with each place's agent state, as one key, is what tmux's choose-tree and cmux's workspace list give you.

What already exists. The deck and kittymux pick list every tab of every session and every OS window, with states. Kitty Home switches, restores, creates and deletes named sessions, but it shows no agent state.

Design notes. Many people keep one OS window per desktop workspace and use no named sessions, so a switcher that lists only sessions would show them nothing. It has to list OS windows too, grouped by workspace where the window manager says so. A kitten like the join list: filter by typing, hover and click, ⏎ to switch, needs-you places first. It reads the same merged state as the bar and must not move focus on its own.

Blocked by. A decision on the key. Few chords that use ctrl, alt and shift are still free, so check kittymux keys, the template and hyprctl binds -j first.

Done when. A rig drives it with real keys and mouse like tests/smoke_join_ui.sh, and the keymap overlay lists it.

4. Rename a session safely

Why. Renaming a session today leaves the tab titles, the saved file and the journal out of step, and a resumed or renamed title can show the wrong thing.

Design notes. One command that updates the tab group, the saved session file and the journal together, validated through kitty's own parser. Kitty persists only titles you set, so a rename must set them.

Done when. A rig renames a session, saves, restores in a second kitty, and checks the titles and the journal.

5. Type into several panes

Why. tmux's synchronize-panes is the multiplexer feature people ask for that kittymux lacks. For agents, kittymux fanout covers starting the same task in several worktrees, but not typing into running panes together.

Design notes. kitty has broadcast. The work is a clear on and off state in the bar, so you cannot type into the wrong panes without seeing it.

Done when. A rig shows one keystroke reaching every pane of the tab and none of any other.

6. Rotate and move panes

Why. ctrl+alt+space already cycles layouts. What is missing is rotating a split and moving a pane in a direction without the mouse.

Design notes. Mostly kitty's own layout actions behind a few chords. The splits layout is the one join keeps the shape in, so these keys should not leave it by surprise.

Done when. The keys are in the template, the README table and the overlay, and a rig presses them.

7. Release

See the release checklist: a passing continuous integration run on the release commit, a tag and changelog, a checked PKGBUILD, recordings in more than one theme.

8. Wider verification

  • Screen markers for Gemini, Cursor, OpenCode, Amp and Antigravity against live sessions.
  • A second Wayland compositor, and X11 with a real window manager.
  • macOS, which needs agent detection without /proc.

What cannot be done from kittymux, and why

A sheet that opens when you hover a tab

kitty sends the tab bar no idle mouse motion and chooses the pointer shape in C over the bar. A sheet can live inside the deck or the docked panel, where hover is real. That is the planned shape of the side sheet. The right-click peek card and ctrl+alt+shift+q are the nearest things that work today.

The resize arrow on the bar edge of a single-pane tab

In a tab with two or more panes, the pointer over the bar's divider is the native resize arrow. In a tab with one pane it is a hand. This is decided in kitty's kitty/mouse.c (checked against 0.49.2), in three places:

  1. A position over the tab bar is marked as in the bar, and both update_mouse_pointer_shape and mouse_event set the pointer to POINTER_POINTER for it. That is the hand, and Python code cannot change it.
  2. Border hit-testing, which produces every resize shape, only runs when num_visible_windows(t) > 1.
  3. A pane's own pointer shape comes from the program in it (OSC 22) or from default_pointer_shape. It is the same over the whole pane, never by position.

What you can do today. Use the docked panel, which is its own window and shows a resize cursor on its edge in every tab. Or resize with ctrl+alt+shift+[ and ctrl+alt+shift+], or the « button for the rail.

What would fix it. A change in kitty. Either run border hit-testing for a tab's registered border rectangles when only one window is visible, or let a tab bar declare a pointer shape for a region of it. Either lets kittymux drop its bar-side grab zone. This is a good upstream request, and it needs someone to file it.

Approaches that were considered and rejected.

  • A hidden second window in every tab, so that the count passes the check. It changes pane counts, sessions, layouts and kitty @ ls for everyone, and a mistake in kitty's C state would take down the whole kitty and every session in it.
  • A thin layer-shell strip as a handle. A layer surface belongs to an output, not to a workspace, so a handle for one kitty window would show over every workspace.
  • Replacing the hand through the cursor theme. It would turn every hand, including links, into a resize arrow.

On this page