// the find
storytold/photocraft
PhotoCraft: An open-source, photo editor written by scratch in pure Rust
PhotoCraft is a from-scratch, pure-Rust reimplementation of Photoshop's editing model — layers, masks, adjustment layers, type, vector shapes, and real PSD read/write — built by the ArtCraft team, running natively on desktop and in the browser via WebAssembly. It's aimed at Rust developers interested in compositing/document-model architecture or PSD format internals, and at anyone wanting a scriptable, open alternative to Photoshop — not yet at people who need a daily production editor.
PSD support lives in its own crate written against Adobe's published spec and checked against real file corpora, with quantified pass rates (307/309 psd-tools files, 169/170 mixed corpus) instead of a vague 'supports PSD' claim. Every action in the app funnels through one command registry, so the UI, CLI, JSON control channel, and MCP server all drive the same engine — a genuinely useful design for automated testing and agent-driven editing, not just a bullet point. Two independently maintained compositors (CPU reference, GPU via wgpu) are tested against each other, which catches GPU-path regressions that would otherwise only surface visually. Copy-on-write 256² tiles for the document model is a sensible, well-worn choice for cheap undo on large canvases, and the same engine compiles to WASM for the browser build.
The project is upfront that it's not a replacement for daily professional work: 15 tools are still missing, there's no AI/generative tooling, and plugin compatibility doesn't exist — the 'every menu item wired to a command' claim measures wiring, not working behavior. Format support has real gaps for cross-tool workflows: no JPEG XL, AVIF decoding is unavailable outside an opt-in build, HEIC is read-only, and Affinity files are read-only with effects and adjustments dropped and no export path back out. A from-scratch Photoshop clone spanning 24 crates is a huge surface to keep correct and secure — PSD/Affinity parsing is prime attack surface for malformed files, so it's worth checking the fuzzing coverage before trusting it on untrusted input. Linux drag-and-drop doesn't work under native Wayland (an upstream winit limitation) and needs an XWayland workaround, a rough edge that will surprise users expecting parity with the Windows/macOS builds.