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.

  • attach from two terminals at once, both can type
  • keep separate sessions for separate projects and switch between them
  • if a command exits while you're away, its output and exit code are still there

Responsive terminal layouts.

Layouts (re)flow in the way you expect, nothing drifts.

  • rotate the whole layout in place
  • shrink the window and panes collapse into a list
  • make it bigger again and your layout comes back

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.

Themes, and a picker.

Press C-a t to browse the shipped themes and your own.

  • live preview on your actual session as you move through the list
  • type to filter, Esc to back out
  • C-s saves your pick to your config

Nifty visual effects.

Tints, dimming, spotlights and more, applied to a pane or its border. Write your own or load one of the presets.

  • a spotlight that follows your cursor
  • :load shine runs a glint around the border
  • a background pane's border flashes when it rings the bell

Built to be driven.

Control everything from a script (or an AI agent) with simple JSON commands.

  • split, rename and arrange panes from a script
  • programs can put status text and buttons in their pane's border
  • button clicks are sent back to the program

Floats, and the small comforts.

C-a F opens a floating shell on top of whatever you're doing, for a quick command or a man page.

  • move and resize it from the keyboard
  • exit closes it, your layout stays as it was
  • C-a ? shows a cheatsheet of your current keybindings

try it

Boot a small Linux machine with slosh in your browser. Nothing gets installed, and reloading the page gives you a fresh one. Open it in its own tab.

riscv64 ยท TinyEMU, compiled to wasm

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. Or install with a package manager:

$ 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
# add to /etc/pacman.conf
[slosh]
Server = https://slosh.foo/arch/$arch
$ sudo pacman -Sy slosh
$ sudo pacman -S ghostty-terminfo   # optional (x86_64 only)

Signed packages. You can check the key against the copy in the repo. To build it yourself, the PKGBUILD is in contrib/arch. More details at arch/.

$ git clone https://github.com/sl0p-foo/slosh.git && cd slosh
$ make vendor    # first time only
$ make all       # about a second
$ sudo make install                  # or: make install PREFIX=$HOME/.local

Only needs zig 0.16, and you get a single static binary. make install also installs the manpages and an example config. Building for Windows is covered here.

contributing

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

For questions, ideas, or to show off your setup, join the sl0p discord.