# Testing open source CAD kernels

- Link: https://opensourcecad.nl/en/testing-open-source-cad-kernels/
- Published: 2026-10-29T16:04:46+01:00
- Author: Marijn van den Heuvel \+ AI

_This is the English reading version of the Dutch news item [Testen van opensource CAD kernels](https://opensourcecad.nl/vibecoded-apps/testen-van-opensource-cad-kernels/)._

OCCT, SMLib and SolidCore are three [kernels](https://opensourcecad.nl/en/what-is-the-difference-between-mesh-and-nurbs-modelling/)
for CAD: the engine that turns your sketch into a real solid, works out booleans
and writes your model to STEP. I ran the same sixteen models through all three to
see where they agree and where they drift apart. Below is how that test works and
what comes out per model.

## How the test works

Every model is a single .scad file, and the same file goes through all three kernels.
The test then compares two things: the outer dimensions of the model and its volume.

The error margin I use is the difference in volume compared with OCCT, in percent.
That number tells you whether two kernels built the same shape. A small difference
is normal, because where a curved face is divided into triangles the volume always
deviates a fraction. Below 0.3 percent I put that down to it; if it drifts further
apart, something is wrong in the kernel itself.

## Four models that all three kernels build

All three manage these four: a cube with a spherical bite, a tapered tube with a
hole, a cube with rounded edges and three plates with holes of different sizes. 
The margins sit between 0.01 and 0.26 percent, so the three arrive at the same model.

[⌊Cube with a spherical bite⌉⌊Cube with a spherical bite⌉[

A 12 mm sphere cuts through all six faces of the cube.

[⌊Tapered tube with a hole⌉⌊Tapered tube with a hole⌉[

A cone with a through hole: real conical and cylindrical faces.

[⌊Cube with rounded edges⌉⌊Cube with rounded edges⌉[

Every edge rounded by 2 mm; the cube stays exactly 20 mm.

[⌊Three plates with holes⌉⌊Three plates with holes⌉[

Holes of different sizes, from a loop with a condition.

## Three models that only OCCT and SMLib can handle

The L-bracket, the flange and the V-belt pulley need features SolidCore does not
have yet: revolving a profile around an axis, and selecting edges as convex or concave.
That is not a fundamental difference but work still to be done. [SolidCore](https://opensourcecad.nl/en/solidcore-vs-occt/)
is a young rebuild and currently manages four of the sixteen models.

[⌊L-bracket⌉⌊L-bracket⌉[

Rounded outer edges and three mounting holes.

[⌊Flange with weld fillet⌉⌊Flange with weld fillet⌉[

The transition between flange and tube is rounded like a weld.

[⌊V-belt pulley⌉⌊V-belt pulley⌉[

One profile revolved around the axis, with real conical faces in the groove.

## And this only OCCT

A plate of 100 by 100 mm with a cylinder of 40 mm on top, its axis exactly on the
edge of the plate, then everything rounded by 2 mm.

The cylinder overhangs the plate by half, so the transition between cylinder and
plate ends on the free side face. That is exactly where SMLib and SolidCore get 
stuck. SMLib cannot classify the corner properly and the code that has to close 
the gap on that face does not work there. SolidCore trips up even earlier, at the
point where the two rails meet. In OCCT it works without complaint.

This is the case where a kernel proves itself: not in the round hole in a plate,
but in the shape just next to it. I reported it to the project, with the error messages;
it is in [issue #1410](https://github.com/tangency-labs/solidcore/issues/1410).

[⌊Plate with a cylinder on the edge⌉⌊Plate with a cylinder on the edge⌉[

A 40 mm cylinder on the edge of a 100 by 100 mm plate, everything rounded by 2 mm.

Of the sixteen models in this test, OCCT and SMLib arrive at the same dimensions
and volumes on all sixteen. SolidCore manages four. The difference is not in everyday
shapes, but in the awkward transitions.

**My verdict:** it is impressive how well the Rust port already works, given it 
has only been worked on for a few days. The progress per two days looks like a year
of OCCT development, and I expect we will have an OCCT alternative within two weeks.

The test set and the models are in the [openscad-occt fork](https://github.com/MisterMakerNL/openscad-occt/tree/solidcore-backend).**
Keep an eye on this site for updates and tests**, I will keep following the three
kernels and publish the next measurement here.

_The images were made with OCCT 7.6.3 from the .scad sources of the test; for the
four models in the first block the other two build exactly the same shape._
