A real-time 3D solar system explorer and space mission simulator.
OrbitLab lets you fly through an accurate, living model of the solar system — and plan, optimize, and replay rocket missions from liftoff to orbit.
OrbitLab is built around two core experiences:
| 🪐 Explore the Solar System | Navigate a real-time 3D model of all planets, driven by actual ephemeris data |
| 🛸 Simulate Space Missions | Design multi-stage rockets, optimize trajectories, and watch missions unfold |
Fly through a physically accurate, animated solar system — for the sheer joy of it.
- All 11 solar system bodies — the Sun, the eight planets, Pluto and the Moon — rendered as detailed 3D models, scaled to their real physical sizes
- Live orbital motion — planet positions are computed from real ephemeris data and updated in real-time
- Orbit paths traced for every body, visible at solar and planetary scales simultaneously
- Simulation clock you can speed up, slow down, or rewind — watch years of orbital motion in seconds
The rendering engine handles the extreme scale of space (Mercury's orbit vs. Pluto's) without any floating-point precision artifacts, keeping the view crisp at every zoom level.
![]() |
![]() |
![]() |
| The inner solar system, from real ephemerides | Saturn — the globe casts its shadow across the rings | Total solar eclipse of 12 August 2026 — the Moon's shadow over the North Atlantic |
Create, configure, and visualize complete space missions — from launch vehicle design to orbital insertion.
- Create custom missions: define your launch vehicle, target orbit, and mission profile
- Configure every parameter: stage masses, thrust, ISP, payload, target altitude, and more
- Visualize the resulting trajectory in 3D, with full playback controls to step through every phase of the flight
- Earth's atmosphere is simulated: the vehicle feels aerodynamic drag
- Stage jettisoning: spent stages separate from the vehicle and fall back as debris
- Controlled deorbiting: an optional deorbit burn at the end of the mission brings the payload back through atmospheric reentry
Under the hood, OrbitLab uses CMA-ES trajectory optimization to find the optimal flight profile for your target orbit, and a high-fidelity physics model (including Earth's gravitational oblateness) to make the resulting trajectory realistic. Once optimized, missions are deterministic and can be replayed and analyzed in 3D.
![]() |
![]() |
| The mission wizard — Earth orbits and lunar missions | A launch to geostationary orbit, replayed after optimization: the parking orbit, the transfer, then the circularized orbit |
| Requirement | Details |
|---|---|
| OS | Windows 10+, Linux x86_64 (glibc 2.31+), macOS 12+ |
| GPU / OpenGL | OpenGL 3.2 core profile or newer — the shaders are GLSL150. Up-to-date GPU drivers required |
| Disk space | ~7.6 GB free in your user HOME for the data downloaded at first launch, plus ~320 MB for the extracted bundle |
| RAM | 4 GB minimum, 8 GB recommended — the application uses up to about 2 GB |
| CPU | 4 cores minimum; CMA-ES optimization is multi-threaded and scales with core count |
| Network | Internet access at first launch only (~7.6 GB from GitHub). A system proxy is used if one is configured |
| Java | None. Every archive embeds its own Java 21 runtime (Temurin) |
⚠️ Software / remote OpenGL (RDP, plain VNC,llvmpipe, some VMs without GPU passthrough) usually exposes only OpenGL 2.1 and will fail to start. A physical display with a real GPU is expected.
- JDK 21+ — the Gradle toolchain targets Java 21
- Gradle — wrapper included, no installation needed
The data downloaded at first launch is produced and published with Gradle tasks, for maintainers:
| Task | What it does |
|---|---|
./gradlew ephemerisGen |
Computes the ephemeris dataset into ~/.orbitlab/dataset/ephemeris (about two hours) |
./gradlew orbitGen |
Computes the orbit paths into ~/.orbitlab/dataset/orbits, from the ephemeris dataset |
./gradlew datasetPack -PdatasetTag=<tag> |
Prepares the files of a dataset release and writes the embedded manifest, src/main/resources/dataset-manifest.json |
./gradlew datasetVerify |
Downloads every file of the published dataset release and checks it against the embedded manifest |
The generators write into the folder the application checks at start-up: a regenerated file whose size differs from the embedded manifest is replaced by the release's copy at the next launch.
Grab the archive for your platform from the
Releases page
(orbitlab-vX.Y.Z-windows.zip, -linux.zip or -macos.zip), extract it, then run Orbitlab:
| Platform | Executable |
|---|---|
| Windows | Orbitlab\Orbitlab.exe |
| Linux | Orbitlab/bin/Orbitlab |
| macOS | Orbitlab.app/Contents/MacOS/Orbitlab |
On first launch, OrbitLab downloads its data — ephemerides and orbit paths, about 7.6 GB — into
~/.orbitlab/dataset. A start-up screen shows the file being downloaded, the progress,
the speed and the time left: at 5 MB/s, it takes about 25 minutes. The simulation starts as soon as
the data is complete.
- An interrupted download resumes where it stopped. Cancel closes the application and keeps what was already downloaded.
- If the download fails, the screen gives the cause, with Retry and Quit.
- Later launches start straight away, without network.
- Upgrading from an earlier version, which generated its data locally: the files already in
~/.orbitlab/datasetare checked once, in a few seconds, kept when identical and downloaded again otherwise.
The log is written to ~/.orbitlab/logs/orbitlab.log.
macOS: Gatekeeper blocks the launch (binaries are ad-hoc signed only)
xattr -dr com.apple.quarantine /path/to/Orbitlab.app| Component | Library |
|---|---|
| 3D Rendering | JMonkeyEngine 3 |
| Orbital Mechanics | Orekit |
| GUI | Lemur |
| Async / Reactive | Reactor Core |
| Logging | Log4j 2 |
| Testing | JUnit 5 |
OrbitLab is released under the Apache License 2.0.




