a modern terminal multiplexer written in C on top of libghostty-vt.

Panes and tabs, the way your hands expect.

One chord to split — or just click, because everything drawn is a real target.

  • click the middle of a border to split toward it
  • drag the gap to move the boundary
  • drag a pane by its title to swap it
  • zoom, tab away, come back — nothing lost

Sessions outlive everything.

Detach, let the ssh connection die, come back tomorrow: every pane exactly where you left it.

  • detach mid-thought, reattach mid-thought
  • keep separate sessions for separate lives — hop between them
  • a command that died while you were away keeps its output, its exit status, and offers [re-run]

Layouts that reflow the way you expect.

The arrangement is derived from the window, never stored — so every size gets a sensible layout, and nothing drifts.

  • quarter-turn the whole layout in place
  • shrink until boxes become a tidy list
  • grow back: the exact arrangement returns

Make it yours, live.

One config file, re-read the moment you save — and C-a e opens it right there, in a pane.

  • retheme the whole session in one substitution
  • padding, gaps, titles — every knob, applied as you watch
  • compact true: a different school of borders entirely

Colour passes, written as expressions.

Dim, tint, rulers, spotlights — over a pane's cells or over its frame, with strengths computed from x, y, the cursor, the clock.

  • tint a frame, rule a column, scanline the lot
  • a spotlight that follows the cursor as you type
  • :load shine — a shipped preset runs light along the frame
  • a pane rings unfocused — its border flashes

Built to be driven.

One JSON object per line over the session's socket — the same depth the keyboard gets. An agent can hold the other end.

  • split and rename panes from a script, replies and all
  • a program draws status and buttons into its own frame
  • the click comes back on that program's stdin

Floats, and the small comforts.

C-a F drops a throwaway shell on top of whatever you are doing — a monitor, a man page, a quick command.

  • it casts a shadow, so it never passes for a tile
  • move it with the keys that move boundaries; grow it about its centre
  • C-a ? — a cheatsheet built from the bindings actually in force, so it cannot disagree with your keyboard
  • exit closes it like any shell — the layout never flinched

try it

A riscv64 Linux with slosh as the thing you land in, booted right here. Nothing is installed, nothing leaves the tab, and the machine is throwaway — reload for a fresh one. About 11 MiB streams in while it boots. Prefer a whole tab?

riscv64 · TinyEMU, compiled to wasm · yours until you reload

install

Prebuilt binaries for the popular platforms live at slosh.foo/dist — one static file each, checksummed. The tabs below are the short roads to one: an installer for linux, a brew formula for macos, a signed pacman repo for arch, a zip for windows. Building from source works too, but you never need to.

$ curl -fsSL https://slosh.foo/install.sh | sudo sh
$ curl -fsSL https://slosh.foo/install.sh | PREFIX=$HOME/.local sh   # no root

Piping a URL into a shell should make you flinch — read it first, it is short: it picks the prebuilt static binary for your architecture from dist/, checks it against the published SHA256SUMS, and puts the one file in PREFIX/bin. The sudo in the first line is only for writing to /usr/local/bin; the second line needs no root at any step and lands it in ~/.local/bin. Nothing compiled, nothing else touched.

$ brew tap sl0p/slosh https://git.sl0p.foo/homebrew-slosh.git
$ brew install slosh

No Homebrew? The linux tab's installer works here too — on Apple silicon it fetches the signed prebuilt binary from dist/, verifies it, and installs that. No Xcode, no build.

# /etc/pacman.conf
[slosh]
Server = https://slosh.foo/arch/$arch

$ sudo pacman -Sy slosh

Built, signed packages. Enroll the signing key first — the key, the fingerprint to check and the PKGBUILD are in contrib/arch, the same instructions at arch/.

> curl.exe -LO https://slosh.foo/dist/slosh-<version>-windows-x86_64.zip
> tar xf slosh-*-windows-x86_64.zip   # tar ships with Windows 10+

Pick the newest zip from dist/ — x86-64 and ARM64, Windows 10/11. Inside is the same one binary: slosh.exe, no runtime dependency beyond the OS. Panes are ConPTYs, sessions are AF_UNIX sockets, everything on this page works there — the details.

$ git clone https://slosh.foo/src slosh && cd slosh
$ make vendor    # the vendored terminal core, once
$ make           # about a second
$ sudo install build/slosh /usr/local/bin/

For the curious — the tabs above hand you this same binary prebuilt. Needs zig 0.16 and nothing else: no cmake, no autotools, no libraries. The result is one static binary.