Thanks for your interest. draw is a small project; contributions that keep it small are welcome.
bin/setup # install toolchains + wasm-pack + Python deps
bin/build # build everything (Rust + Python + WASM)
bin/install # install the CLImacOS or Linux. The desktop app depends on system GTK/WebKit on Linux; on macOS it uses the built-in WebView.
bin/check # fmt, clippy, tests — Rust and Python. Run before you push.
bin/format # apply formatting
bin/test # tests onlyCI runs bin/check on every PR. Narrower scripts (bin/check-rs, bin/check-py) exist for iteration but the full bin/check is the gate.
draw --webapp # web UI at http://localhost:1213
draw --app # desktop windowSee AGENTS.md for the crate map. Short version:
crates/draw-core: document model, serialization, SVG/PNG export, renderercrates/draw-cli: thedrawbinarycrates/draw-webapp: Axum server + embedded vanilla-JS frontendcrates/draw-app: desktop webview wrappercrates/draw-wasm: renderer compiled to WASM for the browsercrates/draw-py: PyO3 Python bindingspy/dkdc_draw: Python package + type stubs
- One logical change per PR. Small and focused beats big and sweeping.
- Commit style: Conventional Commits (
feat:,fix:,refactor:,docs:,chore:,ci:). - Keep
bin/checkgreen. - New features should come with tests. Bug fixes should come with a regression test when practical.
- User-visible changes warrant a line in
README.md(feature list or keyboard table) orCHANGELOG.md.
Open an issue at https://github.com/dkdc-io/draw/issues. Include:
- What you did
- What you expected
- What actually happened
draw --version, OS, and whether you hit it in--webappor--app
A minimal .draw.json reproducing the bug is gold.
By contributing you agree your work is licensed under MIT, the same as the rest of the project.