slosh
A terminal multiplexer: panes, tabs, and sessions you can detach from, written in C on top of libghostty-vt.
this repository also contains all code used for generating slosh.foo: the website, with a feature tour, the rendered docs, and a bootable in-browser demo.
Install
Prebuilt binaries for every platform are on the latest release page.
macOS
With Homebrew:
brew tap sl0p-foo/slosh
brew install slosh
Linux
Building from source needs zig 0.16 and nothing else, and the result is one static binary that runs on any distro:
make vendor # the vendored terminal core, once
make all # about a second
sudo make install # optional: /usr/local/bin/slosh
# make install PREFIX=$HOME/.local # ...or somewhere you own
(The source build works on a mac too; Homebrew is simply the shorter road there.)
On Arch, a pacman repository serves built, signed packages. Enroll the
signing key (fingerprint 0F67C909938CFFA8A76B59FD8D69B55A0E9056B9; the
same key is contrib/arch/slosh.asc in git, so the
two copies can be compared):
curl -fsSLO https://slosh.foo/arch/slosh.asc
sudo pacman-key --add slosh.asc
sudo pacman-key --lsign-key 0F67C909938CFFA8A76B59FD8D69B55A0E9056B9
then, in /etc/pacman.conf:
[slosh]
Server = https://slosh.foo/arch/$arch
and pacman -Sy slosh. Details, and the PKGBUILD for building it yourself:
contrib/arch.
Windows
Windows 10/11, x86-64 and ARM64, as one slosh.exe with no runtime
dependency beyond the OS. Panes are ConPTYs and sessions are AF_UNIX sockets,
so everything below works there too; see docs/windows.md.
Cross-compiled from a mac or a Linux box, then copied across:
make -f Makefile.windows ARCH=x86_64 # or ARCH=aarch64
The binary lands at build/win-<arch>/slosh.exe; the dist target zips it
with its licensing paperwork, and make release builds both architectures
alongside the Linux and macOS artifacts.
Run
slosh # attach to session "main", creating it if needed
slosh -s work # a named session
slosh ls # what is running
Sessions survive detaching and your ssh connection dying, and several terminals
can share one at once. The last client to interact controls the layout size;
smaller terminals follow the cursor over a crop and larger ones get blank
filler. Then C-a \ to split, C-a ? for the keys, C-a p for every command
by name.
Docs
For more comprehensive documentation see docs/ or browse it online.
