Why tmux.expose
Switching tmux sessions with a list works, but it gives you names instead of context. tmux.expose shows every session as a live text thumbnail so you can jump to the right workspace visually.
- See before switching. Browse sessions in a responsive grid with live pane previews.
- Terminal-native. A small Rust TUI that runs inside your terminal or a tmux popup.
- Color-aware previews. tmux ANSI colors are preserved in thumbnails.
- Fast keyboard flow. Move with arrows or
hjkl, switch withEnter, leave withqorEsc. - TPM-ready. Install it as a tmux plugin and launch with
Alt+e.
Install
The shortest path is crates.io:
Or install from this repository:
Verify the install:
Quickstart
Run the UI directly inside tmux:
Or open it in a tmux popup:
By default, thumbnails are sized into a balanced grid that fits all sessions on screen. Override the layout when you want larger previews or a fixed grid:
Refresh interval defaults to 500ms:
Controls
| Key | Action |
|---|---|
Arrow keys |
Move selection |
hjkl |
Move selection outside search |
Mouse click |
Switch to clicked session |
/ |
Search sessions by fuzzy name |
Backspace |
Edit search query |
Esc while searching |
Clear search |
Enter |
Switch to selected session |
q / Esc / Ctrl-C |
Quit without switching |
tmux Plugin
Install with TPM:
set -g @plugin 'cesarferreira/tmux.expose'
Reload tmux config, then press prefix + I to install plugins.
The plugin binds Alt+e by default:
Alt+e
It opens:
With the default binding, press Alt+e again while tmux.expose is open to close it without switching.
Configuration
Customize the tmux plugin before the @plugin line:
set -g @tmux-expose-key 'E'
set -g @tmux-expose-key-table 'prefix'
set -g @tmux-expose-width '100%'
set -g @tmux-expose-height '100%'
set -g @tmux-expose-command 'tmux-expose --columns 2'
set -g @plugin 'cesarferreira/tmux.expose'
Use a direct binding if you do not use TPM:
bind-key -T root M-e display-popup -w 100% -h 100% -E "tmux-expose"
macOS Gesture Integration
Use BetterTouchTool, Hammerspoon, Raycast, or another automation tool to trigger:
The app itself is terminal-only and does not depend on macOS-specific APIs.
Development
Before opening a PR, run:
License
MIT © Cesar Ferreira