ASCII diagrams that live in your terminal and stay in git
demo.huski
huski demo

What it is

huski is a terminal diagram editor. You draw boxes, lines, and text as discrete objects — not painted cells. Move things around, layer them, connect them with routed lines. Save to YAML, diff in git, render to plain text for docs and READMEs.

🐾

Object model

Shapes are real objects, not a flat grid. Move, resize, copy, layer, and group them independently.

⌨️

Vim keybindings

Normal / Insert / Command modes. hjkl navigation, yank/paste, undo/redo. Fully remappable in config.

📄

Plain text format

.huski files are readable YAML. Version control them, diff them, generate them programmatically.

🎨

Box styles

Heavy, light, double, rounded, ASCII. Junction characters merge correctly at intersections.

♾️

Infinite canvas

No page size. Draw as large as you need — viewport follows the cursor, content bounds on demand.

🔧

CLI render mode

huski render file.huski prints plain ASCII — pipe it into docs, scripts, or CI output.

Build from source

Requires Go 1.21+. No runtime dependencies.

build from source
# clone and build git clone https://github.com/artw/huski cd huski make build # compile binary make run # build + launch make debug # tmux split with live log # run directly ./huski # new diagram ./huski diagram.huski # open file ./huski render diagram.huski # print to stdout

Run huski --dump-config to write defaults to ~/.config/huski/config.defaults.yml. Copy and edit to remap keys, change colours, or swap tool icons.

Keybindings

All bindings are configurable. These are the defaults.

KeyAction
bBox tool
aArrow / line tool
f iFreehand
tText
eEraser
EscNormal mode — select, move, resize
h j k lMove cursor
Ctrl+E Ctrl+YScroll one line down / up
Ctrl+D Ctrl+UScroll half page
y pYank / paste selection
DDuplicate
dDelete selection
u Ctrl+RUndo / redo
< >Layer down / up
[ ]Cycle box / line style
:Command mode — :w, :q, :wq

File format

.huski files are plain YAML. Human-readable, diff-friendly, generatable from scripts or AI tools.

version: 1 shapes: - type: rect id: r-1 origin: [5, 3] w: 20 h: 5 style: heavy label: "gateway" - type: line id: l-1 origin: [25, 5] x1: 25 y1: 5 x2: 40 y2: 5 end_arrow: filled - type: text id: tx-1 origin: [8, 5] text: "gateway"