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

Panes and tabs, what else?

One keycombo to split, or just click, because we don't hate the mouse.

  • click the middle of a border to split toward it
  • drag the gap to move the boundary
  • drag a pane by its title
  • 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
  • attach from two terminals at once: both type, both see
  • keep separate sessions for separate lives; hop between them
  • a command that died while you were away keeps its output and exit status

Responsive terminal layouts.

Layouts (re)flow in the way you expect, 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, hot-reloaded. Press C-a e to $EDITOR it in place.

  • retheme the whole session with one magic vimfu substitution
  • padding, gaps, titles: every knob, applied as you watch
  • compact true: for those who value their terminal real estate.

Nifty visual effects, 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, and 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.

  • move it with the keys that move boundaries; grow it about its centre
  • C-a ? shows a cheatsheet built from the bindings actually active, 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). Prefer a whole tab?

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

install

Prebuilt static binaries for Linux, macOS and Windows (x86-64 and ARM64) are on the latest release page. The macOS binary is signed and notarized. We also provide some packaged versions of slosh, instructions can be found below.

$ brew tap sl0p-foo/slosh
$ brew install slosh

Builds from source in under a minute; the only dependency is zig, which the formula pulls in.

# enroll the signing key, once
$ curl -fsSLO https://slosh.foo/arch/slosh.asc
$ sudo pacman-key --add slosh.asc
$ sudo pacman-key --lsign-key 0F67C909938CFFA8A76B59FD8D69B55A0E9056B9
# /etc/pacman.conf
[slosh]
Server = https://slosh.foo/arch/$arch

$ sudo pacman -Sy slosh

Built, signed packages. The fingerprint to check before the --lsign-key: the same key is contrib/arch/slosh.asc in git, so the file fetched from the website can be compared against the one in the source. The PKGBUILD, for building it yourself, is in contrib/arch too; the same instructions at arch/.

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

Needs zig 0.16 and nothing else: no cmake, no autotools, no libraries. The result is one static binary. Windows cross-compilation is make -f Makefile.windows; the details.

contributing

slosh is developed in the open at github.com/sl0p-foo/slosh: issues, patches and pull requests welcome.

For everything that is not an issue yet (a question, an idea, a screenshot of a setup you are proud of) there is the sl0p discord.