The Hyprland-style multiplexer for macOS.

Terminals, browsers, and simulators, tiled in one native window with Hyprland's keybinds, looks, and motion.

Free and open source · macOS 14+ · Apple silicon

What goes in a tile

More than terminals.

A tile holds a terminal, a web page, a document, or a device. Put them side by side on one workspace, and move between them with the same keys.

Ghostty, in every tile.

A full Ghostty terminal with your Ghostty config, fonts, and theme. IME, mouse, clipboard, and shell integration all work.

  • libghostty
  • GPU rendered
  • OSC 9 / 777 notifications

A browser next to your code.

Back, forward, reload, and an address bar for URLs or searches. Popups open as new tiles. ⌘-click a link in a terminal to open it next to it.

  • WebKit, light
  • Chromium, with passkeys
  • Find in page

Markdown, rendered.

⌘-click a local .md file in a terminal to read it rendered. The view follows your edits, and FILE.md:42 jumps to line 42.

Simulators in a tile.

Live iOS Simulator and Android Emulator screens. Click and drag to touch, type to use the keyboard, and use the buttons for Home, Lock, Back, and Recents. Simulator.app isn't needed.

Other apps too. Experimental

VS Code, Cursor, and Zed already open in tiles. Any app can build against Hyprmux to show its own UI as a tile. Hyprmux places it, decorates it, and animates it like the rest.

Configuration

It's your hyprland.conf.

The same syntax, binds, dispatchers, and bezier curves. Save the file and Hyprmux reloads it. A mistake shows in a red bar, and the rest of the file still applies. Try it here: edit a value, or pick a preset.

~/.config/hyprmux/hyprmux.conf
  • Dwindle tiling

    Directional focus, move and swap, resizing with keys or the mouse, floating, and fullscreen.

  • The looks

    Gradient borders, shadows, rounded or squircle corners, blur, and dimmed inactive tiles.

  • The motion

    Tiles pop in, workspaces slide, and borders fade, on the curves you set.

  • Ghostty stays

    Your Ghostty config still applies to terminals. A ghostty { } block can override it.

Built for agents

See every agent at a glance.

Each tile shows what its agent is doing: working, needs you, or done. Scripts and agents drive Hyprmux through hyprmuxctl, and your focus stays where it is.

  • working
  • needs you
  • done while you looked away
zsh — a script in another tile
❯ hyprmuxctl new-surface --input 'pi "document the orders API"\n' | jq -r .ref
surface:4
❯ hyprmuxctl read-screen --surface 2 --lines 2
Allow rm -rf build?
  1. Yes   2. No
❯ hyprmuxctl send --surface 2 'y\n'
❯ agent-browser connect "$(hyprmuxctl cdp-url)" && agent-browser click @e2
✓ clicked @e2
❯ hyprmuxctl events
agent>>4,pi,done
agent>>1,pi,done
  • Activity on every tile

    Orange for working, red for needs you, green for done. Workspace pills count them, and a notice tells you when an agent waits for an answer.

  • hyprmuxctl

    A hyprctl-like CLI. Read screens, send text and keys, open tiles in the background, and stream events. Hooks run commands when events happen.

  • Web tiles over CDP

    agent-browser, Playwright, and Puppeteer drive Chromium tiles. A banner and a cursor show what the agent does, and Stop takes control back.

  • Sessions that come back

    Relaunch and get back your workspaces, layouts, directories, programs like nvim, and agent sessions for pi and Codex.

  • Any terminal agent

    Claude Code, Codex, pi, opencode, and the rest run as they are. A one-line hook reports their state, and pi ships with an extension.

  • A bundled skill

    hyprmuxctl skill install gives your agent a skill that teaches it to find, read, and drive other tiles.

The rest of Hyprland

Workspaces, groups, scratchpad.

The parts of Hyprland you miss on a Mac, plus a few it never had.

  • Workspaces ⌘1…9

    Numbered workspaces that slide like Hyprland's, with optional names.

  • Groups ⌘G

    Several windows as tabs in one tile. ⌃Tab switches them.

  • Scratchpad ⌘S

    A hidden workspace that slides in over the current one, and away again.

  • Layouts ⌘U

    Save a workspace as a template, then summon it again with its programs and agents.

  • Pickers ⌘/

    fzf-style lists for workspaces, apps, and an app's windows, plus a menu of all of them.

  • Floating and fullscreen ⌘F

    Float any tile, maximize it, or make it fill the screen. Then tile it again.

  • Passwords

    Fill web fields and terminal password prompts from 1Password, after Hyprmux checks the origin.

  • Notifications

    Config errors and terminal notifications, styled like your terminal.

  • Keycast

    Shows each shortcut as you press it, for recordings and screen sharing.

Default binds

Keys you already know.

SUPER is ⌘. Keys are physical positions, so they work with any keyboard layout. Keys no bind claims go to the focused tile, so ⌘C and ⌘V still work.

