MIT · open-source · multi-discipline

Design anything.
Chat drives it all.

Mechanical, BIM, electronics, silicon, aerospace, jewelry, marine, composites — 37 engineering domains in one workspace, all driven by chat. A complete, free CAD that runs entirely on your own machine.

  • MIT licensed
  • 37 domains
  • runs locally, no accounts
$pip install -e .[mech]
$kerf-server --migrate

Python 3.11+ · Postgres · or curl kerf.sh/install.sh | sh

  • 1265 features tracked
  • 350+ LLM tools
  • no card, ever
kerf · bracket-v3FILESbracket.jscadmount.featureprofile.sketchframe.assemblysheet.drawingboard.circuitTHREADSthicken the walladd 2mm filletshell + 1.5mmbracket#wallXZ120mmISO · 1:2 · 3,142 trisX 12.4 Y 0.0 Z 8.2CHATbracket#wallmake this 6mm thickedit_filesize[1]: 4 → 6Updated wall thicknessto 6mm. Re-rendered.add a 2mm fillet on topthinking…Ask kerf… LLM tool surface git-backed revisions

Built on open kernels

  • JSCAD
  • OpenCascade
  • tscircuit
  • planegcs
  • FEniCSx
  • OpenCAMlib
  • IfcOpenShell
  • FreeRouting
  • KiCad
.sketch2D + constraints.featureOCCT B-rep.assemblymates + BOM.drawingTechDraw.camG-code

one project, one file format per stage — every hop is a plain file an LLM (or you) can open and edit

Built for engineers in every discipline

One workspace. Every CAD discipline.

Whether you design circuit boards, buildings, mechanical assemblies, or jewelry — Kerf has purpose-built depth for your workflow. Not a generic tool with plug-in paywalls.

FEATURESOCCTPad20 mmeditingPocket8 mm · ø6okFillet2 mm · 4 edgesokShell1.5 mmokHoleM5 thrusuppressed

Comparable to Fusion / SolidWorks

Mechanical engineer

Parametric history, OCCT-grade B-rep, integrated CAM and FEA. A full feature tree with persistent face IDs that survive fillets and booleans.

SCHEMATIC+5VC1100nFR11kΩD1PCB C1R1D1+5GND3D BOARDC1R1D1

Comparable to KiCad / Altium

Electronics engineer

Schematic + PCB + signal integrity + EMC + PDN, no extension paywalls. Two authoring styles, one fabrication target.

BIM · .bim → IFC4level L1 elev=0level L2 elev=3.0wall A 0,0 8,0 height 3.0slab 0,0 8,6 L1opening A 1.6,1 1.4,1.4door A 5.0 0.9x2.1space LIVING# 14 entitiesL1L2ROOFcompileIfcOpenShell

Comparable to Revit / ArchiCAD

BIM / architect

IFC4 round-trip; walls, slabs, MEP, schedules. Code-first BIM authoring that compiles straight to IFC4 via IfcOpenShell.

LIBRARYverifiedR 10kΩC 10µFL 100µH555NE555M3×8LED

Comparable to Matrix / MatrixGold

Jewelry designer

A 40-module jewelry vertical, a gem catalog with 30+ cuts, casting export, PBR materials — and one-click Workshop publish.

Domain spotlights

Purpose-built for your craft.

Kerf ships real domain depth across 18 flagship disciplines — not a generic mesh editor. Every sector has dedicated modules, correct output formats, and domain-fluent chat tooling.

Sketcher → STEP

Mechanical

  • Validated B-rep: Pad, Pocket, Fillet, Shell, Loft
  • planegcs-powered 2D sketcher with 12+ constraints
  • Weld · forming · AM · moldflow · 5-axis CAM chain

tscircuit JSX + atopile + KiCad

Electronics

  • tscircuit JSX for circuit schematic as code
  • atopile abstract netlist → KiCad DRC + gerber out
  • SI · EMC · PDN · thermal pre-compliance in one tool

BIM walls / slabs / IFC

Architecture

  • Parametric walls, slabs, windows — IfcWall / IfcSlab / IfcWindow
  • IFC4 export for Revit, Archicad, and open viewers
  • Section views, MEP routing, stair geometry from code

Gem cuts + composites + Workshop

Jewelry

  • gem-seat v2 · ring v4 · settings v3/v4 · chain v2
  • gemstones v2 · 30 cuts + 31-template library
  • casting export · PBR materials · Workshop publish

Class-A surfaces + zebra

Automotive

  • NURBS surfacing Phase 4 — sweep2 / network / blend
  • Zebra · isocurve · curvature-comb QA + GD&T per Y14.5
  • STEP/IGES interop · sheet metal · 5-axis CAM · assemblies

