Early and experimental · macOS

A terminal with vertical tabs.

gvmux wraps libghostty, Ghostty's terminal engine, in a native Mac app: a tab sidebar, split panes, and a live view of your Claude Code sessions. You keep Ghostty's rendering, fonts, themes and config.

v0.1.7 · 14 MB · universal: Apple Silicon and Intel · macOS 13 or later

What you get

Ghostty's engine, in a layout built around tabs.

libghostty does the terminal: GPU rendering, fonts, true color, the kitty protocols, shell integration and your ~/.config/ghostty/config. gvmux is the app around it.

  1. 01

    Vertical tab sidebar

    Colors follow your Ghostty theme, and a background a program sets on the fly. Rename tabs, color-code them, drag to reorder, and hide the sidebar with ⌃⌘S.

  2. 02

    Split panes

    Split in any direction with draggable dividers, zoom, equalize and directional focus. New panes open in the current directory, and the panes you are not in are dimmed.

  3. 03

    Session restore

    Tabs, splits, names and each pane's directory come back on relaunch, saved as you go so even a crash loses almost nothing. Shells start fresh; running programs are not restored.

  4. 04

    Your Ghostty config, live

    Fonts, themes, colors and keybinds are read from your config. Save the file and the whole window follows within a couple of seconds, no restart (⇧⌘, reloads on demand).

  5. 05

    Search and command palette

    ⌘F search with a match counter, plus a palette built from Ghostty's command-palette-entry list.

  6. 06

    Careful with your clipboard

    Prompts before risky pastes and before programs read or write the clipboard. Links from terminal output are checked before they open.

  7. 07

    Notifications

    Desktop notifications from programs, and alerts when a long command finishes. Click one to jump to its tab. A bar tells you when a shell has exited.

  8. 08

    Quick terminal and native feel

    A drop-down terminal on a global hotkey (⌃`), placed by your quick-terminal-* options: top, bottom, left, right or center, any size, any screen. Swift and AppKit, with input methods, drag and drop, and the standard macOS menus.

  9. 09

    The small things

    A lock badge on read-only panes, a pill showing a pending key sequence, secure keyboard entry, Services and Dock menus, and six app icons to pick from.

What gvmux adds

Things you won't find in Ghostty's own app.

Ghostty's macOS app uses the standard macOS tab bar. gvmux goes further in four places.

Sidebar01

Vertical tab sidebar

Tabs live in a side panel in your Ghostty theme, each with its directory, a bell marker, an optional color bar and a Claude status dot.

Sessions02

Session export and import

File → Export Session… saves tab names, colors, splits, directories and Claude session ids to a JSON file. Import Session… brings them back, added to your tabs or replacing them. Nothing runs on import.

CLI03

Rename tabs from the shell

gvmux title "build server" renames the tab that shell is in, and tells you if it couldn't. With no text it goes back to the automatic name.

Claude Code04

Claude Code, tab by tab

A status dot on every tab, per-pane tracking in splits, and automatic resume after a relaunch. Details just below.

See how it works

Claude Code integration

Know what every Claude is doing, and pick it back up.

No setup. gvmux runs claude with its own hooks for that run and leaves your Claude settings alone.

  • Ready
  • Working
  • Waiting for you
  1. 01

    Run claude in a tab

    A dot appears on the tab and follows the session: green when it's ready, orange while it works, red when it needs you. In a split, each pane reports on its own and the tab shows the most urgent one.

  2. 02

    It follows you around

    /resume and /clear change the session id, and the tab keeps up. Right-click a tab to copy the session id or the resume command.

  3. 03

    Quit, relaunch, carry on

    Quit with Claude running and the next launch resumes it for you: each pane types the resume command at its first prompt. If no prompt shows up in five seconds, or for an imported file, it shows a Resume button and types nothing until you click.

    ~/api-server $ claude --resume 3f2b8c1e-…

    the conversation comes back; the live process doesn't

Works in the packaged app, in zsh, bash and fish. It does not work over ssh or tmux.

Download

One universal build for every Mac.

Latest · v0.1.7

gvmux-0.1.7.dmg

  • Apple Silicon
  • Intel
  • macOS 13+
  • 14 MB

One universal download for both Apple Silicon and Intel Macs. The Intel half is new and has only been run under Rosetta so far, so tell us if it misbehaves on a real Intel Mac.

First launch
Signed with a Developer ID certificate and notarized by Apple, so it opens without a security warning. Drag gvmux to Applications and open it; macOS may ask you to confirm once, as it does for any app from the internet.
SHA-256
16d994428cd90d5a7a42caf5e6f278e866c4188e8d6ee878465d53c649f62ee9
Build and run

Prefer to build it yourself?

You need macOS 13 or later (Apple Silicon or Intel), Xcode with the Metal Toolchain, and Zig 0.16.x.

brew install zig@0.16
xcodebuild -downloadComponent MetalToolchain

git clone --recurse-submodules https://gitlab.com/cagar32/gvmux.git
cd gvmux
make run

The first run builds libghostty and takes a few minutes. Later runs are quick. A build you make yourself is ad hoc signed, so it runs on your own Mac; other Macs will show a Gatekeeper warning. The download above is signed and notarized.

Status

Honest about where it is.

  • A young project: usable day to day, but expect rough edges.
  • Single window by design: tabs live in the sidebar, panes inside tabs.
  • A universal build; the Intel half has only been run under Rosetta so far.