| Mode | Name | Size | |
|---|---|---|---|
| d--------- | .fastfeedback | 36 | logstatsplain |
| -rw-r--r-- | .gitignore | 145 | logstatsplainblame |
| -rw-r--r-- | DESIGN.md | 40810 | logstatsplainblame |
| -rw-r--r-- | HANDOVER.md | 23905 | logstatsplainblame |
| -rw-r--r-- | Makefile | 9612 | logstatsplainblame |
| -rw-r--r-- | README.md | 3558 | logstatsplainblame |
| -rw-r--r-- | SEED.md | 1095 | logstatsplainblame |
| d--------- | config | 84 | logstatsplain |
| d--------- | contrib | 482 | logstatsplain |
| d--------- | docs | 365 | logstatsplain |
| d--------- | src | 1302 | logstatsplain |
| d--------- | tests | 2370 | logstatsplain |
| d--------- | vendor | 127 | logstatsplain |
sl0ppty
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
sl0ppty # attach to session "main", creating it if needed
sl0ppty -s work # a named session
sl0ppty 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 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.
- 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 decisions behind it: DESIGN.md.
