Lazydraw: Terminal ASCII editor for drawing diagrams and sketches
Summary
Lazydraw is a terminal-based ASCII editor for creating and exporting diagrams and sketches, with features like box drawing, text editing, and integration with multiplexers. It is built on Bun and OpenTUI, offering easy installation via npm or Bun.
View Cached Full Text
Cached at: 09/24/26, 07:04 AM
mpospirit/lazydraw
Source: https://github.com/mpospirit/lazydraw
lazydraw
lazydraw is a terminal ASCII editor for drawing quick diagrams and sketches, with options to export to text files or copy to the clipboard.
https://github.com/user-attachments/assets/ef0d2284-5a39-46ca-bd87-860584e53158
Acknowledgements
- 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.
Install
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
lazydraw
If 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 lazydraw
Or skip installing altogether:
bunx lazydraw
Inside herdr
lazydraw ships a herdr plugin manifest, so it can live in your multiplexer as a pane split to the right of whatever you’re working on:
herdr plugin install mpospirit/lazydraw
The install step runs bun install --production in the clone, so Bun still has to be
on your PATH.
Plugin manifests can’t declare their own keybindings — herdr owns that surface — so add
this to your own config.toml (opened via herdr’s settings, or
~/.config/herdr/config.toml) and run herdr server reload-config:
[[keys.command]]
key = "prefix+ctrl+d"
type = "plugin_action"
command = "mpospirit.lazydraw.open"
description = "open lazydraw"
Ctrl+B Ctrl+D then opens the canvas as a right-hand split. Rebind it by changing
key above.
Run
lazydraw # open the last drawing
lazydraw architecture # open or create a drawing by name
lazydraw ./diagram.ld.json
lazydraw --import notes.txt
Export a drawing without opening the UI:
lazydraw export architecture --basic --comment hashes --fenced -o diagram.txt
lazydraw list
Toolbar
≡ │ box select arrow line text eraser │ export │ ⟲ ⟳ │ ⚙ │ help
≡ | switch drawings; new, rename, fork, import, clear, delete |
box | drag corner to corner |
select | drag a box’s inside to move it with its arrows attached, drag a line to resize, drag a line end to reshape, drag empty space to select |
arrow / line | drag start to end; hold Shift or press f mid-drag to flip the elbow |
text | click and type; Enter starts a new line, Esc finishes |
eraser | drag to erase; detaches from lines it touches |
export | extended or basic characters, 11 comment styles, Markdown fence, preview, copy, save |
⟲ / ⟳ | undo / redo |
⚙ | grid style (lattice, checker, dots, off), theme (terminal + 10 IDE themes), copy on select, recenter |
help | help for the active tool, plus the shortcut list |
Keys
| Key | Action |
|---|---|
1–6, Alt+1–Alt+6 | switch tool |
r v a l t e | switch tool: box, select, arrow, line, text, eraser |
Ctrl+Z / Ctrl+Y | undo / redo (Ctrl+Shift+Z also redoes on terminals with the kitty keyboard protocol) |
Ctrl+C Ctrl+X Ctrl+V | copy, cut, paste the selection (bracketed paste works too) |
Del / arrow keys | erase or nudge the selection |
wheel, Shift+wheel | pan vertically / horizontally |
Space+drag, middle-drag | pan freely |
Ctrl+O Ctrl+E Ctrl+S | files / export / save now |
?, Esc | help; close a popover, cancel a drag, deselect |
Ctrl+Q twice | quit; the first press prompts, a second within 3 s exits (drawings autosave) |
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.
Files
- 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.
Terminal notes
- 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.
Development
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.
Similar Articles
@Ryrenz: One Whiteboard for Mind Maps, Flowcharts, and Free Drawing – 14.4K Stars on GitHub. Drawing a flowchart requires a dedicated tool, a mind map another, and a quick sketch yet another. Three tools, three sets of shortcuts, files spread across three places, and an idea needs three tools to be fully expressed. Drawn…
Drawnix is an open-source whiteboard tool that integrates mind mapping, flowcharting, and free drawing features, supports Mermaid and Markdown conversions, and is developed with a plugin architecture.
Show HN: Free Mermaid Diagram Editor
A free, no-signup Mermaid diagram editor with live preview, instant SVG/PNG export, and shareable links that run entirely in the browser. Optionally connects to GitHub to auto-generate architecture diagrams from source code.
Drawsy
Drawsy is an AI workspace that integrates canvas and code for creative and development tasks.
Drawably: Hand-Drawn UI Controls
Drawably is a JavaScript library that provides hand-drawn UI controls with animated pen sketches for web development.
Mermaid to ASCII art (mermaid-ascii)
A web tool that converts Mermaid diagram syntax into ASCII and Unicode box-drawing art, rendered entirely in the browser using a Go library compiled to WebAssembly. Supports flowcharts, sequence diagrams, colors, and customizable output.