A CAD kernel for
everyone who makes things.
popkern is a parametric boundary-representation geometry engine for solid CAD. It lets anyone build complex parts with simple code, backed by research-class CAGD algorithms, with interactive script editing and MCP support. It's open source, free forever, and aiming to be one of the best kernels available.
Made with popkern
Every one of these is an example in popkern live, rendered there. Open one and the same script builds the same model in your browser. Each had to be proven watertight to ship.






Parts are scripts
Every popkern part is a short Rhai script. Rhai is a small and friendly scripting language, and the same script builds the same part in your browser or on your own machine.
Bigger parts grow as projects. A project is a folder of numbered migration scripts, each
picking up where the last one left off, much like database
migrations. A later step can reach back and change an earlier
feature, and the history scrubber replays the part one step at a
time. Projects are git friendly and convertible via popkern build into a
.pkn document or a STEP file from the command line.
// migrations/001_plate.rhai
let m = model();
m.profile(xy()).rect(2.4, 1.6)
.sketch("plate_sketch").extrude(blind(0.4));
m
// migrations/002_boss.rhai
let m = previous();
let boss = m.tool(|m| m.profile(xy_at(0.2))
.circle(0.35).sketch("boss_sketch").extrude(blind(0.8)));
m.active().union(boss);
m
// migrations/003_rounds.rhai
let m = previous();
m.active().fillet(edges().between("cylinder", "plane"),
0.08, #{ label: "rounds" });
m
What works today
Quite a lot, actually! Booleans, fillets and chamfers (with properly smooth corners), sweeps, revolves and lofts, shelling, sketches with constraints, STEP in and out, and a full feature tree with undo.
It's also early, so plenty doesn't work yet. The launch post is honest about what's missing.
Agent-built, test-verified
popkern is written by AI agents, working from published research under human direction. Every change has to pass thousands of automated tests and the kernel's own validation before it is committed, and results are cross-checked against OpenCASCADE wherever the two can be compared. When an operation can't produce a valid solid, it declines and says why, rather than handing back something broken.
What you make is yours
The kernel is AGPL-3.0, so improvements to it stay open. An exception covers everything you make with it, including your scripts, your models, your STEP files. Those are yours, full stop.
Come and break it.
If you've got a part popkern can't build, open an issue and it becomes a test case. That's the most useful thing anyone can do right now!