Real N-body physics
Every body pulls on every other. Orbits stay stable for years of simulated time, satellites stay in orbit at any time scale, and you can switch to ideal Kepler orbits at any point.
Teskooano (pronounced tes-koo-ah-no) lets you explore our Solar System and procedurally generated star systems with real N-body physics, GPU-baked planets, ray-traced black holes and a guided Grand Tour. All in 3D, in your browser, with as many viewports as you like.
The Grand Tour of our Solar System. Open the Celestial Hierarchy panel and press Tour to take it yourself.






Every body pulls on every other. Orbits stay stable for years of simulated time, satellites stay in orbit at any time scale, and you can switch to ideal Kepler orbits at any point.
Sol is built in, placed from real orbital elements: the planets and their major moons, dwarf planets, asteroids, comets, and satellites such as the ISS and the James Webb Space Telescope.
Type any seed to generate a new system: single and binary stars, neutron stars, black holes and Wolf-Rayet stars, with planets, moons, rings, belts and comets, under a sky of its own.
Let the camera fly between the most interesting bodies in a system, orbiting each with a short note, or focus and follow any body yourself.
Open as many engine views as you like in a dockable layout, each with its own camera, focus and panels.
Runs in any modern browser, adapts to phones, and installs as an offline Progressive Web App that updates itself.
Yes, I must note that by the time to which my tale refers, my first Teskooano had already been set up in the observatory which I had constructed on the planet Mars. I was just then devoting myself entirely to the further organization and development of this observatory of mine, for the more detailed observation of the remote concentrations of our great Universe and of the planets of this solar system.
TypeScript, Three.js r186 with WebGL shaders, RxJS for state, Dockview for layouts and Vite for builds. Planets bake on the GPU and black holes are ray-traced in a fragment shader.