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.3.1.tar.gz (53.8 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.3.1-cp312-abi3-win_amd64.whl (328.1 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.3.1-cp312-abi3-manylinux_2_34_x86_64.whl (483.4 kB view details)

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

pykerf-0.3.1-cp312-abi3-macosx_11_0_arm64.whl (415.4 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pykerf-0.3.1.tar.gz
Algorithm Hash digest
SHA256 1e9c6575b25fde23247883aca9602b2a4877a7b440348f1f383d15a992b49774
MD5 e622f86a22621cc254eaea565ca1402c
BLAKE2b-256 cc78d0b5408e4e7984f8051682f7b1c8f43f8293f2e3042c5968aa947667d610

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pykerf-0.3.1-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 328.1 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.3.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dd502c9e3af0068d469cba4102aebc697f2b407bc420817c1cb01553fdb61d67
MD5 c37bbd0e3788ff7c024732b53c39e745
BLAKE2b-256 99a2993205d86d6d9a3f4ab7c51f6e66fe3d1cf4358f9372ec216ffd6ceb6fc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.3.1-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0cb9335425c4f37a3c6e0a19ef91ee176302560d9547090bd2aa3e6d6d4975fa
MD5 edd880b38d5cd1413900ee4becfffe1e
BLAKE2b-256 34c10f674ff7d3c4c5fea5afbdfd0e26e38d9a87cffdb5b035dd7d8033d86722

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.3.1-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 733b26dd6707c10c10f225024df08a4dc60b21b472339d559787c316d0d62803
MD5 83db3ee10e765dc24184024f8cf307a7
BLAKE2b-256 35e709560015572f88f24cf00719263b7da1416319eb3b11e58274e002ca7f92

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