English | 中文
A terminal text editor written in Zig.
Editing (vim-style)
<leader>f), multi-cursor (Ctrl+n)clipboard=unnamedplus style)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 @x status indicatorSyntax & UI
<leader>sp theme 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
LSP
]d/[d jumps + diagnostics list (<leader>sd)<C-n>/trigger characters), inlay hints (<leader>ti)<leader>rn), format (<leader>lf), document outline (<leader>o)
Navigation & search
<leader>sf), grep (<leader>st), buffers (<leader>sb), recent files (<leader>sr), keymaps (<leader>sk)<leader>e toggle, <leader>E locate current file) rooted at the workspace's project directory/, ?, n/N)


Workspaces (Doom-Emacs style)
SPC TAB n new / . pick / r rename / d delete / x clear session / [ ] prev · next.git directory, else its own directory

Git
]c/[c hunk jumps, <leader>hs/<leader>hr stage/reset, <leader>hp hunk preview<leader>tb toggles), <leader>lg floating lazygit
Terminal
Alt+r floating / Alt+w bottom / Alt+e right; 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.
| Scenario | oz | nvim --clean |
|---|---|---|
| Startup (small file) | 66 ms | 115 ms |
| Startup (5 MB / 100k lines) | 65 ms | 118 ms |
| Startup (.zig, zls installed) | 52 ms | 117 ms |
| G to end of file (100k lines) | 54 ms | 65 ms |
| 100× Ctrl-F paging | 54 ms | 100 ms |
| 500× j cursor moves | 53 ms | 100 ms |
| Type 100 chars | 64 ms | 66 ms |
| Type 30 chars at EOF of a 100k-line file | 71 ms | 56 ms |
| Full-text search (100k lines) | 58 ms | 66 ms |
| Type 60 chars with LSP attached | 60 ms | 56 ms |
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:
199 commits
Zig
97.7%
Tree-sitter Query
1.2%
Python
1.1%
English | 中文
A terminal text editor written in Zig.
Editing (vim-style)
<leader>f), multi-cursor (Ctrl+n)clipboard=unnamedplus style)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 @x status indicatorSyntax & UI
<leader>sp theme 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
LSP
]d/[d jumps + diagnostics list (<leader>sd)<C-n>/trigger characters), inlay hints (<leader>ti)<leader>rn), format (<leader>lf), document outline (<leader>o)
Navigation & search
<leader>sf), grep (<leader>st), buffers (<leader>sb), recent files (<leader>sr), keymaps (<leader>sk)<leader>e toggle, <leader>E locate current file) rooted at the workspace's project directory/, ?, n/N)


Workspaces (Doom-Emacs style)
SPC TAB n new / . pick / r rename / d delete / x clear session / [ ] prev · next.git directory, else its own directory

Git
]c/[c hunk jumps, <leader>hs/<leader>hr stage/reset, <leader>hp hunk preview<leader>tb toggles), <leader>lg floating lazygit
Terminal
Alt+r floating / Alt+w bottom / Alt+e right; 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.
| Scenario | oz | nvim --clean |
|---|---|---|
| Startup (small file) | 66 ms | 115 ms |
| Startup (5 MB / 100k lines) | 65 ms | 118 ms |
| Startup (.zig, zls installed) | 52 ms | 117 ms |
| G to end of file (100k lines) | 54 ms | 65 ms |
| 100× Ctrl-F paging | 54 ms | 100 ms |
| 500× j cursor moves | 53 ms | 100 ms |
| Type 100 chars | 64 ms | 66 ms |
| Type 30 chars at EOF of a 100k-line file | 71 ms | 56 ms |
| Full-text search (100k lines) | 58 ms | 66 ms |
| Type 60 chars with LSP attached | 60 ms | 56 ms |
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:
199 commits
Zig
97.7%
Tree-sitter Query
1.2%
Python
1.1%