v0.3.0 99dc266

README.md RawHistoryFolder


Install

curl -fsSL https://raw.githubusercontent.com/bnema/vev/main/install.sh | sh
# Arch Linux: yay -S vev-bin
# or: go install github.com/bnema/vev@latest

Releases support Linux x86_64/arm64 and macOS Apple silicon.

Usage

vev                              create an ephemeral session
vev new <name>                   create a named session
vev attach <name>                attach to a local session (alias: a)
vev attach user@host[:session]   attach to a remote daemon
vev ls [<host>|--all]            list sessions
vev host add|rm <host>           manage remote hosts
vev host list                    list remote hosts
vev kill <name>|--all            kill sessions

The daemon starts on first use and exits after the last session. Numbered sessions survive detach; named sessions also survive daemon restarts. See durable-session recovery.

[!NOTE] A release that bumps vev's protocol version resets named sessions saved by an older protocol. Session names are retained, but layouts, tabs, terminal history, recovery transcripts, and process-recovery state are discarded. Each local or remote daemon applies this reset to its own sessions when it first starts with the new protocol.

Keys and palette

No prefix key; bindings use Alt.

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

Type a code or fuzzy-search the palette. Common default codes:

Code Action Code Action
CNT new tab CNS new named session
SPR / SPL split right / left SPU / SPD split up / down
STP / TFS stack / toggle stack TFP floating terminal
MFP / MAT move pane / tab SSP session picker
DET detach NTC notifications

Scroll up to enter copy mode; use vim motions, v to select, and y to copy. All codes and bindings are configurable in configuration.

Remote attach

vev attach user@host[:session]

SSH bootstraps an authenticated direct UDP connection that resumes after sleep or network changes. Set VEV_REMOTE_TRANSPORT=stdio to use SSH only. The remote host needs vev installed; see remote resilience for firewall, transport, and host-list details.

Scripting

vev cmd controls a running daemon without starting one:

vev cmd split-right
vev cmd toast -l warn "build failed"
vev cmd list-panes --json

Use vev cmd --help for commands and targeting options.

Documentation

Development

make test   # go test ./... -race
make lint   # goimports check, go vet
make mocks  # regenerate mocks
make demo   # regenerate docs/assets/demo.gif (needs Docker)
source
1<h1 align="center">vev</h1>
2
3<p align="center">
4  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License: MIT"></a>
5  <a href="https://github.com/bnema/vev/releases"><img src="https://img.shields.io/badge/platforms-Linux%20%7C%20macOS-blue?style=flat-square" alt="Platforms: Linux and macOS"></a>
6  <a href="https://github.com/bnema/vev/commits/main"><img src="https://badgen.net/github/last-commit/bnema/vev/main?icon=github" alt="Last commit"></a>
7  <a href="https://github.com/bnema/vev/stargazers"><img src="https://badgen.net/github/stars/bnema/vev?icon=github" alt="GitHub stars"></a>
8</p>
9
10<p align="center"><em>Norwegian: to weave</em></p>
11
12<p align="center">A terminal multiplexer for Linux and macOS.<br>
13Like tmux, minus the prefix key. Like mosh, minus mosh. One binary.</p>
14
15<p align="center"><img src="docs/assets/demo.gif" alt="vev demo: local and remote sessions, splits, stacked panes, floating window, notifications, detach and re-attach" width="800"></p>
16
17---
18
19## Install
20
21```sh
22curl -fsSL https://raw.githubusercontent.com/bnema/vev/main/install.sh | sh
23# Arch Linux: yay -S vev-bin
24# or: go install github.com/bnema/vev@latest
25```
26
27Releases support Linux x86_64/arm64 and macOS Apple silicon.
28
29## Usage
30
31```text
32vev                              create an ephemeral session
33vev new <name>                   create a named session
34vev attach <name>                attach to a local session (alias: a)
35vev attach user@host[:session]   attach to a remote daemon
36vev ls [<host>|--all]            list sessions
37vev host add|rm <host>           manage remote hosts
38vev host list                    list remote hosts
39vev kill <name>|--all            kill sessions
40```
41
42The daemon starts on first use and exits after the last session. Numbered sessions survive detach; named sessions also survive daemon restarts. See [durable-session recovery](docs/durable-session-recovery.md).
43
44> [!NOTE]
45> A release that bumps vev's protocol version resets named sessions saved by an older protocol. Session names are retained, but layouts, tabs, terminal history, recovery transcripts, and process-recovery state are discarded. Each local or remote daemon applies this reset to its own sessions when it first starts with the new protocol.
46
47## Keys and palette
48
49No prefix key; bindings use Alt.
50
51| Key | Action |
52|---|---|
53| Alt+Space | command palette |
54| Alt+f | floating terminal |
55| Alt+1 … 9 | switch tab |
56| Alt+h/j/k/l or Alt+Arrow | focus pane |
57| Alt+a | jump to a session needing attention |
58
59Type a code or fuzzy-search the palette. Common default codes:
60
61| Code | Action | Code | Action |
62|---|---|---|---|
63| `CNT` | new tab | `CNS` | new named session |
64| `SPR` / `SPL` | split right / left | `SPU` / `SPD` | split up / down |
65| `STP` / `TFS` | stack / toggle stack | `TFP` | floating terminal |
66| `MFP` / `MAT` | move pane / tab | `SSP` | session picker |
67| `DET` | detach | `NTC` | notifications |
68
69Scroll up to enter copy mode; use vim motions, `v` to select, and `y` to copy. All codes and bindings are configurable in [configuration](docs/configuration.md).
70
71## Remote attach
72
73```sh
74vev attach user@host[:session]
75```
76
77SSH bootstraps an authenticated direct UDP connection that resumes after sleep or network changes. Set `VEV_REMOTE_TRANSPORT=stdio` to use SSH only. The remote host needs vev installed; see [remote resilience](docs/remote-resilience.md) for firewall, transport, and host-list details.
78
79## Scripting
80
81`vev cmd` controls a running daemon without starting one:
82
83```sh
84vev cmd split-right
85vev cmd toast -l warn "build failed"
86vev cmd list-panes --json
87```
88
89Use `vev cmd --help` for commands and targeting options.
90
91## Documentation
92
93- [Configuration](docs/configuration.md): bindings, palette, theme, overlays, and bar anchors
94- [Terminal compatibility](docs/terminal.md)
95- [Remote resilience](docs/remote-resilience.md)
96- [Durable session recovery](docs/durable-session-recovery.md)
97- [Performance](docs/performance.md)
98
99## Development
100
101```sh
102make test   # go test ./... -race
103make lint   # goimports check, go vet
104make mocks  # regenerate mocks
105make demo   # regenerate docs/assets/demo.gif (needs Docker)
106```

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 12

Tags 11

↑↓ moveenter openesc close