In Part 1 I argued why a graph-based DL framework in pure Rust was a project worth doing.
In Part 2 I wrote the GPU backend on wgpu and figured out how to make TransformerBlock train on it. Both posts ended with the same honest admission: the code was fine, but the project wasn't ready for other humans.
This post is about closing that gap. Six phases of work, a v0.2.0 → v0.3.1
bump, and a crate that now looks like something you'd actually reach for.
Here's the plan I committed to at the start:
Phase 1: cleanup and consistency — get to 0 warnings.
Phase 2: API reliability — declarative layer API so users don't
hand-manage HashMap<String, Shape> .
Phase 3: GPU completeness — every CPU op should have a WGSL twin.
Phase 5: ecosystem — RoPE done properly, Slice/Concat primitives, CI.
Phase 6: pre-release polish — fmt, clippy, docs.rs, CNN example.
(Phase 4 — performance — is intentionally deferred to v0.5.…