One position. Different velocities. Different orbits. Illustration; not a simulated trajectory.
The starting point
A question about Jupiter’s moons.
The first time I saw Jupiter’s four largest moons through my great-grandfather’s telescope, two were on each side of the planet. I wondered how often all four might appear on the same side. I calculated their orbital periods by hand, but I still wanted to see their positions changing over time.
I found a NASA animation that answered my first question and made me curious about other real and hypothetical orbits. Orbital Sandbox grew out of wanting to explore those questions myself: what happens when I change the central body, a satellite’s altitude, or its velocity?
The first version let me change those inputs and see the resulting orbit. I later added tools for planning prograde and retrograde burns. I want to understand how a spacecraft moves through a whole mission, including when and why its orbit needs to change.
Authorship & tools
How I build.
I also wanted to try building a project with Codex. I enjoyed Kerbal Space Program and wanted a smaller tool for experimenting with the orbital mechanics I had encountered in the game.
I develop Orbital Sandbox with AI-generated and AI-assisted code. I describe what I want, try the working versions, question results or visuals that do not make sense to me, and ask for revisions. Making burns easier to experiment with is one of the improvements I care about most: entering new orbital values is easier than figuring out which maneuver will produce them.
These milestones follow the project’s development record, from the first simulator to the current experience.
December 2025
A working orbit simulator
The first version connected position and velocity controls to an orbital path. Early revisions corrected orbital calculations and clarified the difference between altitude and distance from a planet’s center.
July 2026
From a single orbit to a flight plan
A new propagation engine, maneuver planning, 3D rendering, and guided challenges made it possible to preview and replay changes to an orbit.
July 2026
Historical missions, with sources
The archive added Artemis I, Cassini’s Grand Finale, and Voyager 1 at Jupiter using recorded JPL Horizons trajectory data.
September 2026
Making the results easier to understand
Recent revisions corrected burn-time announcements, added a written orbit summary, and made the main telemetry labels more readable.
Two corrections that matter
A planet’s surface and its center are different reference points. An early revision made the semi-major-axis readout use distance from the center, while keeping altitude above the surface distinct.
A burn’s time and the time shown by the next playback frame are also different. The current version reports the burn’s event time, even when accelerated playback moves past it between updates.
Physics & boundaries
What the model includes.
The editable sandbox uses a point-mass, two-body gravity model. A universal-variable propagator calculates motion between instantaneous burns. The planner supports full three-dimensional state vectors and radial, transverse, and normal maneuvers, displayed in either 2D or 3D.
It does not include atmospheric drag, a planet’s uneven gravity field, gravity from additional bodies, finite-duration engine burns, or full spacecraft systems. The spacecraft is enlarged for visibility.
The historical archive is a separate form of evidence: it plays back pre-generated JPL Horizons vectors. Those tracks are not predictions from the sandbox’s two-body solver.
The project’s automated checks cover circular-orbit return, forward and reverse propagation, maneuver execution, invalid states, and compatibility with saved plans. The public validation page shows representative numerical cases, while the sandbox’s Flight data panel exposes state vectors, orbital quantities, and solver diagnostics.
The sandbox includes state-derived maneuver explanations and a guided demonstration. The Earth investigation compares the two-body model with Earth’s oblateness to ask: when does the simpler model stop being good enough?