Personal project · 2026
OrbitScope
Starlink, GPS, and the ISS on a 3D globe, watched from New York.

OrbitScope puts the live satellite catalog on a globe. The dots are Starlink, GPS, and the ISS. The orange marker is New York, and pass times are calculated from there.
It is not deployed yet. The code and a screenshot are on GitHub.
What you can do with it
- Filter the sky to Starlink, GPS, the ISS, or all of them.
- Search by name or NORAD id.
- Click a satellite for its latitude, longitude, altitude, and the next few passes over New York. A pass counts when the satellite climbs above 10°.
The screenshot on this page is Starlink only, a bit over 10,000 satellites. GPS and the ISS are in the same catalog. The count changes when CelesTrak updates the file.
How it works
The API is Java 21 and Spring Boot. It downloads two-line element sets from CelesTrak (Starlink, GPS, and the ISS) and refreshes them every three hours. Orekit propagates those orbits. Positions for the whole catalog go out as parallel arrays, because one object per satellite was about 1.8 MB.
The globe is Cesium and TypeScript. Drawing ten thousand Entity objects was too slow, so the dots are a PointPrimitiveCollection. The map is Cesium’s built-in Natural Earth imagery, so the page does not need a Cesium ion token.
I checked the ISS against wheretheiss.at at the same timestamp. The difference was about 0.2 km. On this machine, Orekit took 165 ms for a long benchmark on 4 cores. A simpler array version took 4 ms, but it skips drag, so the globe stays on Orekit.
Run it
You need Java 21 and Node. From the repo:
./run.sh api # http://localhost:8080
./run.sh web # http://localhost:5173
The first API start downloads Orekit’s data files. CelesTrak returns an empty file if the request has no User-Agent, so the fetcher sends one.
