Veter (Russian: ветер, "wind") is a GUI terminal emulator built around a family of custom protocols that all ride a single PTY:
- PRT — Portal Extension. Carves the terminal grid into recursive sub-terminals (multiplexer panes, PiP log views, scrollback-anchored snapshots). See
doc/portal-extension.md. - VGE — Vector Graphics Extension. Vector primitives, text, and images rendered directly inside the terminal grid. See
doc/vector-graphics-extension.md. - VFT — File Transfer Extension. Move file bytes between a client running in the terminal and the host, in either direction, over the same PTY. (WIP, v0.) See
doc/file-transfer-extension.md. - VSS + SES — Session layer.
vsdkeeps a session alive across renderer disconnects (SSH survivability), shipping its state as a VSS binary snapshot on attach; SES is the smallvmux↔vsdcontrol channel. Seedoc/session-manager.mdanddoc/session-extension.md.
Every protocol is framed as APC envelopes (ESC _ … ESC \) so they pass cleanly through pipes, script(1), and other terminal tooling.
| Crate | Purpose |
|---|---|
veter |
The GUI terminal (winit + glutin + femtovg + parley + swash). |
veter-host |
GUI-free host engines (vt100 + PRT + VGE + VFT + SES + VSS) shared by the veter GUI and the vsd daemon. |
vmux |
Terminal multiplexer that runs inside veter, using PRT for panes and VGE for chrome. Default prefix Ctrl+Space. |
vcat |
Display images inside a VGE-aware terminal. |
vplay |
Interactive image and video viewer for VGE-aware terminals. |
vdraw |
Interactive block-diagram editor; draws with VGE, stores .excalidraw documents. |
vfm |
File browser with picture previews: ranger-style column navigation and a Dolphin-style thumbnail icon grid for the current directory, plus copy/move/delete/rename, in-app previews, and config-driven file opening (~/.config/vfm/config.toml). |
vsend, vrecv |
Upload a local file to / pull a host-side file back from a VFT-aware terminal. |
vsd |
Persistent session daemon — holds session state across renderer disconnects. |
vssh |
SSH wrapper that keeps the veter tools fresh on remote hosts. |
vproto |
Speak VGE/PRT/SES from a script: JSON commands in, JSON responses out. vproto schema prints the command shapes. |
vplace |
Place an image into a pane from outside its foreground program, anchored to a marker line that doubles as the caption. |
vge-protocol, prt-protocol, vft-protocol, ses-protocol, vss-protocol |
Pure wire-format crates — APC parser, codec, encoders. No state, no rendering. |
vge-render |
Shared client-side image-rendering + raw-TTY / probe helpers (used by vcat, vplay, vdraw, vfm). |
vge-ui |
Shared client-side widget toolkit: accent theme, chrome paths, line editor, filterable picker, modal builders, key/mouse input parsing (used by vmux, vfm). |
vt100 |
Vendored fork of the vt100 parser (adds clear_scrollback, resize helpers, scrollback-line tracking, and binary snapshot/restore). |
breakout, spinner |
VGE demos. |
Cargo workspace, edition 2024 (the vendored vt100 fork stays on 2021).
cargo build --release
cargo run -p vetermake install # veter + vcat, vplay, vdraw, vfm, vmux, vsend, vrecv, vsd, vssh to $PREFIX/bin (default ~/.local) plus a desktop entry
make uninstallOverride PREFIX=... to retarget. make install-remote-<arch> cross-compiles a musl build and installs it to $REMOTE.
cargo test # whole workspace
cargo test -p prt-protocol # one crate