An open-source painting app for Android tablets, Windows and Linux, with its own Rust engine and GPU renderer: a Kotlin/Jetpack Compose UI on Android, the same interface in egui on the desktop.
Pressure-sensitive brushes, layers with blend modes, adjustments, selection and transform, animation and 3D painting, written from scratch.
From Releases: Android tablets take the .apk (or Obtainium, for updates); Windows the .msi installer or the portable .zip; Linux the .AppImage, the .deb or the .tar.gz (videos and PDFs there use the system's ffmpeg and poppler-utils).
Painting · Layers & colour · Adjustments & transform · Actions · Planned features · Building
Dusk, painted from a blank canvas on a Lenovo Legion Tab: the brush library, the colour picker, the layers, a sun snapped round and filled, hills filled the same way, pines, stars with Bloom. About 1:20; the full video (MP4, 2:21) shows every menu at close to real speed. Every stroke is a pen stroke with pressure, eased in and out, played by the demo script.
The canvas: the tools along the top, size and opacity in the sidebar, the whole screen for the painting.
Actions: add files, photos and text; the canvas, its guides and assists; share as PNG, JPEG, PSD, PDF, TIFF, GIF or MP4; a time-lapse of every artwork; preferences and gesture controls.
ProCraft is in beta, on Android tablets and on the desktop (Windows and Linux).
| Area | Status |
|---|---|
| Canvas: the top bar, the sidebar (size, opacity, modify, undo, redo), full screen, gestures (pinch, rotate, quick fit, two- and three-finger taps, scrub to clear) | ✅ |
| Brush engine: shape and grain sources, stroke path, stabilization, taper, rendering and glazes, wet mix, colour dynamics, pen pressure and tilt; the library and the Brush Studio | ✅ |
| Layers: blend modes, opacity, alpha lock, clipping masks, masks, groups, merge, the reference layer; large artworks kept compressed off the GPU | ✅ |
| Colour: disc, classic, harmony, value and palettes; history; eyedropper; filling by dragging the colour onto the canvas | ✅ |
| Adjustments, each with its toolbar, on the layer or painted on | ✅ |
| Selection (automatic, freehand, shapes, feather) and transform (freeform, uniform, distort, warp, snapping) | ✅ |
| Shapes that snap clean, drawing guides and drawing assist (2D, isometric, perspective, symmetry), text | ✅ |
| Animation and page assists, the reference window | ✅ |
| Gallery: stacks, new-canvas presets, import and share (PNG, JPEG, PSD, PDF, TIFF, GIF, MP4), time-lapse | 🚧 nearly done |
| 3D painting: OBJ and USDZ models, texture sets, painting on the mesh, lights and environments | 🚧 |
| Desktop: Windows and Linux, the same interface with a mouse, a pen tablet and keyboard shortcuts; an installer, an AppImage and a .deb | 🚧 beta |
Plugins: .procraft-plugin files you import in Prefs › Plugins, each off until you turn it on and gone without a trace when you turn it off. Filters (a few lines of WGSL, under Adjustments) and sandboxed WebAssembly that changes how the app behaves, such as Interface size, Touch offset and ColorDrop gap closing. How to write one: docs/plugins.md |
🚧 experimental |
| More for plugins: panels and tools of their own, and plugins that can use the app's commands | ⬜ |
| Phones: their own app, ProCraft Pocket (this one is for tablets) | ⬜ |
✅ works today · 🚧 in progress · ⬜ not started · 🚫 not planned
One Gradle command builds the whole app: it compiles the Rust engine with cargo-ndk and generates the Kotlin bindings.
- Clone this repository
- Make sure you have at least 6 GB of free disk space
- enter
androidand run./gradlew assembleRelease -Pprocraft.abis=arm64-v8a, or open that folder in Android Studio and press Run. - the desktop app:
cargo run --release -p procraft-desktopfrom the repository's root; its installer and packages withpackaging/windows/package.ps1(WiX v5) andpackaging/linux/package.sh(nfpm, appimagetool).
Build time dependencies:
required tools
rustup, with the aarch64-linux-android and x86_64-linux-android targets
cargo install cargo-ndk --version "^4" --locked
Android SDK (API 37) and NDK 29.0.14206865
JDK 17 or newer
cargo test --workspace runs the engine's and the renderer's tests on the desktop.
| Path | What |
|---|---|
crates/engine |
document, brushes, stroke geometry, canvas view (no GPU) |
crates/gpu |
wgpu renderer: layers, strokes, compositing, display |
crates/core |
what both apps share above the renderer: the canvas session, every touch and gesture, the tools' state (adjustments, transform, selection, crop, Recolor) and which of them a button ends, the gallery, presets, gradients, time-lapse, the brush library's files, the layer menu, exports and their file names, and keyboard shortcuts; with the Android app's UniFFI bindings |
android |
the Android app (Gradle) |
desktop |
the desktop app (egui) for Windows and Linux |
packaging |
the desktop app's Windows installer and Linux packages, as the release workflow builds them |
Builds are only tested on Windows 11.
MIT OR Apache-2.0, at your option.
- Third-party material: the Inter font, Lucide icons and the light panoramas the app bundles, and the libraries it's built with, are listed in NOTICE.
- Every asset, with its author, source and licence, is in ATTRIBUTION.md.
- Icons drawn using vector outlines (
tools/icons/draw_icons.py, to the style guide). - The demo painting, Dusk, is our own, made in the app.
Try to use semantic commit
messages. Use feat: / fix: / chore: / docs: / etc.