VLM + orbital + propulsion + composites

Aerospace

  • Vortex-lattice aerodynamics + finite-panel mesh QA
  • Orbital mechanics: Lambert / Hohmann / J2 perturbations
  • Propulsion staging + CFRP layup / ABD matrix

VHDL / Verilog → SKY130 GDS-II

Silicon

  • HDL authoring: VHDL 2008 + SystemVerilog lint
  • SKY130 PDK standard-cell placement preview
  • GDS-II layer export for tape-out verification

Arduino → ESP32 → .hex

Firmware

  • Arduino / ESP-IDF project scaffold + build chain
  • Cross-compile to ARM Cortex-M, RISC-V, Xtensa
  • .hex / .elf / .bin output with flash-size report
I0.0I0.1Q0.0TONQ0.1Q0.2

Ladder + ST + sim + HMI

PLC / Industrial

  • IEC 61131-3: Ladder, Structured Text, Function Block
  • Soft-PLC simulation with time-stepped signal trace
  • HMI panel generator with tag binding
45°-45°90°

CFRP layup + ABD matrix

Composites

  • Symmetric / quasi-isotropic layup definition by angle
  • Classical laminate theory: A, B, D matrix + failure index
  • Ply-by-ply weight and fibre-volume fraction report

Crowns + aligners + guides

Dental

  • Parametric crown and bridge preparation geometry
  • Aligner shell export for clear-aligner staging
  • Surgical drill guide with implant axis constraints
F′AS

Lens design + ray-trace

Optics

  • Sequential lens design: singlets, doublets, aspheres
  • Paraxial + real ray-trace with aberration fan plots
  • Zemax-compatible prescription export

Escapement + gear-train

Horology

  • Parametric Swiss lever escapement geometry
  • Gear-train ratio synthesis from target frequency
  • Tolerance stack for mainspring barrel fits

Hydrostatics + GZ stability

Marine

  • Hull form from stations: displaced volume, CoB, LCB
  • GZ stability curve at arbitrary heel angles
  • Waterplane area moments + metacentric height report
14°

Joinery + cut-list

Woodworking

  • Parametric dovetail, mortise-and-tenon, box joint
  • Automated cut-list with grain direction + waste %
  • DXF / SVG export for CNC router or laser cutter

Pattern blocks + grading + drape

Textiles

  • Bodice / sleeve / trouser block generation from measurements
  • Multi-size grading nest with seam allowance control
  • Fabric drape simulation for hang and silhouette preview

Alignment + corridor + earthwork

Civil

  • Horizontal and vertical alignment with transition spirals
  • Corridor cross-section from template + terrain DTM
  • Cut / fill earthwork volumes with mass-haul diagram

RK4 multibody + 6 joints

Motion Sim

  • RK4 multibody integrator: revolute, prismatic, spherical, cam, gear, screw
  • Joint reaction forces + energy balance per step
  • Animated trajectory export to GLTF / MP4

every domain — MIT, self-hosted, no billing surface, ever

How the chat workflow works

From a sentence to a part.

Describe a feature in plain language. Kerf edits the feature tree, validates against doc-search, and re-renders the diff — a small fixed tool surface, no black-box geometry. Or skip chat and drive the same surface from Python with kerf-sdk.

LLM → tools → kernel → diff

USERmake this 6mmand add a filletbracket#wall@ user · 13:42TOOL CALLSsearch_kerf_docsfilletedit_filebracket.jscadvalidateok ✓render3,142 trisASSISTANTThickened the wall to6mm and added a 2mmfillet on the top edge.1 file changed1 revision loggedapplied3D
1User: "make this 6mm and add a fillet"
2Tools: search_kerf_docs → edit_file → validate → render
3Assistant: thickened wall to 6mm, added fillet — applied
43D: viewport re-renders the change instantly
Small tool surface

file ops · object ops · validation · BOM · 4 create_* scaffolders

Doc-search backed

