Performance

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
The AstrOS console: a globe of the Earth with 50,000 satellite orbits, space weather on the left, orbits and asteroids on the right; the scene is paused.
The Orbits view: the live scene and the orbit counts.

At a glance

Each dot is a satellite. Your computer's graphics card computes its path along the orbit, live.

Challenge

50,000 moving objects live, with no install

The graphics card computes 50,000 moving objects every frame, so the browser can carry them.

How it works

The graphics card does all the work

  1. Once at start

    The orbit data of 50,000 objects goes into the card's memory.

  2. Every frame

    The card computes every object's motion in parallel.

  3. On screen

    The card draws positions straight from its own memory, with no copying.

Live data

NASA and NOAA telemetry console

Four views: Orbits, Earth, Sun and Engine. Sources: NOAA, NASA, Where The ISS At and Launch Library 2.

Data

How many of the 50,000 orbits are real satellites

  • All orbits50,000
  • Real (CelesTrak)about 16,700
The CelesTrak catalog, deploy of 2026-10-16 (16,737 objects). A synthetic fleet fills in the rest.
Size

What it weighs

  • Engine over the wire221 kB
  • Engine unpacked551 kB
  • Whole first loadabout 1.2 MB
Measured on the live deploy, 2026-10-16: Chrome DevTools Protocol, first load at 1440 × 900, 24 requests.

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
LayerChoiceWhat it does
LanguageRust, compiled to WebAssemblyA 221 kB engine over the wire, starts as soon as the page opens.
Graphicswgpu (WebGPU), vertex pullingThe card draws the scene; positions go from its memory straight to the screen.
PhysicsCompute shader (WGSL)Orbits are computed in parallel, the processor stays free.
DataCelesTrak catalog (SGP4)Real orbital elements for about 16,700 objects.
ConsoleHTML, CSS and strict TypeScriptNo 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.

Details

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.

Contact

Describe the problem, we come back with a price

  • We reply within 48 hours of your message; a deadline on a weekend or public holiday moves to the next working day.
  • Free intro audit, fixed price, no surcharge if the work takes longer than quoted.

Or write: contact@tenzanlogic.com

Three fields are required: name, email and a description of the problem.

Three questions that make the quote accurate. Optional.
What the problem is about
What you have today
Horizon

The form data is used only to answer your enquiry. Details in the privacy notice.