Reading the repo
Opening the box…
Reading the repo
Opening the box…
Assembly instructions
A drawing app built for agent/human collaboration
Saved setup from 9 h ago
Will it work on macOS?
CONTRIBUTING.mdThank you for looking. klad is young and changes fast; issues with a drawing that shows the problem are the most useful thing you can send.
KLAD_BACKTRACE=1 for the details of an error), klad --version, your OS, and if you can the .klad folder (zipped) or the commands that make it.scripts/lib/showcase.mjs in klad-site.SECURITY.md, not the issue tracker.rust-toolchain.toml picks the version. just runs the recipes.pkg-config, libfreetype-dev, libfontconfig1-dev, libxkbcommon-dev and libwayland-dev. Windows: Visual Studio's C++ build tools; the check on every pull request builds it there.skia-bindings does this), so it needs network once.just build counts the patch version up and builds klad and klad-editor for this machine (just build minor, just build major; just compile, or just on its own, builds without counting up), just test, just lint. They build into target/ on macOS and target/linux on Linux, so one checkout can be built from both. just audit needs cargo-deny and cargo-about (cargo install cargo-deny --locked and cargo install cargo-about --locked --features cli).klad open, or klad-editor on its own (the app on a Mac, the program to start on Windows). cargo build --no-default-features -p klad-cli builds klad without the editor, for servers. Its panels are tested headless with egui_kittest; cargo test -p klad-app -- --ignored editor_picture (the editor with a sample drawing on its canvas), start_pictures and just ui-pictures write pictures of the UI to scratch/ui/.These come from CLAUDE.md, which is also the guide for coding agents working on the repository.
// TODO:. Names and small functions carry the meaning.core, brush and render give the same pixels on every machine. Transcendental math goes through libm, randomness through the seeded klad_core::rng, no clock, no HashMap order in output, parallelism only over independent tiles or rows. A change that moves a sample's hash says why.klad/N) and adds a migration, so older .klad drawings open unchanged, and updates docs/format.md. A migration converts, it never drops: what a drawing holds survives every later version. (klad/4 dropping the rigs of klad/1 to klad/3, before 1.0, was the last exception.) tests/formats/ holds drawings saved by each release with their frame hashes; the test opens them all, and a change that makes one render differently is fixed, or listed in tests/formats/accepted.txt (<version>/<bundle> <frame> <new hash>) and in the release notes.deny.toml). Adding one means just audit passes and just notices regenerates THIRD-PARTY-NOTICES.md in the same change.ink, light, hatch, paint, scatter) are the exception and stay CLI only.just lint and just test are clean before a pull request.docs/ starts with a _Last updated:_ line.docs/guide/ are short how-to pages: one task per section, titled as the goal, done the shortest way in numbered steps, under about 300 words a page, with no catalogues of options.main, keep the change to one thing.just lint, just test and just audit pass.klad render) before and after.CLA.md): one click, and it covers every later change. Under it your contribution is licensed to Indicode BV for inclusion in klad and in the builds of klad it sells; you keep the copyright to your work.klad is source-available, not open source (LICENSE): its licence lets you send changes to Indicode BV to propose them, so a fork on GitHub for pull requests is fine; publishing klad or builds of it elsewhere is not. docs/format.md, docs/cli.md, docs/skill/ and crates/client/ are MIT (LICENSE-MIT); klad-client depends on nothing in the other crates, so it stays MIT on its own.
The Mac and Windows builds are sold on itch.io (and later Steam); Linux is built from source. GitHub has the release notes, not downloads.
just build minor (or major) sets the release's version; move the changes under "Unreleased" in CHANGELOG.md to a section ## x.y.z (date) with that version.. just formats x.y.z saves seven samples with their hashes into tests/formats/x.y.z/ (after just samples; packaging/formats.sh <klad> x.y.z <folder> takes them from another folder, laid out as <name>/<name>.klad). Commit.ITCH_TARGET=<user>/<page> just itch-mac builds the app (arm64 and x86_64 in one) and pushes it to the page's mac channel.vx.y.z and push the tag. The release workflow runs the checks, builds the Windows version and pushes it to the windows channel (with the BUTLER_API_KEY secret and the ITCH_TARGET variable set in the repository), then publishes that changelog section as the release notes, which the editor's update check reads.Then run bash setup.sh. It stops at the first error and is safe to run again. Servers and tests aren't started; it lists them at the end. Read it first.
Needs Git: xcode-select --install
git clone https://github.com/klad-app/klad.git cd klad
Rust stable
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh rustup show # installs the pinned toolchain
cargo build
cargo test
docs/format.md: the file format of a drawing, enough to read and write one from any program.docs/cli.md: every command with its options (klad <command> --help prints the same).crates/client: klad-client, a small Rust crate that runs klad commands, applies edits as JSON ops and reads drawings back.docs/DESIGN.md: how klad is built: the CLI, the brush engine, rendering, the editor, the dependencies.CONTRIBUTING.md: building, testing, the code rules and how to send a change.samples/: generators that make drawings from scratch, the best place to see the ops in use.just compile # release build of the klad CLI and the editor (plain `just` does the same)
just test # every test, and the drawkit check
just lint # rustfmt and clippy, warnings as errors
just audit # licences, RustSec advisories, sources, and the notices are current
just samples # build the sample drawings
No reports for macOS yet.
GitManual AI Agent reads the 8 key files and writes a step-by-step guide for macOS. Once written, it's saved for everyone.