aboutsummaryrefslogtreecommitdiffstats
ModeNameSize
d---------.agents / skills / driving-slosh33logstatsplain
-rw-r--r--.clang-format1993logstatsplainblame
d---------.fastfeedback36logstatsplain
-rw-r--r--.git-blame-ignore-revs501logstatsplainblame
d---------.githooks38logstatsplain
-rw-r--r--.gitignore653logstatsplainblame
-rw-r--r--DEMO-VIDEO.md7567logstatsplainblame
-rw-r--r--DESIGN.md64804logstatsplainblame
-rw-r--r--HANDOVER.md23897logstatsplainblame
-rw-r--r--Makefile13475logstatsplainblame
-rw-r--r--README.md3690logstatsplainblame
-rw-r--r--SEED.md1095logstatsplainblame
d---------config80logstatsplain
d---------contrib519logstatsplain
d---------docs406logstatsplain
d---------include644logstatsplain
-rw-r--r--logo.txt811logstatsplainblame
-rw-r--r--ruff.toml2442logstatsplainblame
d---------src927logstatsplain
d---------tests2990logstatsplain
d---------vendor127logstatsplain
d---------web262logstatsplain

slosh

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

╭────────── nvim ─────────── ▬ □ ✕ ╮  ╭─────── npm run dev ─────── ▬ □ ✕ ╮
│                                  │  │                                  │
│                                  │  │                                  │
│                                  │  │                                  │
│                                  │  │                                  │
│                                  │  ╰──────────────────────────────────╯
│                                  │
│                                  │  ╭────────── shell ────────── ▬ □ ✕ ╮
│                                  │  │                                  │
│                                  │  │                                  │
│                                  │  │                                  │
│                                  │  │                                  │
╰──────────────────────────────────╯  ╰──────────────────────────────────╯

Install

Needs zig 0.16 and nothing else. The result is one static binary.

make vendor    # the vendored terminal core, once
make           # about a second

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 · shaders · chrome · layouts · scripting · how it works

make docs renders the same pages as a static site into build/docs — 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 — which 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.

Design notes and the twenty-one decisions behind it: DESIGN.md.