About

A C11 solar system you can inspect: the same physics runs natively with raylib, in the browser through WebAssembly, and in a command-line CSV runner.

Model

Data

Snapshots are pinned in data/ and checked offline on every build; refreshing them is an explicit, reviewed step. The small-body atlas holds 1,564,244 objects. Provenance and precision notes.

Code

Physics in src/sim/ never includes raylib; rendering in src/render/ reads physical state and never writes it.

PartPathChecked by
Small-body atlas and source epochdocs/public/catalog/ + data/planet_epoch.jsonOffline tools/small_body_catalog.py --check and tools/planet_epoch.py --check; conic/experiment C tests and catalog-worker tests.
Giant-planet satellite catalogsdata/jovian_moons.jsonOffline tools/satellite_catalog.py --check, C satellite/frame/period tests, and full-scene convergence.
Project specSPEC.mdReview before an implementation task; check drift after verification.
Simulation coresrc/sim/make test-core covers initial states, orbital references, convergence, conservation, collisions, and source-catalog contracts without raylib.
Application helperssrc/app/C tests exercise reset/step, inspection, camera framing, 100-day accuracy, trail retention, descriptor validation, and comparison timing/identity.
Rendering boundarysrc/render/Renderer helper tests guard scale conversion, visual radius policy, family framing, and grid sizing.
Runtime loopsrc/main.cNative and WebAssembly builds compile both loop targets; artifact checks validate generated files.
Headless and comparison entrypointssrc/headless.c + src/lab_web.cmake test-cli; tools/test_learning_wasm.mjs compares matching native/WASM experiments.
Test binariestests/make test test-build test-cli test-validators; make test-sanitize for address/undefined-behavior checks.
Public sitedocs/npm test --prefix docs, npm run check --prefix docs, npm run build --prefix docs, and make docs-check; docs/browser-tests/ covers browser interaction.
Catalog and delivery toolstools/make test-build test-validators, offline catalog checks, WASM checks, and make docs-check.
Browser runtimedocs/src/pages/index.astroRuntime integration tests, generated route checks, and headless browser verification.
Automation.github/workflows/Inspect Build/CodeQL for the revision and, on eligible main delivery, Deploy Pages plus the public runtime manifest.

Rendering

Illustrative scale enlarges bodies and spreads close moons so they can be seen; real scale uses physical sizes and distances. Lighting, textures, spin from the IAU poles, Saturn's rings and trails are presentation only: they never feed the physics, the inspector or the CSV export.

Controls

The simulator's dock has play, speed, date and scene; Find, View, Keys and Data open small panels. With the view focused: Space pause, N step, R restart, [ ] speed, F B frame, V scale, G grid, H labels. Natively, K cycles scenes and L lessons.

Build and tests

CommandDoes
make / make runbuild and run the native raylib app
make testC tests for physics, scenes, app and renderer helpers, plus offline data checks
make test-sanitizethe same under address and undefined-behaviour sanitizers
make headlessthe solar-lab CSV runner (--scene, --catalog, --compare)
make docs-assetsthe WebAssembly build copied into this site
npm run test:browser --prefix docsbrowser journeys against the built site

CI builds natively on Linux and macOS, builds WebAssembly, checks the site, runs CodeQL, and deploys the exact artifact it tested. SPEC.md records goals, invariants, tasks and bugs.

What's next

Every moon system with a JPL ephemeris now has a scene, most recently the Patroclus–Menoetius trojan binary. Moons of other asteroids have only literature orbits, so they wait for an ephemeris. Open work is tracked in SPEC.md.

Credits

Made by Jonathan Peris. Code under the MIT licence; data are transformed extracts of NASA/JPL products; textures by Solar System Scope (CC BY 4.0); fonts Cormorant Garamond and JetBrains Mono (OFL). Usage analytics run only on the deployed site, and only when configured. Source on GitHub.