AstrOS: satellite orbits in the browser
A satellite catalog with a NASA and NOAA console around it. Your graphics card computes the whole scene.
- Type
- Our own project
- Who it is for
- Teams that show thousands of moving objects in a browser
- Built
- 2026
- Similar project
- Studio pricing and contact
At a glance
Each dot is a satellite. Your computer's graphics card computes its path along the orbit, live.
50,000 moving objects live, with no install
The graphics card computes 50,000 moving objects every frame, so the browser can carry them.
The graphics card does all the work
Once at start
The orbit data of 50,000 objects goes into the card's memory.
Every frame
The card computes every object's motion in parallel.
On screen
The card draws positions straight from its own memory, with no copying.
NASA and NOAA telemetry console
Four views: Orbits, Earth, Sun and Engine. Sources: NOAA, NASA, Where The ISS At and Launch Library 2.
How many of the 50,000 orbits are real satellites
- All orbits50,000
- Real (CelesTrak)about 16,700
What it weighs
- Engine over the wire221 kB
- Engine unpacked551 kB
- Whole first loadabout 1.2 MB
Positions are approximate, so the scene illustrates orbital motion and is not for tracking satellites. It needs a browser with WebGPU (tested in Chrome and Chromium); without one a still frame stands in and the data stays live.
For engineers: the technology stack
| Layer | Choice | What it does |
|---|---|---|
| Language | Rust, compiled to WebAssembly | A 221 kB engine over the wire, starts as soon as the page opens. |
| Graphics | wgpu (WebGPU), vertex pulling | The card draws the scene; positions go from its memory straight to the screen. |
| Physics | Compute shader (WGSL) | Orbits are computed in parallel, the processor stays free. |
| Data | CelesTrak catalog (SGP4) | Real orbital elements for about 16,700 objects. |
| Console | HTML, CSS and strict TypeScript | No framework. Native dialogs and popovers; the only link to the engine is one hidden DOM node. |
Measurement: the baked catalog loads about 1,100 times faster than the same data as JSON (9.2 µs against 10.2 ms for 10k objects; criterion benchmark, one run on a Linux x86-64 host; the JSON is 10k copies of one record, the ISS). A ratio, not the time on your hardware.
We run the graphics-card tests and the browser journeys (Chrome with WebGPU) by hand.
The full description and the methods of measurement
The problem: 50,000 moving objects
Moving 50,000 objects every frame is a job for the graphics card. We wanted to prove the browser can carry them all if the graphics card does the math: a small download, with a live frame rate in the header.
How it works: the full description
Once at start: the orbit data of 50,000 objects goes into the card's memory: about 16,700 from the CelesTrak catalog, the rest synthetic. Every frame: the card computes every object's motion in parallel. The processor never touches a satellite. On screen: the card draws positions straight from its own memory, with no copying.
The NASA and NOAA console
The console has four views: Orbits, Earth, Sun and Engine. Its first card, "Today in space", thinks like a flight controller: instead of five tables you get the conclusion, a one-word state such as ELEVATED, and the reasons behind it. Find (press /) jumps to a satellite by name or NORAD id, and its page opens beside the scene. The aurora on the globe follows the real Kp index, a measure of geomagnetic storms. On a phone the views move to a bottom bar (checked in Chrome emulation at 390 × 844 px). Sources: NOAA, NASA, Where The ISS At and Launch Library 2.
Numbers: the full description
~16,700 of the 50,000 objects are real satellites from the CelesTrak catalog (16,737 in the current deploy, as the engine reads it at load; we re-fetch the catalog at every deploy, so the count moves). A synthetic fleet fills in the rest. 221 kB is the engine itself over the wire (551 kB unpacked, brotli). The whole first load of the page, with the catalog and the NASA calls, is about 1.2 MB in 24 requests. Measured on the live deploy: Chrome DevTools Protocol, first load at 1440 × 900.
The frame
The Orbits view: today's situation on the left, the live scene in the middle, orbit counts and the nearest asteroids on the right.