search_kerf_docs reads /docs/llm/*.md before editing

Scriptable too

kerf-sdk on PyPI · JSON-RPC over /v1/rpc · bring your own LLM

Sketch → solid → drawings → fab

Sketch with constraints. Solidify in OCCT. Project to drawings. Hand off to fab.

3015solved

Step 1

Sketch with constraints

planegcs solver, 12+ constraint types

SKETCH → 3D SHORTCUTSsolved.sketchBoss + draftextrude + 3° taperCut from sketchpocket through faceHole patternø3.2 · 4× through

Step 2

Feature shortcuts

Boss, cut, hole pattern — one LLM call

SKETCH → JSCADreactive · revisioned40bracket.sketchbracket.jscadreactiveimport { extrudeLinear }from '@jscad/modeling'import profile from './bracket.sketch'export const main = () => extrudeLinear( { height: 20 }, profile )@jscad meshIDB-cached

Step 3

Solidify in OCCT

Extrude a sketch → JSCAD or B-rep

40250.05ARa 1.6PART NO.BR-0011:2SHEET1 of 3A4

Step 4

Project to drawings

TechDraw sheets, GD&T, hand off to fab

bracket.jscad1import{ cuboid }2export defaultmain3 size = [40,6,20]4returncuboid({ size })56// re-renders7// on save

Code-first parametric geometry

JSCAD authoring, in plain JavaScript.

Author geometry as code with @jscad/modeling — worker-based evaluation, an IndexedDB mesh cache, and a file-revision logged on every keystroke. The same tool surface the chat LLM drives is scriptable directly.

  • Worker-based eval with a persistent mesh cache
  • Reactive re-eval when an imported sketch changes
  • Drive parameter sweeps from Python with kerf-sdk

Beyond CAD

Simulate. Manufacture. Collaborate.

Kerf is not just a geometry editor. Simulation, toolpath generation, and version control live in the same workspace — driven by the same chat interface, all open-source solvers under the hood.

Simulation

FEM · LINEAR STATICF = 250 Nδ 0.42 mm0σ_yFoS 2.8 · dolfinx

FEM analysis

FEniCSx + CalculiX, linear-static & modal

TOPOLOGY · SIMPFOC + filterNURBS BREP OUTPUTvol_frac 0.3550 iter · compliance ↓ 74%

Topology optimisation

SIMP density-field → STEP out

SPICE SIMULATIONSCHEMATIC+VinR1C1V1.TRAN V(V1)05m10mngspice

SPICE simulation

ngspice, V/I probes on the schematic

S-PARAMETERS · SMITHΓREADOUT|S11|−12.4 dBVSWR1.62K1.18Gmax14.2 dB2.4 – 5.8 GHz · scikit-rf.s2p import

RF / S-parameters

scikit-rf, Smith chart, Touchstone

Manufacturing

CAM · 2.5D POCKETG-code · LinuxCNC postG21 G17 G90 G94G0 Z5T1 M6S12000 M3G1 X12 Y6 F800G1 Z-1.5G2 X18 Y0 I6 J0140 mmOpenCAMlib

CAM toolpaths

OpenCAMlib 2.5D + 3D, posted G-code

WORKSHOPplanet-gear@maker14231lattice@maker8712esp32-case@maker21648

Workshop publish

Fork and share over an open protocol

Collaboration

GIT · LOCAL + REMOTEfeat/amainfeat/bHEAD↑ in syncpygit2 · branches · merges · push / pull

Local git history

pygit2 backend, multi-lane lattice graph

KERF-SDK · PYTHON$ pip install kerf-sdkfrom kerf import Kerfk = Kerf.from_env()# sweep diameterfor d in [4, 5, 6, 8]: k.equations.set( "dia", d) k.files.write( "main.jscad")POST/v1/rpcPROJECTmain.jscad.equationsprofile.sketchframe.assemblysheet.drawingboard.circuit↻ revisioned

Python SDK

pip install kerf-sdk, JSON-RPC over /v1/rpc

FILE REVISIONSCmd+Zr1r2r3r4r5r6r7r8DIFF · PHASE 4addedremovedunchanged~82× shrinkSHA-256 dedup

Fine-grained undo

Every keystroke in file_revisions

Architecture · BIM that compiles

.bim text-DSL → IFC4 buildings.

A code-first BIM authoring loop — walls, slabs, openings, spaces, levels, families, schedules, views, sheets, MEP routing and curtain walls — compiled via IfcOpenShell and rendered with web-ifc in the browser.

BIM AUTHORINGPROJECT.family.json.schedule.json.view.json.sheet.json4 / 4 parsedLEVEL · L1LIVINGKIT.WallsDoors

Revit-parity authoring

Families, schedules, views, sheets. Categories + hosted refs, type vs instance, phasing, view filters — authored as plain files.

STAIRS · MEPSTAIR · RAILING5 risers · 180 mmMEP · DUCTregister300×100

Stairs · railings · MEP

Stairs, railings, curtain walls, and MEP routing for ducts, pipes and conduits — with sheet revisions tracked in local git.

What stays true after every edit

A geometry kernel, not just a renderer.

Most chat-driven CAD tools draw triangles. Kerf carries a real topological model behind every feature — so the things you build on top of each other don’t fall apart when you go back and change a parameter.

Parametric history

Edit a stone size — your prong fillets survive.

Parametric edits survive across fillets and booleans via persistent face IDs. Change a ring size, a stock thickness, a stone diameter — downstream fillets, holes and chamfers re-resolve to the same logical faces instead of breaking.

persistent face IDs · feature DAG re-evaluation

Tolerant booleans

Cut a hole in your part — booleans stay watertight.

Union, difference and intersection on solids are validated for closed-shell topology before they return. No silent invalid-solid dead-ends from a fuse that almost-but-didn’t match at a tolerance boundary.

closed-shell validation on every result

Continuity-graded fillets

Round an edge — pick G1 tangent or G2 curvature.

Rolling-ball fillets are sewn back into a validated body with an explicit continuity classifier against the supporting faces. You see the continuity grade the surface actually achieves — not a checkbox the UI claims.

G1 / G2 continuity classifier

Parametric edit · before / after

height = 12 mm Fillet-A · ↦ TopCap set_param(h, 28) height = 28 mm Fillet-A · ↦ TopCap

Fillet-A’s reference to TopCap is a name, not an index. Re-evaluate with a new height — the fillet re-resolves to the same logical face on the new body.

Quiet credibility

  • 620
    kernel tests
    all analytic-oracle verified
  • V−E+F = 2
    topology invariant
    re-checked after every op
  • G1 / G2
    fillet continuity
    graded, not assumed
  • 2 kernels
    JSCAD + OpenCascade
    one workspace, one model

Engineering rigor

Tolerance stackup, mate solver, viewport scale.

The details that separate engineering software from a renderer: worst-case / RSS / Monte-Carlo tolerance chains, assembly mate constraints, and a viewport built for assemblies with hundreds of identical instances.

TOLERANCE · MATE CHAINworst-case · RSS · MCBFS mate graphF1ABCA20.0±0.05B25.0±0.10C20.0±0.0520.0 ±0.0525.0 ±0.1020.0 ±0.0565.0 ±0.12 RSSauto_chain✓ 4 hops · 3 mates

Tolerance stackup + mates

Worst-case, RSS, and Monte-Carlo tolerance stacks. tolerance_auto_chain walks the assembly-mate graph by BFS and builds the dimension chain for you.

VIEWPORT · INSTANCEDinstances: 240drawcalls: 160 fpsFRUSTUM S1 · INSTANCEDMESH S2

Viewport at scale

Frustum culling + InstancedMesh batching in Three.js. Assemblies with hundreds of identical components render at interactive frame rates.

Real artefacts out the other side no proprietary lock-in

The Workshop isn’t a server.
It’s a protocol.

Sharing a part shouldn’t require an account on someone else’s platform. Kerf’s Workshop is built on DMTAP-PUB, an open protocol for publishing signed, content-addressed objects — the same idea behind Nostr’s feeds and IPFS’s content addressing, purpose-built for engineering artifacts.

  • No accounts. Your identity is a keypair you hold, not a login on a database you don’t control.
  • No central server. Any gateway — yours, a friend’s, kerf.sh’s — can serve any object, because every object proves itself.
  • A workshop is just feeds you follow. Publishing appends to your own feed; browsing means fetching feeds you chose.
  • Offline once pinned. Content-addressed and self-verifying — a part you’ve pinned works with zero live infrastructure.
your machine — one kerf node
kerf app → your storage
pub module: publish · follow · pin · fetch
┊ optional, signed, opt-in ┊
a gateway (yours, or anyone’s)
plain HTTPS · /.well-known/dmtap-pub/*
┊ ┊
a workshop feed you follow
another node’s signed announcements

Install

Self-host in minutes.

No account, no cloud, no external service beyond a Postgres database you already control. Pick whichever front door fits your machine.

one-liner
$ curl -fsSL https://kerf.sh/install.sh | sh
from source
$ git clone https://github.com/vul-os/kerf
$ cd kerf
$ pip install -e .[mech]  # swap [mech] for [full]
$ kerf-server --migrate  # then open :8080
docker
$ git clone https://github.com/vul-os/kerf
$ cd kerf
$ docker compose up  # app + postgres + redis

The one-liner downloads the latest GitHub release, unpacks it, and sets up a Python venv — then open http://localhost:8080. Every tag ships kerf-vX.Y.Z-macos-arm64.tar.gz, -macos-x64, -linux-x64, a universal -src, and a SHA256SUMS manifest.

hack on kerf

Vite + React frontend, Python / FastAPI backend, MIT top to bottom.

frontend + backend (dev)

$ pip install -e .[mech]
$ npm install
$ npm run dev  # :5173 + :8080

tests

$ pytest packages/ -n auto
$ npm test
$ npm run lint