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.10.0.tar.gz (103.5 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.10.0-cp312-abi3-win_amd64.whl (575.3 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.10.0-cp312-abi3-manylinux_2_34_x86_64.whl (748.1 kB view details)

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

pykerf-0.10.0-cp312-abi3-macosx_11_0_arm64.whl (658.4 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pykerf-0.10.0.tar.gz
Algorithm Hash digest
SHA256 9390c89462b22c194aa61370b37531f21a3d5665c230110d88539b1ba6981cf9
MD5 c4f191d976566817c0437d5e0d359d24
BLAKE2b-256 7aa12d5bb4e04a7c2318c5c83f83377bc09147d9892aeac3c382d6a81611af2c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pykerf-0.10.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 575.3 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.10.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ed71508c4e4747c42c9cdec93502d4ae9f6a4db96c696ca95607e744cf04622c
MD5 44d0bac18aa4b4b68dae7191c96caf19
BLAKE2b-256 a3b451ca02b8034e30b9bb0426384fa1d1b8fd78f3e2f6608a389c7c7880ddbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.10.0-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5c6da2eee81a8099323e2e7752e491c09d6a77573ea27fd41a68278bf725f242
MD5 414a008a21d75bee60c6c877a1664107
BLAKE2b-256 c34cc090150df6d86506a059ecc51f4109f75264b9f1251f45621db05b737dd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.10.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f52654551805fe8828dbcdc7d783bb9bf9192e178aa55a37d6508f3cc2f6bf9
MD5 4dad8dc93e22d942d34ebf49a6f33784
BLAKE2b-256 f6869e5a7254449192b7157c6504b0235cd71190942bfd8588f45e4cc9949067

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