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.

Read the launch post

A six-axis robot arm: a white base and shoulder, grey tube links, finned cycloidal joint housings at every axis, and an orange-jawed gripper on the tool flange.
A six-axis arm in popkern live, having 1,198 features and 57 parts

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.

boss_plate/migrations
// 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!