⌘/
The menu: every picker and action
⌘↩
New terminal
⌘B
New web tile
⌘I
Show a simulator or emulator
⌘D
Open an app in a tile
⌘HJKL
Move focus
⇧⌘HJKL
Move the window
⌃⌘HJKL
Resize
⌘1…9
Switch workspace
⌘P
Pick a workspace
⌘S
Scratchpad
⌘G
Make a group
⇧⌘Space
Float or re-tile
⌘F
Maximize the window
⌘U
Summon a layout
⇧⌘R
Reload the config

The full default set is in config/hyprmux.conf. New to it? Run hyprmux-tour in any Hyprmux terminal.

Hyprmux app icon

Get Hyprmux.

Free and open source, under the MIT license.

macOS 14 or later · Apple silicon

  1. 1Download the DMG from the latest release.
  2. 2Open it and drag Hyprmux to Applications.
  3. 3Launch it. The tour starts in the first terminal.
Build from source
git clone https://github.com/gavrix/hyprmux.git && cd hyprmux
scripts/bundle.sh
open build/Hyprmux.app

Needs Xcode 16 or later and about 1.5 GB of disk. The first run downloads libghostty and the Chromium SDK, about 260 MB.

FAQ

Questions.

How is it different from cmux?

Both are native macOS apps built on libghostty, with a scriptable browser and a CLI. cmux is a terminal first: vertical tabs with git branches and ports, split panes, notification rings, remote SSH workspaces, and an iOS companion app. Hyprmux is a tiling environment: Hyprland's dwindle layout, workspaces, groups, and animations, a hyprland.conf-style config, and tiles that hold simulators and editors as well as terminals and web pages. Pick cmux for a polished terminal with tabs. Pick Hyprmux if you want Hyprland's way of working.

How does it compare to herdr?

herdr runs inside your terminal, like tmux. It keeps agents running in a background server, lets you detach and reattach, works over SSH, and runs on macOS, Linux, and Windows. Hyprmux is a native Mac app with a graphical compositor. It tiles more than terminals, and it shows agent state on tiles and workspaces. It doesn't run headless, and when Hyprmux quits its programs stop. On relaunch it brings back the layout and resumes agent sessions.

Why not tmux or Zellij?

They run in any terminal, on any machine, over SSH, and sessions survive when you disconnect. Hyprmux can't do that. In exchange, it draws real tiles: smooth animation, gradient borders, blur, mouse resizing, and tiles that aren't terminals at all. You can still run tmux inside a Hyprmux terminal.

Why not AeroSpace, yabai, or Amethyst?

Those tile the real windows of every app on your Mac. That's their strength, and they work around macOS limits to do it. Hyprmux tiles only inside its own window, so it controls every pixel: animations, borders, blur, and the same keys everywhere. It holds terminals, web pages, simulators, and supported apps, not arbitrary Mac windows. They work fine together, because to a tiling window manager Hyprmux is one window.

Is it Hyprland for macOS? Can I use my hyprland.conf?

It borrows Hyprland's ideas, not its code. The config syntax is hyprlang, with the same sections, bind lines, dispatchers, gradients, and bezier animations, so much of a general, decoration, animations, and bind setup carries over. Parts that only make sense on Linux, like monitors and Wayland window rules, don't apply. Hyprmux isn't affiliated with Hyprland.

How does it relate to Ghostty?

Hyprmux uses libghostty to draw terminals, the way apps use WebKit to draw web pages. It isn't a fork of Ghostty. Your Ghostty config, themes, and fonts apply to Hyprmux terminals. Ghostty has its own splits and tabs. Hyprmux adds a tiling layout, workspaces, tiles that aren't terminals, and scripting.

Which coding agents work with it?

Every agent that runs in a terminal: Claude Code, Codex, pi, opencode, Gemini CLI, Aider, and the rest. To show an agent's state on its tile, a hook calls hyprmuxctl agent-state. pi has a bundled extension that does it. Session restore resumes pi and Codex sessions.

Why one window?

macOS gives apps no way to move other apps' windows between Spaces, and little control over how those windows animate. Inside its own window, Hyprmux owns the whole layout, so tiling, workspaces, and animation behave the same every time. Press ⌃⌘F to make that window your whole screen.

What's experimental?

Apps in tiles (VS Code, Cursor, other Electron apps, and Zed), and the protocol that lets any app show its UI as a tile. Electron apps work through an adapter. Drag and drop doesn't work in them, and their menu bar isn't reachable, so use the command palette instead.

What are the limitations?

One monitor: there's no multi-display support yet. Only terminal tiles support reads and input from hyprmuxctl. The WebKit engine has no passkeys, and Chromium supports phone and security-key passkeys, not Touch ID. Simulator tiles and the libghostty build depend on private or fast-moving APIs, so an Xcode or libghostty update can break them.

Is it free? What do I need?

Yes. Hyprmux is free and open source under the MIT license. It needs macOS 14 or later on Apple silicon. iOS Simulator tiles need Xcode, and Android Emulator tiles need the Android SDK emulator.