aboutsummaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
masterbrew: pin the build to zig@0.16Peter Geissler3 days
docs-newdocs: chorePeter Geissler8 weeks
 
TagDownloadAuthorAge
v0.1.8slosh-0.1.8.tar.gz  slosh-0.1.8.tar.xz  slosh-0.1.8.zip  user6 weeks
v0.1.7slosh-0.1.7.tar.gz  slosh-0.1.7.tar.xz  slosh-0.1.7.zip  user7 weeks
v0.1.6slosh-0.1.6.tar.gz  slosh-0.1.6.tar.xz  slosh-0.1.6.zip  user8 weeks
v0.1.5slosh-0.1.5.tar.gz  slosh-0.1.5.tar.xz  slosh-0.1.5.zip  user8 weeks
v0.1.4slosh-0.1.4.tar.gz  slosh-0.1.4.tar.xz  slosh-0.1.4.zip  user8 weeks
v0.1.3slosh-0.1.3.tar.gz  slosh-0.1.3.tar.xz  slosh-0.1.3.zip  user8 weeks
v0.1.2slosh-0.1.2.tar.gz  slosh-0.1.2.tar.xz  slosh-0.1.2.zip  user8 weeks
v0.1.1slosh-0.1.1.tar.gz  slosh-0.1.1.tar.xz  slosh-0.1.1.zip  user2 months
v0.1.0slosh-0.1.0.tar.gz  slosh-0.1.0.tar.xz  slosh-0.1.0.zip  user2 months
 
AgeCommit messageAuthor
2026-09-02docs: choredocs-newPeter Geissler
2026-09-02docs: deprecate boring design narrative, more trimming and cullingPeter Geissler
2026-09-02docs: big overhaulPeter Geissler
2026-08-30web: the hero button says try it, like the section it goes touser
2026-08-30web: the whole step is the road, not just its titleuser
2026-08-30web: the tour's doorway steps stop grabbinguser
2026-08-30web: the tour magnets, politelyuser
2026-08-30web: a step's title is a road to the stepuser
2026-08-30web: the floating logo yields to the buttons and the rising terminaluser
2026-08-30web: the config cast zeroes the padding before going compactuser
2026-08-30web: the config cast edits in colouruser
2026-08-30web: the casts play at 1.75x -- the owner has watched them enoughuser
2026-08-30web: the config cast turns the layout before it editsuser
2026-08-30web: one knob to hurry every cast on the pageuser
2026-08-30web: the panes cast shows the drop bands, not just the swapuser
[...]
 
Clone
https://git.sl0p.foo/slosh.git
ssh://git@git.sl0p.foo:39327/srv/git/slosh.git

slosh

A terminal multiplexer: panes, tabs, and sessions you can detach from, written in C on top of libghostty-vt.

Install

macOS

With Homebrew:

brew tap sl0p/slosh https://git.sl0p.foo/homebrew-slosh.git
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. Then C-a \ to split, C-a ? for the keys, C-a p for every command by name.

Docs

docs/: keys · panes · configuration · actions · windows · shaders · chrome · layouts · scripting ·

make docs renders the same pages as a static site into build/docs, with no dependencies: one file of Python and one stylesheet.

What is different about it

  • The mouse works properly. Click the middle of a border to split toward it, drag a gap to move a boundary, drag a pane by its title to swap it. Everything drawn registers what it is as it is drawn, so a click and a preview cannot disagree. That is also how the split target can be part of an edge without the highlight and the hit ever drifting apart.
  • The layout is recomputed, never stored. Small terminal? The tab becomes a list of headers, and comes back to exactly the arrangement you had.
  • A pane told to run something keeps its output when that thing exits, with [re-run] and [close] in its frame.
  • Configuration is one KDL file that reloads on save, can be built from included pieces, and refuses a broken file instead of half-applying it.
  • Colour passes over cells: dim, tint, rulers, spotlights, and a border that can flash when a pane rings, with strengths written as expressions.
  • Scriptable to the same depth it is usable: one JSON object per line over the session's socket, and a pane can draw its own status bar and buttons with an escape sequence.