solidcore

solidcore

solidcore is a Rust port of NVIDIA's SMLib, the boundary-representation (B-rep) solid modeling kernel from usd-brep (Apache-2.0), written in safe Rust: no unsafe, no panics on bad input, deterministic, and buildable for WebAssembly. The upstream code is split into 261 port units. A unit only counts as green when the difftest gate runs the Rust and the upstream C++ (through FFI) on the same inputs (upstream tests, fixtures and fixed-seed generated cases) and the topology is identical and every value agrees within 1e-9 relative. A partial unit passes every case it can run; its other cases are deferred because they reach code that is not ported yet. This page is regenerated from the repository on every push to main.

Upstream lines ported
71.3%
276,468 of 387,903 lines in green or partial units; 36.0% green
green
108
units
partial
92
units
claimed
40
units
todo
21
units
ready to claim
0
todo with all dependencies done

Progress over time

Share of in-scope upstream lines in green and partial units, from plan/modules.toml along main's history (79 sampled states).

green (bit-identical to C++)green + partial (ported)
Share of upstream lines ported over time0%25%50%75%100%Oct 13Oct 14Oct 15Oct 16Oct 17
Timeline as a table
Commit timeGreen linesPorted linesUnits ported
2026-10-12 18:49 UTC0.0%0.0%0 / 260
2026-10-12 19:48 UTC1.1%2.0%7 / 260
2026-10-12 20:49 UTC6.1%8.1%33 / 260
2026-10-12 21:45 UTC11.3%13.6%51 / 260
2026-10-12 22:47 UTC14.3%17.1%60 / 260
2026-10-12 23:51 UTC17.6%21.6%71 / 260
2026-10-13 00:47 UTC19.1%24.0%77 / 260
2026-10-13 01:46 UTC20.3%26.0%84 / 260
2026-10-13 02:46 UTC20.4%28.3%91 / 260
2026-10-13 03:26 UTC20.8%29.9%95 / 260
2026-10-13 04:49 UTC21.3%31.6%98 / 261
2026-10-13 05:53 UTC21.4%33.1%102 / 261
2026-10-13 06:53 UTC21.5%34.7%106 / 261
2026-10-13 07:12 UTC21.5%35.1%107 / 261
2026-10-13 09:20 UTC26.8%36.3%110 / 261
2026-10-13 16:45 UTC26.8%36.5%111 / 261
2026-10-13 19:18 UTC26.8%36.5%111 / 261
2026-10-13 20:50 UTC26.8%37.4%113 / 261
2026-10-13 23:55 UTC26.8%37.5%114 / 261
2026-10-14 00:49 UTC26.8%38.3%116 / 261
2026-10-14 01:42 UTC26.8%39.1%118 / 261
2026-10-14 02:52 UTC26.8%39.6%120 / 261
2026-10-14 03:59 UTC26.8%40.2%121 / 261
2026-10-14 13:44 UTC26.8%40.9%123 / 261
2026-10-14 14:59 UTC26.8%41.3%125 / 261
2026-10-14 15:35 UTC26.8%42.0%127 / 261
2026-10-14 17:02 UTC26.9%44.1%131 / 261
2026-10-14 18:06 UTC27.6%44.9%133 / 261
2026-10-14 19:07 UTC28.0%47.5%139 / 261
2026-10-14 19:45 UTC28.0%47.9%140 / 261
2026-10-14 21:11 UTC28.4%48.6%142 / 261
2026-10-14 22:02 UTC28.4%48.9%143 / 261
2026-10-14 22:41 UTC28.4%49.1%144 / 261
2026-10-14 23:49 UTC28.4%50.0%146 / 261
2026-10-15 00:48 UTC28.4%50.0%146 / 261
2026-10-15 01:55 UTC28.4%50.4%148 / 261
2026-10-15 03:07 UTC28.4%51.3%150 / 261
2026-10-15 03:39 UTC28.4%51.3%150 / 261
2026-10-15 04:59 UTC28.4%52.1%152 / 261
2026-10-15 05:53 UTC28.4%52.4%153 / 261
2026-10-15 07:04 UTC29.1%53.6%157 / 261
2026-10-15 07:56 UTC29.1%53.8%158 / 261
2026-10-15 09:04 UTC29.1%54.3%159 / 261
2026-10-15 09:53 UTC29.2%54.9%160 / 261
2026-10-15 10:34 UTC29.2%55.4%161 / 261
2026-10-15 11:32 UTC29.2%55.8%162 / 261
2026-10-15 13:19 UTC29.2%56.6%164 / 261
2026-10-15 14:26 UTC29.2%57.0%165 / 261
2026-10-15 15:39 UTC29.2%57.5%166 / 261
2026-10-15 17:18 UTC29.2%58.3%168 / 261
2026-10-15 19:02 UTC29.2%58.7%170 / 261
2026-10-15 20:02 UTC30.5%59.1%171 / 261
2026-10-15 21:04 UTC30.5%59.4%172 / 261
2026-10-15 21:36 UTC31.1%59.7%173 / 261
2026-10-15 23:05 UTC31.1%60.4%175 / 261
2026-10-16 00:05 UTC31.1%60.6%176 / 261
2026-10-16 01:07 UTC31.1%60.8%177 / 261
2026-10-16 01:43 UTC31.1%61.4%178 / 261
2026-10-16 02:58 UTC31.5%61.7%179 / 261
2026-10-16 04:15 UTC31.5%62.2%180 / 261
2026-10-16 05:22 UTC31.5%63.0%181 / 261
2026-10-16 07:27 UTC31.8%63.4%182 / 261
2026-10-16 08:47 UTC31.8%63.9%183 / 261
2026-10-16 10:14 UTC31.8%64.8%185 / 261
2026-10-16 12:07 UTC31.8%65.3%186 / 261
2026-10-16 13:21 UTC31.8%65.3%186 / 261
2026-10-16 15:22 UTC36.0%66.4%188 / 261
2026-10-16 16:31 UTC36.0%67.4%190 / 261
2026-10-16 17:28 UTC36.0%67.6%191 / 261
2026-10-16 18:29 UTC36.0%67.8%192 / 261
2026-10-16 19:51 UTC36.0%68.4%193 / 261
2026-10-16 20:35 UTC36.0%68.5%194 / 261
2026-10-16 21:43 UTC36.0%68.8%195 / 261
2026-10-16 23:23 UTC36.0%68.8%195 / 261
2026-10-17 00:19 UTC36.0%69.1%196 / 261
2026-10-17 01:02 UTC36.0%69.6%197 / 261
2026-10-17 14:51 UTC36.0%70.6%199 / 261
2026-10-17 17:35 UTC36.0%71.3%200 / 261
2026-10-17 18:44 UTC36.0%71.3%200 / 261

By module

ModuleUnits portedLines Progress%
geom29 / 2926,571 / 26,571
100%
nurbs48 / 4870,508 / 70,508
100%
curve25 / 2535,409 / 35,409
100%
surface37 / 4059,145 / 65,449
90%
topology17 / 3123,796 / 52,301
45%
intersect22 / 2535,769 / 41,781
86%
primitive1 / 5649 / 7,956
8%
query6 / 106,782 / 10,816
63%
mass1 / 11,031 / 1,031
100%
sweep4 / 53,269 / 5,725
57%
heal5 / 77,934 / 11,877
67%
offset0 / 30 / 6,605
0%
boolean4 / 94,369 / 14,122
31%
blend1 / 221,236 / 37,752
3%
(crate-wide)0 / 10 / 0
0%

greenpartial

Surface/surface intersection corpus

119 cases from the external ssi-corpus, scored against known true intersections. Rust and C++ are compared where the Rust path is ported: 3 compared, 3 identical, 0 mismatched. All cases.

VerdictC++Rust
DEFERRED0116
ERROR20
INCOMPLETE250
PASS813
WRONG TOPOLOGY110

Elsewhere