English | 中文

A terminal text editor written in Zig.

Editing (vim-style)

- Six modes: Normal / Insert / Visual / Visual Line / Visual Block / Command

- Full motions with counts: hjkl, w/e/b/ge, ^/0/$, gg/G, {/}, %, f/F/t/T, Ctrl-u/d/f/b

- Text objects, surround, comments, alignment, EasyMotion (s / <leader>f), multi-cursor (Ctrl+n)

- Undo/redo (grouped + branch semantics), register semantics (linewise/charwise yank & put) with system clipboard interop (OSC52 + pbcopy/wl-copy/xclip/xsel, nvim clipboard=unnamedplusstyle)

- Keyboard macros: q{reg}records (q stops),@{reg}replays with count support (3@a,@@); in Visual mode@runs the macro once per selected line (:'<,'>normal!semantics);recording @xstatus indicator

- Splits (:sp/:vs + Ctrl-w family), buffer tab bar, relative line numbers, code folding

Syntax & UI

- tree-sitter syntax highlighting (multiple bundled grammars), rainbow brackets, indent guides + scope highlight animation

- Inline markdown rendering: headings/bold/italic/links/code, fence code highlighted in its own language, markup concealed off the cursor line, checkbox icons, heading/code-block background bands

- Multiple themes (<leader>sptheme picker with live preview; the choice persists automatically — no config or env var needed): kanagawa-wave, kanagawa-dragon, catppuccin (latte / frappe / macchiato / mocha), tokyonight (night / storm / moon), everforest, onedark, melange, doom-one, sonokai-shusia, flexoki-dark, flexoki-light

- Soft-wrap: lines wider than the window wrap onto continuation rows (grapheme/CJK-width aware)

- Large-file degradation: highlighting turns off above 100 KB to stay smooth

LSP

- Async attach (never blocks startup); works with zls and other common servers (auto-detects mason install paths)

- Hover (K), goto definition/declaration/references/implementation (gd/gD/gr/gI), signature help (gs)

- Diagnostics gutter marks + ]d/[djumps + diagnostics list (<leader>sd)

- Auto-completion menu + ghost text (<C-n>/trigger characters), inlay hints (<leader>ti)

- Rename (<leader>rn), format (<leader>lf), document outline (<leader>o)

Navigation & search

- Fuzzy pickers: files (<leader>sf), grep (<leader>st), buffers (<leader>sb), recent files (<leader>sr), keymaps (<leader>sk)

- File tree (<leader>etoggle,<leader>Elocate current file) rooted at the workspace's project directory

- In-buffer search (/,?, n/N)

Workspaces (Doom-Emacs style)

- Swap-on-switch workspaces: SPC TAB nnew /.pick /rrename /ddelete /xclear session /[]prev · next

- Independent buffers, window layout and file tree per workspace; opening a file already open in another workspace is refused (no double-edit)

- The file tree and fuzzy file picker follow each workspace's project root — the opened file's nearest .gitdirectory, else its own directory

- Status bar shows the current workspace name; a snacks-style dashboard greets a fresh workspace

Git

- Gutter diff marks, ]c/[chunk jumps,<leader>hs/<leader>hrstage/reset,<leader>hphunk preview

- Current-line blame ghost text (shows 1s after the cursor settles, <leader>tbtoggles),<leader>lgfloating lazygit

- Branch name in the status bar

Terminal

- Embedded terminal (Linux / macOS): Alt+rfloating /Alt+wbottom /Alt+eright; Esc in the terminal returns to Normal mode

Requires Zig 0.16.0:

zig build # dev build

zig build -Doptimize=ReleaseFast -Dstrip # release build (daily driver)

zig build test # unit tests

zig build e2e # pty end-to-end tests (Linux only for now)Run: oz [file[:line]]

Methodology: pty-driven with screen reconstruction, same machine (Apple Silicon, macOS), same files, median of 3 runs.

On par with or faster than nvim in every scenario. Key design choices: mmap-backed lazy file loading, PieceTable with incremental line index, incremental tree-sitter parsing, async LSP handshake + writer thread + incremental sync, atomic saves (temp file + rename).

Prebuilt binaries for Linux (x86_64/arm64) and macOS (x86_64/arm64) are attached to each GitHub Release — download, extract and run, no Zig needed. To build from source see "Build & Run" above.

MIT © niT-Tin

A personal project maintained in spare time — please set expectations accordingly:

- Features are driven by my own daily use; bug reports with repro steps are very welcome;

- Pull requests are reviewed and merged, but on my own schedule;

- Keybindings / APIs may still change during 0.x;

- A star is the nicest encouragement.