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
65.3%
253,118 of 387,903 lines in green or partial units; 31.8% green
green
99
units
partial
87
units
claimed
28
units
todo
47
units
ready to claim
2
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 16
Timeline as a table
Commit timeGreen linesPorted linesUnits ported
2026-10-12 18:49 UTC0.0%0.0%0 / 260
2026-10-12 19:33 UTC0.3%0.6%3 / 260
2026-10-12 20:17 UTC3.7%5.1%22 / 260
2026-10-12 21:03 UTC6.8%9.2%37 / 260
2026-10-12 21:45 UTC11.3%13.6%51 / 260
2026-10-12 22:09 UTC13.2%15.5%57 / 260
2026-10-12 23:16 UTC15.6%18.5%65 / 260
2026-10-12 23:52 UTC17.6%21.6%71 / 260
2026-10-13 00:47 UTC19.1%24.0%77 / 260
2026-10-13 01:27 UTC20.2%25.3%80 / 260
2026-10-13 02:16 UTC20.4%27.5%89 / 260
2026-10-13 03:03 UTC20.4%28.8%92 / 260
2026-10-13 03:26 UTC20.8%29.9%95 / 260
2026-10-13 04:34 UTC21.3%31.0%97 / 261
2026-10-13 04:49 UTC21.3%31.6%98 / 261
2026-10-13 06:03 UTC21.4%33.5%103 / 261
2026-10-13 06:41 UTC21.5%34.1%105 / 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:17 UTC26.8%37.0%112 / 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:08 UTC26.8%38.6%117 / 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:18 UTC26.8%40.7%122 / 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 16:21 UTC26.8%43.0%129 / 261
2026-10-14 17:02 UTC26.9%44.1%131 / 261
2026-10-14 17:48 UTC27.2%44.5%132 / 261
2026-10-14 18:34 UTC27.6%45.6%135 / 261
2026-10-14 19:11 UTC28.0%47.5%139 / 261
2026-10-14 19:45 UTC28.0%47.9%140 / 261
2026-10-14 20:29 UTC28.4%48.2%141 / 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 23:16 UTC28.4%49.5%145 / 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:24 UTC28.4%50.3%147 / 261
2026-10-15 01:55 UTC28.4%50.4%148 / 261
2026-10-15 02:34 UTC28.4%51.1%149 / 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 06:48 UTC28.4%52.9%155 / 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 10:34 UTC29.2%55.4%161 / 261
2026-10-15 11:32 UTC29.2%55.8%162 / 261
2026-10-15 12:39 UTC29.2%56.0%163 / 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 16:35 UTC29.2%57.7%167 / 261
2026-10-15 17:18 UTC29.2%58.3%168 / 261
2026-10-15 18:30 UTC29.2%58.6%169 / 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

By module

ModuleUnits portedLines Progress%
geom29 / 2926,571 / 26,571
100%
nurbs48 / 4870,508 / 70,508
100%
curve25 / 2535,409 / 35,409
100%
surface36 / 4056,771 / 65,449
87%
topology16 / 3121,625 / 52,301
41%
intersect17 / 2526,171 / 41,781
63%
primitive1 / 5649 / 7,956
8%
query6 / 106,782 / 10,816
63%
mass1 / 11,031 / 1,031
100%
sweep2 / 5910 / 5,725
16%
heal3 / 75,045 / 11,877
42%
offset0 / 30 / 6,605
0%
boolean1 / 9410 / 14,122
3%
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