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.8.0.tar.gz (69.3 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.8.0-cp312-abi3-win_amd64.whl (395.5 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.8.0-cp312-abi3-manylinux_2_34_x86_64.whl (548.9 kB view details)

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

pykerf-0.8.0-cp312-abi3-macosx_11_0_arm64.whl (472.8 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pykerf-0.8.0.tar.gz
Algorithm Hash digest
SHA256 cebe8ef3258a757a66048ab97c2866b426eb3824aae82b556264a526beea500c
MD5 06acd96a3ae9581701f258725f343682
BLAKE2b-256 e3533a3e96ac7507ff1321413d60d548197051b358319f619edccc7d5fc68fd5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pykerf-0.8.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 395.5 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.8.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c433cc741d5ffe9117c6bbeb75fa5360b409a35816258022a39ae0d51ec15831
MD5 dfe5f89e37051887efd37b2b831698e6
BLAKE2b-256 ec3f8d650920d49319e2b6120258a1c51d991f88f8837ba0a0095c7ff9240c4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.8.0-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 78887c7b73807ea03f90cc26eff32b91bdabe4ca2a92466dc3f1cdd3bb55e404
MD5 231f4a095e7a79aae5b62bec42807952
BLAKE2b-256 aec8aa56898193c9a546bdf5a9bf071486eeeea5c50ef52bc9bc5ab425c610f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.8.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d14f2c02b834ee1f814f9049fd7cc74f8cec9794f13122f016a8aa44c4c302e0
MD5 64d8a22c07678ff814232ac090b07ed2
BLAKE2b-256 eb098601cb41caf157fcefbafdc8b92c7a212858ccda3423cdfaabb18e25bef7

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