Skip to main content

Verify and diff 3D-printer G-code by the material it deposits — an open, checkable IR for the mesh-to-G-code half of the fabrication pipeline.

Project description

Kerf

An open, engine-independent IR for the mesh → G-code half of 3D printing — with a written-down denotational semantics and a lowering whose correctness is mechanically checked.

Think "LLVM for slicing," but the point is the verifier, not the container.

Slicers (Cura, PrusaSlicer, OrcaSlicer) are compilers: they lower geometry into machine code (G-code), but each buries that machinery in a private codebase, and no mainstream slicer can show its output corresponds to the input. Kerf is the open middle: an IR whose meaning is defined (denote = the material a program deposits), a lowering Kerf owns, and an oracle that checks the lowering preserves that meaning. Today it mostly consumes slicer G-code to verify it.

Install

# CLI (the `kerf` binary)
cargo install kerf-cli

# Python (CPython  3.12)
pip install pykerf

Quickstart

# Verify: do Kerf's operations preserve this print?
kerf verify part.gcode              # exit 0 sound · 1 unsound · 3 nothing to verify

# Diff: do two slicers / settings make the same part?
kerf diff old.gcode new.gcode       # exit 0 identical · 1 differ

# Inspect: what did the parser recover, guess, or drop?
kerf inspect part.gcode
import json, pykerf
r = json.loads(pykerf.verify_gcode(open("part.gcode").read()))
assert r["has_geometry"] and r["pass_preserves_denotation"] and r["translation_invariant"]

What it does

  • Two-level IRhi (geometric regions) and lo (move plan), joined by a lowering Kerf owns.
  • denote — reference semantics: a program's deposited material as conservative raster occupancy, reversal-invariant.
  • Soundness oracle — checks the lowering and each optimization pass preserve denote; a negative test confirms a material-dropping pass is rejected.
  • G-code frontend — parses real Cura / PrusaSlicer / OrcaSlicer / Bambu / Simplify3D / KISSlicer / ideaMaker / Slic3r output, including arc (G2/G3) flattening; never panics on untrusted input.
  • kerf verify / kerf diff — verification and material comparison over real parsed geometry, with CI-friendly exit codes.
  • Proofs — P1–P4 proved in Lean 4 (no sorry); load-bearing kernels model-checked with Kani.

Limitations

  • Resolution-bounded. denote compares material up to the raster resolution; choose --resolution ≤ your smallest feature. Sub-resolution differences are not distinguished.
  • Planar only. 2D-per-layer IR; non-planar / vase mode is out of scope.
  • Deposited geometry, not process state. Widths without a ;WIDTH: comment are estimated; feature roles are an untrusted re-inference. The lo→G-code emitter is lossy and sits outside the verified boundary.
  • Checked oracle, not an end-to-end proof. A semantics-level mechanized proof over exact geometry is future work.

Repository

crates/kerf-core   IR, lowering, denote, passes, G-code frontend, verify/diff
crates/kerf-cli    the `kerf` binary
crates/kerf-py     PyO3 bindings (published to PyPI as pykerf)
proofs/            Lean 4 proofs of P1–P4
docs/              design record and semantics

The full design rationale, prior-art scoping, and semantics live in docs/ — start with docs/00-thesis.md and docs/08-semantics.md.

License

Dual-licensed under MIT or Apache-2.0, at your option.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pykerf-0.4.0.tar.gz (54.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pykerf-0.4.0-cp312-abi3-win_amd64.whl (330.9 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.4.0-cp312-abi3-manylinux_2_34_x86_64.whl (485.3 kB view details)

Uploaded CPython 3.12+manylinux: glibc 2.34+ x86-64

pykerf-0.4.0-cp312-abi3-macosx_11_0_arm64.whl (417.5 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

Details for the file pykerf-0.4.0.tar.gz.

File metadata

  • Download URL: pykerf-0.4.0.tar.gz
  • Upload date:
  • Size: 54.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pykerf-0.4.0.tar.gz
Algorithm Hash digest
SHA256 0ff1d5e0c6731a48581313cef0576d04a4684e51d6f0550c0dabdc2e8dcac6e9
MD5 9d35bd6314479b3fd9e8b41a2ac6b619
BLAKE2b-256 c28c3955c9f72ff54a0b148918cdc8204356e136e5c6cab52958b9084a4321e3

See more details on using hashes here.

File details

Details for the file pykerf-0.4.0-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: pykerf-0.4.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 330.9 kB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pykerf-0.4.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7882ac23d29193abe2257ee2abfd1816b87d920b6b54f10b78ae43c8358073e3
MD5 bce7068226a0d85968cca6e4ad02cb58
BLAKE2b-256 51c318fa660bdf0c305c5dbadf363964b4ff3aeaed2a60477fb169393c3b3ebb

See more details on using hashes here.

File details

Details for the file pykerf-0.4.0-cp312-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pykerf-0.4.0-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d05758e928ccfea1e2ee1dc62a2290549a70f32b25367a1280c641ac9e6df7d5
MD5 19489fb9c4f254e719c575f80fa08273
BLAKE2b-256 77e6a0085cdef175cbc37cd0f9a0dd256532d2ac033b59e3b3cb9eee7ad956f1

See more details on using hashes here.

File details

Details for the file pykerf-0.4.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pykerf-0.4.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0918d280ccab6f67991bebec4bafee0d4d6e5cf9ffa614e4af20e2045733c214
MD5 4cd8feb2d6df9e23c4bf213b7440cbd1
BLAKE2b-256 6d730bc839a2800e252cb5ea6bda3f65f8377d29b6fbabe823bddf5d784b7077

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page