ViF
vi motions meet a roguelike terminal shooter
Live on this site In active development. Play in terminal, the browser, or host a multiplayer game in the lobby.
ViF (short for vi-fighter) is a real-time terminal game that combines Vim-style navigation and text operations with typing, shooting, procedural encounters, adaptive enemies and generative audio.
Movement, targeting and editing use vi motions: hjkl, w/b/e, f/t,
counts, operators, registers, searches and macros, across Normal, Insert, Visual,
Search, Command and Overlay modes. Play with the keyboard, the mouse, or both.
It is written in Go around a custom Entity-Component-System, an event-settled fixed-step runtime and TOML-authored hierarchical state machines, with no CGO. The same build plays solo, hosts or joins a multiplayer game, runs as a dedicated server with no terminal, replays recorded runs, and runs headless for deterministic tests.














The browser build is the Go game compiled to WebAssembly and drawn by xterm.js. It opens in its own tab, because the terminal captures the keyboard and mouse while it has focus. It plays solo, or joins a game hosted in the multiplayer lobby over a WebSocket on this site.
- Requires
- A modern browser with JavaScript and WebAssembly. WebGL2 draws the terminal when available; otherwise xterm.js falls back to its slower DOM renderer.
- Audio
- Silent in the browser. Native builds synthesize music and effects; they start
muted, and
Ctrl-Scycles the channels. - Performance
- Usually below the native build: the Go runtime, the game loop and the renderer all share the browser.
- Multiplayer
- Host a game in the lobby, then join it from the browser or from a native
build with the command it hands back. A native build can also do it in one
step:
vif -join https://lixen.com.
ECS runtime
float64.Adaptive enemies
Multiplayer
Terminal compositor
Procedural audio
Input and replay
Runtime
- Platforms: Linux and FreeBSD; WebAssembly in the browser; experimental Windows
- Toolchain: Go 1.27, no CGO
- Dependencies: own Go modules for terminal, TOML, colour and logging
- Data: TOML scenarios, species, visuals, audio and keymaps, with embedded fallbacks
- Modes: interactive, dedicated server, headless simulation, journal replay
- Multiplayer: framed TCP, or WebSocket for browsers and blocked networks
- License: BSD-3-Clause
Build
- Clone
git clone https://github.com/lixenwraith/vif --depth 1- Build
cd vif && make release- Play
./bin/vif- Online
./bin/vif -join https://lixen.com