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.0.tar.gz (59.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.5.0-cp312-abi3-win_amd64.whl (353.3 kB view details)

Uploaded CPython 3.12+Windows x86-64

pykerf-0.5.0-cp312-abi3-manylinux_2_34_x86_64.whl (505.4 kB view details)

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

pykerf-0.5.0-cp312-abi3-macosx_11_0_arm64.whl (433.7 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: pykerf-0.5.0.tar.gz
  • Upload date:
  • Size: 59.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.5.0.tar.gz
Algorithm Hash digest
SHA256 d2b25e14bf153a0579c06904b3ee7408a493b6900ab0ebee32f1f37b0d90ae98
MD5 dac915b22271bfc47b061af52dbd0d01
BLAKE2b-256 7d962f43e12ee960474e5ab42a865fbb845f214f2b03918dd95332abb0fbd8a2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pykerf-0.5.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 353.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.5.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e3b7f6500de3407929bacdc0483fcb1776555bff9021b54b218b31a43edb01ba
MD5 b1079c0fbcb8f12b18e56b22cce93d75
BLAKE2b-256 9fd2e68e3bf96bea30374897f1816b55a550badd8926a3a7eb53c568017ba5ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.5.0-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ca19fa0a8b988b6f4d4a0e9d6a692bbb0622e194d53c418c6a1c7362bb30fe00
MD5 70aaafbd88d42ea92da914d7e2cf6575
BLAKE2b-256 f55e44568e3938e637643ea55dc802f09ba7f2c6bb7a5aa8716a33c92ceeae23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pykerf-0.5.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee2f6a12dc0494d722b8d9879d7ece61e84a3abbdecfe7f49961285a3b7708d9
MD5 f5c427f8e140f6e23bfae5ae14765230
BLAKE2b-256 77fe314cfb07f16cae9a47b746df21ecf8230e5a472a0644a1ae7433d37541b8

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