Dry

A typed, units-aware multi-level IR and Rust engine for algorithmic machine toolpaths (FFF/CNC/laser/robot) — LLVM/MLIR for machine motion.

rustcompilerscnc3d-printingpublicCodeLive

Dry treats machine motion as a compiler target rather than a slicer’s output. A design is a program — authored in Python, TypeScript, or Rust — that lowers through a typed, units-aware intermediate representation (the Dry IR): design to path to motion to target. It’s aimed at people building toolpath tooling itself — non-planar or algorithmic deposition, CNC/laser/robot motion, or custom slicers — rather than end users slicing a single STL.

The IR is the interesting part. A Toolframe carries both position and orientation through every stage, so 5-axis and non-planar motion are native rather than retrofitted. Units are types — mixing millimeters and inches, or speed and volume, is a compile error, not a runtime surprise. The core is pure functional (design(params) -> IR), deterministic and content-addressable, with deposition state resolved as an explicit pass. Six guided stages carry a design from authoring to output: author (the fluent Design API), lower (typed L2 motion segments), simulate (time, distance, material, peak flow), verify (machine-safety contracts checked against a profile’s bounds, flow, and temperature), optimize (a standard pass vs. a kinematics-aware “balanced” pass with junction-velocity capping), and generative TPMS/lattice codegen. The same Rust engine compiles to WebAssembly for the browser gallery and backs the Python and TypeScript SDKs, with byte-identical G-code output checked in CI.

Status: working foundations. The engine, CLI, Python and TypeScript bindings, wasm build, verifier, optimizer, and IR codecs are implemented at v0; richer import/export, device profiles, and non-FFF backends are still open. Source and docs are publicly readable, but Dry is proprietary — production use requires a written commercial agreement.