Validation
Trust in a simulator comes from checkable outputs, not from who wrote it. Loft is validated two ways: against first-principles physics, and against OpenRocket's own stored results.
Against physics (the test suite)
The engine's core is checked in the test suite (lib/**/*.test.ts, run in CI on every change):
- A drag-free vacuum flight reproduces the closed-form burnout velocity and apogee to within a fraction of a percent — a direct check of the thrust, gravity, mass, and RK4 integration.
- Descent under a parachute converges to the analytic terminal velocity
√(2mg / ρ·C_d·A). - A cone nose gives Barrowman's exact
C_Nα = 2and centre of pressure at two-thirds of its length; a hollow tube's mass matches its geometry exactly. - The standard atmosphere matches published sea-level and 11 km values; higher impulse monotonically raises apogee.
Against OpenRocket (the free oracle)
A .orkyou simulated in OpenRocket carries OpenRocket's own stored flight results. When you import such a file, Loft flies it under the same stored launch conditions and diffs each metric — apogee, velocity, Mach, timings — reporting the signed error and the mean absolute percentage error (MAPE). That comparison appears right in the results, and the method is in lib/validation/compare.ts.
The honest oracle is your own design. The two bundled samples below ship with author-estimated stored figures (Loft can't run OpenRocket here), so their comparison is a demonstration of the mechanism, not an accuracy claim. Import a real file for a real check.
Bundled sample comparisons
Computed at build time from the committed fixtures — these numbers are always current with the engine. “Stored” is the fixture's author-estimated figure; “Loft” is this engine's output.
Loft Demo 38mm — single deploy — mean abs. error 27%
| Metric | Stored (est.) | Loft | Δ |
|---|---|---|---|
| Apogee | 980 m | 1,182.2 m | +21% |
| Max velocity | 190 m/s | 211.8 m/s | +11% |
| Max acceleration | 238 m/s² | 234.5 m/s² | -1% |
| Max Mach | 0.55 | 0.62 | +13% |
| Time to apogee | 12.4 s | 14.3 s | +15% |
| Flight time | 122 s | 180 s | +48% |
| Ground-hit velocity | 4.7 m/s | 7.2 m/s | +54% |
| Rail-exit velocity | 19.4 m/s | 23.7 m/s | +22% |
| Deployment velocity | 3.2 m/s | 1.1 m/s | -65% |
| Optimum delay | 11.1 s | 13 s | +17% |
Loft Demo 54mm — dual deploy — mean abs. error 22%
| Metric | Stored (est.) | Loft | Δ |
|---|---|---|---|
| Apogee | 2,250 m | 2,994.9 m | +33% |
| Max velocity | 305 m/s | 436.8 m/s | +43% |
| Max acceleration | 208 m/s² | 280.9 m/s² | +35% |
| Max Mach | 0.89 | 1.29 | +45% |
| Time to apogee | 20.2 s | 20.9 s | +3% |
| Flight time | 214 s | 218.3 s | +2% |
| Ground-hit velocity | 5.6 m/s | 6.1 m/s | +8% |
| Rail-exit velocity | 26.2 m/s | 29.1 m/s | +11% |
| Deployment velocity | 4 m/s | 2.6 m/s | -34% |
| Optimum delay | 17.3 s | 17.5 s | +1% |
Community validation cases
Over time the most valuable record is predicted-vs-actual: Loft's prediction against a real recorded flight (an altimeter apogee, a tracked descent). If you've flown a design you're willing to share, open an issue with the .ork, the motor, and the measured result — verified cases will be collected here as an ongoing accuracy record. Until then, this page is honest about being early.
See also the limitations log for where to expect the largest differences.