draw
Local-first, sketch-style drawing tool. Excalidraw-inspired, built on Rust with a vanilla JS frontend.
Single binary. No cloud. Your drawings live in ~/.config/draw/drawings/.
Features
- 9 tools: Select, Rectangle, Ellipse, Diamond, Line, Arrow, Pen (freedraw), Text, Eraser
- Sketch-style fills: hachure (diagonal lines), cross-hatch, solid, none
- Full interactions: drag, resize, multi-select, rubber band, pan (scroll/space+drag), zoom (ctrl+scroll)
- Undo/redo: all operations, including batched multi-element changes
- Copy/paste/duplicate with proper ID remapping
- Z-ordering: bring to front/back/forward/backward
- Styles: stroke color/width/dash, fill color/pattern/density, opacity, font
- Export: SVG and PNG
- Document management: auto-save, dirty indicator, rename, list
- Desktop app: native window via webview (same UI, no browser needed)
- Python bindings:
import dkdc_draw - Keyboard-driven: full shortcut set,
?for help overlay
Install
From source (Rust)
cargo install dkdc-draw --features webapp
From source (Python)
uv tool install dkdc-draw
Development
bin/setup # install dependencies
bin/install # build and install CLI
Usage
draw --webapp # launch web UI
draw --app # launch desktop app
draw new [name] # create new drawing
draw open <file> # open .draw.json file
draw list # list saved drawings
draw export-svg <file> [-o output.svg]
draw export-png <file> [-o output.png] [--scale 2.0]
Python
import dkdc_draw
doc = dkdc_draw.new_document("sketch")
dkdc_draw.save_document(doc, "sketch.draw.json")
svg = dkdc_draw.export_svg(doc)
Keyboard shortcuts
| Key | Action |
|---|---|
| V | Select |
| R | Rectangle |
| O | Ellipse |
| D | Diamond |
| L | Line |
| A | Arrow |
| P | Pen (freedraw) |
| T | Text |
| E | Eraser |
| G | Toggle grid snap |
| ? | Help overlay |
| Ctrl+Z | Undo |
| Ctrl+Shift+Z | Redo |
| Ctrl+S | Save |
| Ctrl+A | Select all |
| Ctrl+D | Duplicate |
| Delete | Delete selected |
| ] / [ | Bring to front / Send to back |
Architecture
crates/
draw-core/ Document model, serialization, SVG/PNG export, tiny-skia renderer
draw-cli/ CLI binary (clap)
draw-webapp/ Axum web server (port 1213) + embedded vanilla JS frontend
draw-app/ Desktop app (wry webview)
draw-wasm/ WASM bindings for the renderer
draw-py/ PyO3 Python bindings
Development
bin/build # build all (Rust + Python)
bin/check # run all checks (format, lint, test)
bin/format # format all code
bin/test # run all tests
License
MIT
Release files for dkdc-draw 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dkdc_draw-0.2.1.tar.gz | 332.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.39+ x86-64 | Details |
| dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.39+ ARM64 | Details |
| dkdc_draw-0.2.1-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| dkdc_draw-0.2.1-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 168.5 MB
Release files / dkdc_draw-0.2.1.tar.gz
| Download URL | dkdc_draw-0.2.1.tar.gz |
|---|---|
| Size | 332.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
52276aacbfaa856d9b3af3cd68aa2388a75dffa79ef20426d5426e5caa3053a8
|
|
BLAKE2b-256 checksum How to use checksums |
d9b5eb53b2d425205865e99c1e252aa91b33a36f78fdd7f4f6dcccedeb98f1f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_x86_64.whl
| Download URL | dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 81.0 MB |
| Tags | CPython 3.11 Linux glibc 2.39+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
26985717ab343b0d92b7b4cc8b31a53feae5bbc097da92259e53ebc03cae2e02
|
|
BLAKE2b-256 checksum How to use checksums |
9479031b089983ac984d1537ed9e79dd543496a406e763137f96799a9ebc11c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_aarch64.whl
| Download URL | dkdc_draw-0.2.1-cp311-abi3-manylinux_2_39_aarch64.whl |
|---|---|
| Size | 80.2 MB |
| Tags | CPython 3.11 Linux glibc 2.39+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
f2712b05d922c801d8290cec26e10c77ef8b7c6ab15cb5c6cf6c410fd407d18d
|
|
BLAKE2b-256 checksum How to use checksums |
c599b3919dc7cf6dbe6e0131a3717c31dcc34e7b3699f0d5eea9633a2812682a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / dkdc_draw-0.2.1-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | dkdc_draw-0.2.1-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c86bd8250c68fd38006d8a4d9a1ac83330f089ccf5158ba32402f8558cb2e388
|
|
BLAKE2b-256 checksum How to use checksums |
aea719c6ebc8867c63cd4125bba21414bc6aeee3ca8d3ce61d83e282a595d7e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / dkdc_draw-0.2.1-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | dkdc_draw-0.2.1-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2c4d9039c12f793ab5739752025df7bd633268408afdf1489fea445d37210576
|
|
BLAKE2b-256 checksum How to use checksums |
33bf36914376252fe7dd34c91f3500c0abc3295456ff26115b332ea5bbbfd8eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency log