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.5.1.tar.gz (60.2 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.5.1-cp312-abi3-win_amd64.whl (352.9 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.5.1-cp312-abi3-manylinux_2_34_x86_64.whl (505.2 kB view details)

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

pykerf-0.5.1-cp312-abi3-macosx_11_0_arm64.whl (433.4 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pykerf-0.5.1.tar.gz
Algorithm Hash digest
SHA256 86193475b97d62994d360bcfc3a9afba0486d5d18138c752b9d321b8bbeb4a7c
MD5 3e8a288fbc6b8515bdd1224ef14e22a5
BLAKE2b-256 7375f43ab463e7db0aa986e9f4cd4f07d0a71a59f076f45ac0cf934e99ad5c39

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pykerf-0.5.1-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 352.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.5.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7d9b4f232c7e23da4fa9c68666d500b117961477386ea79677ccbef09ee416c2
MD5 00ad9da1f2bd177468d92096629f45e8
BLAKE2b-256 e028dc5f5f003bc22779f4a734b25cc7787820e3be934820d8619ef1726f7c8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.5.1-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d4b04fc1a926b4b297c2fee833ea3b4139ec1721c4ff742b14b13bf4e1441ef7
MD5 cb0a7c505ba0929ee17ec0810b4d5cff
BLAKE2b-256 20846b39bf38b3f2fbea57afea571f4803ec99eedf2b884b570980138fdf27b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.5.1-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b33af2c04337f39d5a5fe08f1402c48f2f47f32b324a94e4744f0900b6e91eb3
MD5 fe0237a8e0c5e72dc87b08c19b635338
BLAKE2b-256 4c7f05795f2f86a2e6166098b153bc838208ccb41ba4e500e88962fdbe3943d6

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