Skip to content

milch/mistty

Repository files navigation

Mistty

A native macOS terminal built on libghostty, with tmux-style session management built in. Sessions, tabs, split panes, and a fuzzy switcher live inside the terminal — no separate multiplexer to run, configure, or keep alive.

The same, GPU-accelerated rendering engine you are used to from Ghostty. Mistty wraps it in a SwiftUI shell that organizes your work into a tree of windows, sessions, tabs, and panes you can drive entirely from the keyboard or script from the command line.

Requires macOS 14 (Sonoma) or later on Apple Silicon.

Features

  • Session manager (Cmd+J) — one fuzzy palette over your open sessions, recent directories (via zoxide), and SSH hosts from ~/.ssh/config. Type a few letters, hit return, and you're in the right place.
  • Sessions, tabs, and split panes — a working-directory-scoped session holds tabs; tabs hold split panes. Standard terminal multiplexing without tmux.
  • Sidebar (Cmd+S) — a persistent tree of your sessions and tabs.
  • Popups — launch TUIs like lazygit or quick commands you run all the time by binding them to a keyboard shortcut.
  • Window mode (Cmd+X) — a modal layer for moving, resizing, zooming, and rearranging panes with single keystrokes, plus one-key standard layouts.
  • Copy mode (Cmd+Shift+C) — vim-style keyboard navigation, selection, search, and link/path hints for yanking or opening without the mouse. Also try yank mode (Cmd+Shift+V) or copy mode (Cmd+Shift+O) to copy or open text shaped like numbers, URLs, paths, and more, with a few keystrokes.
  • State restoration — relaunch and your sessions, tabs, panes, and working directories come back; allow-listed programs (nvim, ssh, …) relaunch too. Configure restoration strategies like passing environment variables, or repeating the previous arguments.
  • CLI control (mistty-cli) — script sessions, tabs, and panes; send keys, run commands, and read pane text over a local socket.
  • Configurable — a single TOML file at ~/.config/mistty/config.toml, plus full passthrough to any Ghostty option.
  • Desktop notifications — programs can raise a macOS notification (OSC 9 / 777) from inside a pane; the originating tab and the Dock icon are flagged when it's not focused. claude, codex, or other agent harnesses will be highlighted in the sidebar when they are waiting for your response.

Install

Homebrew (recommended)

brew install --cask milch/mistty/mistty

This installs Mistty.app and puts the mistty-cli tool on your PATH.

It is recommended to install zoxide to populate recent directories in the session manager:

brew install zoxide

Build from source

See Building from source — you'll need Xcode, Nix (for the pinned Zig that builds libghostty), and just.

Quick start

Launch Mistty and you get one window with a single session, tab, and pane. From there:

Shortcut Action
Cmd+J Session manager — jump to a session, recent directory, or SSH host
Cmd+T New tab
Cmd+D / Cmd+Shift+D Split pane right / down
Cmd+X Window mode — move, resize, zoom, and lay out panes
Cmd+Shift+C Copy mode — keyboard scrollback, selection, and link hints
Cmd+S Toggle the sidebar
Cmd+1Cmd+9 Focus tab N (Ctrl+19 focus session N)

Every shortcut is rebindable. The keyboard shortcuts reference lists them all.

Documentation

The user guide covers everything in depth:

A fully-commented sample config lives at docs/config-example.toml. There's also a Neovim smart-splits integration for seamless vim ↔ pane navigation.

Development

Command Description
just setup Initialize submodules (first-time)
just build-libghostty Build libghostty from the vendored Ghostty (needs Nix)
just build Build the app (debug)
just run Build, install to /Applications, and launch
just test Run the test suite
just fmt Format Swift sources
just info Show project info

Run just --list for the full set. The architecture and contributor notes live in docs/user-guide/installation.md and the design docs under docs/.

License

MIT.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages