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 |
| 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.







