Terminal
The terminal layer in τ-mux is xterm.js 5.3 attached to a Bun.spawn PTY. It behaves like a real terminal — colors, line editing, mouse reporting, alt-screen TUIs all work.
What you get
Section titled “What you get”- Color & font rendering. Configurable family / size / line height; JetBrains Mono Nerd Font ships bundled.
- Mouse support. Click, drag, scroll. Mouse reporting forwards to TUIs that ask for it.
- Find in buffer.
⌘Fopens a search bar with regex toggle, case-sensitive toggle, and next/previous navigation. - Scrollback. Default 10 000 lines, configurable in settings.
- Copy / paste.
⌘C/⌘V. Selection auto-copies if you setSettings → Appearance → Copy on select. - Font size live.
⌘=/⌘-/⌘0to bump, shrink, or reset. - Themes. 10 presets (Catppuccin, Tokyo Night, Dracula, Nord, Rosé Pine, Gruvbox, Solarized, Synthwave ‘84, Everforest, Obsidian) plus per-color overrides.
- Effects. Optional WebGL bloom layer; toggle in Settings → Effects. Off by default.
Things the terminal does NOT do
Section titled “Things the terminal does NOT do”- It does not interpret OSC sequences for image inlining (sixel, kitty graphics protocol). Use the sideband protocol instead.
- It does not have shell integration. There is no zsh/bash/fish hook — process metadata comes from the OS, not the shell.
- It does not multiplex shells over a single PTY. Each pane has its own PTY.
Status pills and progress bars
Section titled “Status pills and progress bars”Anything inside the terminal can post live status into the sidebar without printing to stdout, via the ht CLI:
ht set-status build "Building" --color "#7aa2f7" --icon hammerht set-progress 0.42 --label "Tests"ht log --level success --source build "All tests green"ht clear-status buildThe pills show on the workspace card in the sidebar. They survive pane focus changes and are cleared on workspace close. See Sidebar & status.
Per-pane chips
Section titled “Per-pane chips”The pane header shows live chips:
| Chip | What |
|---|---|
| Foreground command | Full argv of the foreground process. Click to focus. |
| cwd | Current working directory (truncated to home / git root). |
| Port chips | One per listening TCP port. Click to open http://localhost:<port>. |
All chips are driven by the live process metadata pipeline, not shell hooks.
Source files
Section titled “Source files”src/views/terminal/surface-manager.ts— terminal instances, chip rendering.src/views/terminal/terminal-search.ts—⌘Fsearch bar.src/views/terminal/terminal-effects.ts— WebGL bloom.src/bun/pty-manager.ts— single PTY: spawn, stdin/stdout, sideband fds.