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.
Progress over time
Share of in-scope upstream lines in green and partial units, from
plan/modules.toml along main's history (81 sampled states).
Timeline as a table
| Commit time | Green lines | Ported lines | Units ported |
|---|---|---|---|
| 2026-10-12 18:49 UTC | 0.0% | 0.0% | 0 / 260 |
| 2026-10-12 19:33 UTC | 0.3% | 0.6% | 3 / 260 |
| 2026-10-12 20:19 UTC | 3.7% | 5.3% | 23 / 260 |
| 2026-10-12 21:05 UTC | 7.5% | 9.9% | 39 / 260 |
| 2026-10-12 21:45 UTC | 11.3% | 13.6% | 51 / 260 |
| 2026-10-12 22:36 UTC | 13.2% | 16.0% | 58 / 260 |
| 2026-10-12 23:21 UTC | 16.2% | 19.1% | 66 / 260 |
| 2026-10-12 23:52 UTC | 17.6% | 21.6% | 71 / 260 |
| 2026-10-13 00:47 UTC | 19.1% | 24.0% | 77 / 260 |
| 2026-10-13 01:38 UTC | 20.2% | 25.5% | 82 / 260 |
| 2026-10-13 02:16 UTC | 20.4% | 27.5% | 89 / 260 |
| 2026-10-13 03:04 UTC | 20.4% | 28.8% | 92 / 260 |
| 2026-10-13 03:56 UTC | 20.8% | 30.4% | 96 / 260 |
| 2026-10-13 04:34 UTC | 21.3% | 31.0% | 97 / 261 |
| 2026-10-13 05:23 UTC | 21.3% | 32.0% | 99 / 261 |
| 2026-10-13 06:09 UTC | 21.5% | 33.7% | 104 / 261 |
| 2026-10-13 06:57 UTC | 21.5% | 34.7% | 106 / 261 |
| 2026-10-13 07:12 UTC | 21.5% | 35.1% | 107 / 261 |
| 2026-10-13 09:20 UTC | 26.8% | 36.3% | 110 / 261 |
| 2026-10-13 16:45 UTC | 26.8% | 36.5% | 111 / 261 |
| 2026-10-13 19:18 UTC | 26.8% | 36.5% | 111 / 261 |
| 2026-10-13 20:17 UTC | 26.8% | 37.0% | 112 / 261 |
| 2026-10-13 20:50 UTC | 26.8% | 37.4% | 113 / 261 |
| 2026-10-14 00:26 UTC | 26.8% | 37.8% | 115 / 261 |
| 2026-10-14 01:08 UTC | 26.8% | 38.6% | 117 / 261 |
| 2026-10-14 01:42 UTC | 26.8% | 39.1% | 118 / 261 |
| 2026-10-14 02:29 UTC | 26.8% | 39.4% | 119 / 261 |
| 2026-10-14 02:52 UTC | 26.8% | 39.6% | 120 / 261 |
| 2026-10-14 03:59 UTC | 26.8% | 40.2% | 121 / 261 |
| 2026-10-14 13:18 UTC | 26.8% | 40.7% | 122 / 261 |
| 2026-10-14 13:44 UTC | 26.8% | 40.9% | 123 / 261 |
| 2026-10-14 14:33 UTC | 26.8% | 41.0% | 124 / 261 |
| 2026-10-14 15:35 UTC | 26.8% | 42.0% | 127 / 261 |
| 2026-10-14 16:21 UTC | 26.8% | 43.0% | 129 / 261 |
| 2026-10-14 17:02 UTC | 26.9% | 44.1% | 131 / 261 |
| 2026-10-14 17:48 UTC | 27.2% | 44.5% | 132 / 261 |
| 2026-10-14 18:34 UTC | 27.6% | 45.6% | 135 / 261 |
| 2026-10-14 19:11 UTC | 28.0% | 47.5% | 139 / 261 |
| 2026-10-14 19:45 UTC | 28.0% | 47.9% | 140 / 261 |
| 2026-10-14 20:29 UTC | 28.4% | 48.2% | 141 / 261 |
| 2026-10-14 21:11 UTC | 28.4% | 48.6% | 142 / 261 |
| 2026-10-14 22:02 UTC | 28.4% | 48.9% | 143 / 261 |
| 2026-10-14 23:16 UTC | 28.4% | 49.5% | 145 / 261 |
| 2026-10-14 23:49 UTC | 28.4% | 50.0% | 146 / 261 |
| 2026-10-15 00:48 UTC | 28.4% | 50.0% | 146 / 261 |
| 2026-10-15 01:24 UTC | 28.4% | 50.3% | 147 / 261 |
| 2026-10-15 01:55 UTC | 28.4% | 50.4% | 148 / 261 |
| 2026-10-15 02:34 UTC | 28.4% | 51.1% | 149 / 261 |
| 2026-10-15 03:39 UTC | 28.4% | 51.3% | 150 / 261 |
| 2026-10-15 04:59 UTC | 28.4% | 52.1% | 152 / 261 |
| 2026-10-15 05:53 UTC | 28.4% | 52.4% | 153 / 261 |
| 2026-10-15 06:52 UTC | 29.1% | 53.4% | 156 / 261 |
| 2026-10-15 07:04 UTC | 29.1% | 53.6% | 157 / 261 |
| 2026-10-15 07:56 UTC | 29.1% | 53.8% | 158 / 261 |
| 2026-10-15 09:04 UTC | 29.1% | 54.3% | 159 / 261 |
| 2026-10-15 09:53 UTC | 29.2% | 54.9% | 160 / 261 |
| 2026-10-15 10:34 UTC | 29.2% | 55.4% | 161 / 261 |
| 2026-10-15 11:32 UTC | 29.2% | 55.8% | 162 / 261 |
| 2026-10-15 12:39 UTC | 29.2% | 56.0% | 163 / 261 |
| 2026-10-15 13:19 UTC | 29.2% | 56.6% | 164 / 261 |
| 2026-10-15 14:26 UTC | 29.2% | 57.0% | 165 / 261 |
| 2026-10-15 15:39 UTC | 29.2% | 57.5% | 166 / 261 |
| 2026-10-15 16:35 UTC | 29.2% | 57.7% | 167 / 261 |
| 2026-10-15 17:18 UTC | 29.2% | 58.3% | 168 / 261 |
| 2026-10-15 19:02 UTC | 29.2% | 58.7% | 170 / 261 |
| 2026-10-15 20:02 UTC | 30.5% | 59.1% | 171 / 261 |
| 2026-10-15 21:04 UTC | 30.5% | 59.4% | 172 / 261 |
| 2026-10-15 21:36 UTC | 31.1% | 59.7% | 173 / 261 |
| 2026-10-15 22:43 UTC | 31.1% | 60.2% | 174 / 261 |
| 2026-10-15 23:05 UTC | 31.1% | 60.4% | 175 / 261 |
| 2026-10-16 00:05 UTC | 31.1% | 60.6% | 176 / 261 |
| 2026-10-16 01:07 UTC | 31.1% | 60.8% | 177 / 261 |
| 2026-10-16 01:43 UTC | 31.1% | 61.4% | 178 / 261 |
| 2026-10-16 02:58 UTC | 31.5% | 61.7% | 179 / 261 |
| 2026-10-16 04:15 UTC | 31.5% | 62.2% | 180 / 261 |
| 2026-10-16 05:22 UTC | 31.5% | 63.0% | 181 / 261 |
| 2026-10-16 07:27 UTC | 31.8% | 63.4% | 182 / 261 |
| 2026-10-16 08:47 UTC | 31.8% | 63.9% | 183 / 261 |
| 2026-10-16 10:14 UTC | 31.8% | 64.8% | 185 / 261 |
| 2026-10-16 12:07 UTC | 31.8% | 65.3% | 186 / 261 |
| 2026-10-16 13:21 UTC | 31.8% | 65.3% | 186 / 261 |
By module
| Module | Units ported | Lines | Progress | % |
|---|---|---|---|---|
| geom | 29 / 29 | 26,571 / 26,571 | 100% | |
| nurbs | 48 / 48 | 70,508 / 70,508 | 100% | |
| curve | 25 / 25 | 35,409 / 35,409 | 100% | |
| surface | 36 / 40 | 56,771 / 65,449 | 87% | |
| topology | 16 / 31 | 21,625 / 52,301 | 41% | |
| intersect | 17 / 25 | 26,171 / 41,781 | 63% | |
| primitive | 1 / 5 | 649 / 7,956 | 8% | |
| query | 6 / 10 | 6,782 / 10,816 | 63% | |
| mass | 1 / 1 | 1,031 / 1,031 | 100% | |
| sweep | 2 / 5 | 910 / 5,725 | 16% | |
| heal | 3 / 7 | 5,045 / 11,877 | 42% | |
| offset | 0 / 3 | 0 / 6,605 | 0% | |
| boolean | 1 / 9 | 410 / 14,122 | 3% | |
| blend | 1 / 22 | 1,236 / 37,752 | 3% | |
| (crate-wide) | 0 / 1 | 0 / 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.
| Verdict | C++ | Rust |
|---|---|---|
| DEFERRED | 0 | 116 |
| ERROR | 2 | 0 |
| INCOMPLETE | 25 | 0 |
| PASS | 81 | 3 |
| WRONG TOPOLOGY | 11 | 0 |
Elsewhere
- All 261 units, with difftest results and blockers.
- 246 upstream issues found while porting.
- Repository: how to port a unit, checklist.