
Carver Sim
A real-time orbital mechanics and model-rocket simulator, written by the attorney. It propagates the live satellite catalogue through the same orbit model the catalogue is published for, draws the sky from measured star positions, and — where the data cannot support a number — says so instead of producing one.
Opens at rocket-sim.carveresq.com. It runs in the browser, draws with WebGL and loads a real catalogue, so give it a moment and a machine with a graphics processor.
What it actually computes
Orbits are propagated with SGP4, the model the published element sets are defined against — so the elements are consumed the way their publisher intends rather than approximated with something simpler. The implementation is satellite.js compiled to WebAssembly, and it runs in the browser, on the visitor's machine, once per frame.
Elements arrive as OMM JSON and never as TLE. That is a correctness decision with a date on it: the catalogue passed five digits of object number in July 2026, and the legacy fixed-width two-line format has no room to represent every object any more. Code that still parses TLEs silently cannot see part of the sky.
Planets and asteroids are fetched as osculating elements rather than as state vectors, then propagated locally. Vectors would pin the scene to whichever instants happened to be requested and force a network round trip to move the clock; elements give continuous motion at any epoch from a single daily fetch, and let one propagator serve both populations.
The numbers, and what each one is measured against
| Figure | What it is | Basis |
|---|---|---|
| 8.2 ms | Catalogue propagation, one frame | Every tracked object advanced to a new epoch through SGP4, single-threaded, against a 16.7 ms budget at 60 frames per second. |
| 19,878 | Objects in that frame | The live CelesTrak catalogue at the time of the measurement. It is a moving number — payloads launch and debris decays — so the figure is dated rather than asserted as a constant. |
| 3.6 ms | The faster path, not taken | The same work on the threaded WASM build. It is not shipped: threads need SharedArrayBuffer, which needs cross-origin isolation, which would impose COOP/COEP on the page. 8.2 ms is already inside the budget, so the slower path costs nothing a person can see and removes a whole class of header problem. |
| 17 | Server routes to real upstreams | Each one caches, states its freshness, and reports an upstream refusal as a refusal rather than as an empty result. |
| 26 | Test suites | Over the physics and the parsers — the two places where being confidently wrong is indistinguishable from being right. |
Measured on the development machine, not on yours, and the catalogue size moves daily. They are recorded here with their basis so they can be checked rather than taken on trust.
The number it will not give you
Ask the simulator how close two objects will pass and it will tell you: it computes a miss distance and a time of closest approach from the published elements. Ask it for the probability that they collide and it refuses.
That refusal is the most deliberate thing in the codebase. A general-perturbations element set carries no covariance — no statement of how uncertain the orbit is — and a probability of collision computed without one is not an estimate, it is a number with a percent sign after it. It would look exactly as authoritative as a real one on screen, which is what makes producing it worse than declining to.
So where a probability is shown, it comes from CelesTrak's own all-on-all screening, computed under their assumptions and attributed to them on the face of the display. Those are two different claims — “we calculated this” and “they published this” — and the interface is built to keep them apart.
Which is the reason this sits on a law practice's website. The engineering is the visible part; the discipline of knowing which assertions the evidence supports, marking the ones it does not, and attributing everything borrowed is the same discipline the practice sells.
Where the data comes from
Nothing below is synthetic, and none of it is bundled. Each upstream is fetched server-side, cached with a freshness window suited to how fast that data actually changes, and reported honestly when it declines.
- CelesTrak
- General-perturbations element sets for the tracked catalogue, the SATCAT metadata behind them, and the SOCRATES conjunction screening.
- NASA / JPL Solar System Dynamics
- Horizons and the Small-Body Database for planetary and asteroid elements, plus the close-approach and impact-risk services.
- ESA Near-Earth Object Coordination Centre
- An independently computed impact-risk list. ESA runs its own orbit determination against largely the same observations, so where ESA and JPL disagree the disagreement is itself information about how well constrained an orbit is.
- ESA Gaia DR3
- The stars, as measured positions and magnitudes rather than as decoration.
- CDS Sesame and SIMBAD
- Name resolution, so the search box works on the real sky instead of on a curated list.
- SatNOGS
- An enrichment layer over roughly a seventh of the catalogue, weighted toward amateur and scientific payloads. Treated as optional everywhere and reported as missing when it is missing, rather than implying even coverage.
- US National Weather Service
- The forecast wind at the grid cell an impact point falls in, so the debris plume — the most visually prominent thing on that map — goes where the weather actually sends it.
What there is to do in it
- Build a vehicle, then fly the one you built — the flight model reads the design rather than a preset.
- Zoom continuously from low orbit out through the solar system to interstellar space, in one scene with one clock.
- Fly a guidance programme capable of actually reaching orbit, and watch it miss when it is wrong.
- Put an impactor on a real map, with a debris plume that follows the forecast wind at that location.
- Triage the genuine close-approach candidates, with the published risk figures and their attribution intact.
- Play, in three small games built on the same physics as everything else.
Not a product
Carver Sim is not for sale, there is nothing to buy in it, and it collects nothing about the person using it. It is a demonstration. The practice is law — technology, intellectual property and privacy counsel — and this page is here because a client is entitled to know whether their lawyer can read the system they are asking for advice about.
Nothing here is legal advice, and using it creates no attorney–client relationship.