Skip to content

bnema/vev

Repository files navigation

vev

Norwegian: to weave

A terminal multiplexer for Linux and macOS on Apple silicon (arm64). One Go binary, a per-user daemon, a thin client.

Warning

Alpha software. Expect breaking changes.

CI covers Ubuntu and macOS arm64. The release installer supports Linux x86_64 and macOS arm64.

What it is built around:

  • Remote attach that survives bad networks. SSH bootstraps the connection, then the session runs over UDP and resumes after sleep or Wi-Fi changes. Inspired by mosh, with its own protocol.
  • Server-side rendering. The daemon keeps a full VT screen per pane and sends minimal diffs to the client, so high-output programs (agents, build logs) stay smooth locally and over SSH.
  • Nothing but the standard library. VT emulation, renderer, wire protocol, and UDP transport are all in this repo. Zero runtime dependencies.
  • Performance treated as a feature. A reproducible harness measures 252 scenarios across workloads and transports, including lossy and high-latency UDP.

Install

go install github.com/bnema/vev@latest

The default UI runs entirely from the vev binary. Optional external bar anchors can be configured in ~/.config/vev/config.

Usage

vev                              create an ephemeral session
vev new <name>                   create a named session
vev attach <name>                attach to a session (alias: a)
vev attach user@host[:session]   attach to a remote daemon over SSH
vev ls                           list sessions
vev kill <name>                  kill a session (--all kills everything)

The daemon starts on first use and exits with the last session. Ephemeral sessions are numbered, survive detach, and disappear with the daemon. Named sessions persist across daemon restarts and come back with their layout, scrollback, and allowlisted processes.

Keys

No prefix key; everything is Alt.

Key Action
Alt+Space command palette
Alt+f floating terminal for the current tab
Alt+1 .. 9 switch tab
Alt+h/j/k/l, Alt+Arrow focus pane
Alt+a jump to a session needing attention

The palette does the rest: type a short code (SPR split right, CNT new tab, SSP session picker, ...) or fuzzy-search the command list. Named active and stopped sessions are fuzzy-searchable, and selecting a stopped session resumes it. Scroll up with the mouse to enter scrollback; vim keys move, v selects, y copies via OSC 52.

Remote attach

vev attach user@host[:session]

vev must be installed on the remote. If your firewall only allows SSH, open the UDP range first (default 61000:61023, override with VEV_UDP_PORT_RANGE):

sudo ufw allow 61000:61023/udp

Where UDP is not an option, VEV_REMOTE_TRANSPORT=stdio keeps everything inside SSH at the cost of slower disconnect detection. Details in docs/remote-resilience.md.

Configuration

Optional file at ~/.config/vev/config, reloaded live. Themes, key bindings, palette codes, the floating terminal, status bar scripts: see docs/configuration.md. Terminal color and VT compatibility notes live in docs/terminal.md.

Development

make test   # go test ./... -race
make lint   # goimports check, go vet
make mocks  # regenerate mocks

About

Yet another terminal multiplexer, in pure Go with zero deps.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages