Quickstart
Quickstart
TL;DR. Drop into the Nix-pinned dev shell, run just ci to verify
the toolchain, then cargo run to spawn a server and attach. phux is
pre-alpha — what works today is single-pane attach with multi-pane
splits, keybindings, status bar, and config loading. Most lifecycle
and federation surface is not yet wired.
Prerequisites
- macOS or Linux
- Nix with flakes (or, off-Nix:
Rust 1.90,
zig0.15,cargo-nextest,cargo-denyon your PATH)
Drop into the dev shell
nix develop # one-shot
# or
direnv allow # once; then automatic on cd
The shell pins Rust 1.90, zig_0_15 (libghostty-vt’s build needs it),
nextest, deny, watch, insta, mutants, and just.
Verify
just check # quick type-check across the workspace
just ci # full CI: fmt-check + lint + test + deny + doc
just ci is the bar. PRs do not land until it’s green.
Run it
cargo run --bin phux # auto-spawns a server, then attaches
Behind that single command: a phux server daemon binds to
$XDG_RUNTIME_DIR/phux/phux.sock, spawns one PTY-backed terminal
(your $SHELL), and the client attaches and starts rendering. Detach
with the default prefix (Ctrl-A d); the server keeps running. Run
cargo run --bin phux again and you re-attach to the same session,
right where you left it.
What works today
- Attach / detach to a single auto-spawned session.
- Split panes (horizontal and vertical), kill panes.
- Status bar with widgets (time, session name); typed widget
contract documented in
consumers/tui.md. - Keybindings via a TOML config that layers over the shipped
default.toml. Prefix-table + global chord resolution. - Help overlay (
prefix ?). - Multi-client attach to the same session.
- Bytes-on-wire terminal content, structured input — full Kitty keyboard, OSC 8, OSC 133, true colour, image protocols pass through.
What doesn’t yet
- The full subcommand set (
phux new,phux ls,phux kill) — onlyphux(naked, auto-attach) andphux servership today. - Most L2 Collection lifecycle and L3 metadata commands.
- Federation routing (satellites, hubs).
- The agent SDK.
- Predictive local echo (designed for; gated on a transport whose RTT actually needs it).
Each of these is spec’d before it’s built, so the wire hooks are
already there. Run bd ready from any phux checkout to see the open
tickets.
Next
You have a server running and a terminal attached. Where you go from here depends on what you came for:
- To understand why the wire is shaped this way → CONCEPTS.md
- To read the actual bytes →
spec/ - To build something on it, or fix something in it →
../CONTRIBUTING.md