lazydraw is a terminal ASCII editor for drawing quick diagrams and sketches, with options to export to text files or copy to the clipboard.

demo.mp4

- ASCIIFlow by Lewis Hemens: the original, and the thing lazydraw is trying to be in a terminal.

- termDRAW by Ben Vinegar: showed that this class of editor is possible in the terminal, and shaped how the rendering loop is approached.

- OpenTUI by SST: the terminal UI engine the whole front end is built on.

lazydraw runs on the Bun runtime, so Bun 1.3 or later has to be installed. You also want a terminal with mouse support.

bun install -g lazydraw

lazydrawIf the lazydraw command isn't found afterwards, Bun's global bin directory isn't on

your PATH. Add it to your shell profile:

export PATH="$HOME/.bun/bin:$PATH"npm installs it just as well, and usually lands somewhere already on your PATH:

npm install -g lazydrawOr skip installing altogether:

bunx lazydrawlazydraw # open the last drawing

lazydraw architecture # open or create a drawing by name

lazydraw ./diagram.ld.json

lazydraw --import notes.txtExport a drawing without opening the UI:

lazydraw export architecture --basic --comment hashes --fenced -o diagram.txt

lazydraw list≡ │ box select arrow line text eraser │ export │ ⟲ ⟳ │ ⚙ │ help

In text mode, printable keys (including digits, q and ?) type text.

Selecting can also copy to the clipboard by itself — settings → copy on select, off by default.

- Drawings: ${XDG_DATA_HOME:-~/.local/share}/lazydraw/drawings/<name>.ld.json

- Config: ${XDG_CONFIG_HOME:-~/.config}/lazydraw/config.json

Drawings autosave 500 ms after each change, and again on quit.

- tmux: needs set -g mouse on. Copying via OSC 52 needsset -g set-clipboard on.

- macOS: Alt+digit needs "Option as Meta" (or use the bare digits).

- Colors: the default terminaltheme reads your terminal's own palette (OSC 10/11/4) and wears it — background, text and ANSI colors — so lazydraw is see-through and matches whatever your terminal looks like.settings → themealso offers ten IDE themes, which paint their own background:dracula,nord,tokyo-night,catppuccin,one-dark,gruvbox,monokai,night-owl,solarized-dark,github-light. Terminals that don't answer the color query fall back tonord.

- Grid: the default latticestyle draws🭼(U+1FB7C) in each empty cell, tinted 7% from your background toward the text color so it stays faint. If your terminal doesn't render it as cell-edge hairlines, switch tocheckerinsettings.

bun install

bun start # run from source

bun test # unit, fixture, and end-to-end tests

bun run typecheck

bun run build # standalone binary at dist/lazydraw-

src/coreis pure TypeScript with no terminal code. Its drawing logic (glyph connection, snapping, line routing, box/line/select/move tools, export wrappers) is ported from ASCIIFlow'sclient/.

-

src/tuiis the OpenTUI front end: one full-screen surface that paints the canvas, toolbar, popovers and dialogs.

-

test/fixtures/asciiflowholds golden outputs captured by replayingtest/scenarios/asciiflow.jsonthrough ASCIIFlow's own code. To regenerate them:git clone https://github.com/lewish/asciiflow /tmp/asciiflow && (cd /tmp/asciiflow && bun install) bun run fixtures /tmp/asciiflow

-

test/upstreamruns ASCIIFlow's own spec files against lazydraw's core, through a small compatibility shim.