· Projects

Satellites on Google Earth: Back from the Dead

For almost a decade, I’ve been getting emails. Not many: maybe one every few months. People asking about the satellite tracker I built for Google Earth back in 2008. Could I bring it back? Did I still have the files? Was there an alternative?

The original project ran from 2008 to 2015. It was a set of Perl scripts on a shared web server that generated KML files showing real-time positions of satellites in Google Earth. The ISS, Hubble, the Iridium fleet, debris from the 2009 Iridium/Cosmos collision — you could track them all, updating every 30 seconds. At its peak, thousands of people were using it.

Then the server it ran on was decommissioned and I never got around to rebuilding it. The scripts were old, the server-side dependencies were a pain, and life moved on. But the emails kept coming.

Building it again in 2026

Last week I finally did something about it. The whole thing was rebuilt from scratch in a single session using Claude (Anthropic’s AI coding assistant) and Cloudflare Workers.

The new version is fundamentally different from the original. Where the old tracker was a Perl CGI script on a single shared Linux server, the new one is a TypeScript worker running on Cloudflare’s edge network across 300+ cities worldwide. It uses the satellite.js library for SGP4/SDP4 orbit propagation — the same mathematical models used by multiple specialists and agencies to predict satellite positions.

The architecture is simple: on each request, the worker fetches TLE (two-line element) data from Celestrak, propagates the orbits to the current time, and generates KML with satellite positions, orbit tracks, and altitude tethers. Google Earth’s NetworkLink mechanism handles the auto-refresh. The whole thing compiles to about 36KB gzipped.

What it does

The tracker is live at satellites.orbitingfrog.com.

The satellite tracker running in a web browser, by default showing ~100 of the brightest satellites in orbit on a 3D globe

The homepage features a live 3D globe showing satellite positions, updating every 10 seconds. You can switch between different satellite groups — the 100 brightest objects in orbit, space stations, GPS, Galileo, Starlink, weather satellites, and more. Click any satellite to track it.

For the full experience, download a KML file and open it in Google Earth. Each satellite gets a unique bright colour, with orbit tracks and ground tethers. The three layers (markers, orbits, tethers) can be toggled independently in Google Earth’s sidebar.

The 100 brightest satellites displayed in Google Earth, with coloured orbit paths

The tracker supports any Celestrak data group — far more satellites than the original could handle. You can also track individual satellites by NORAD ID. For example, satellites.orbitingfrog.com/kml?id=25544 tracks the ISS.

How Claude built it

I described what I wanted — a Cloudflare Worker that generates KML files for Google Earth, fetching TLEs from Celestrak and propagating orbits using satellite.js — and Claude wrote the entire thing. The TLE parsing, orbit propagation integration, KML generation with antimeridian-crossing handling, the Hono route handlers, the landing page with the embedded 3D globe, the deployment configuration. All in one conversation. It was approximately 5 interactions and then a 20 more to tidy up the design and stabilise.

We iterated on features as we went: per-satellite colours using the golden angle for even distribution across the colour wheel, adaptive refresh intervals (10 seconds for a single satellite, 30 for large groups), edge caching so concurrent users share the same computation, and the layered KML structure that lets users toggle markers, orbits, and tethers independently.

The whole thing — from ‘wouldn’t it be nice to bring this back’ to a fully deployed, production service — took a couple of hours.

Try it

And if you’re one of the people who emailed me over the years asking about this — thank you for the nudge. It’s back.

Comments

Loading comments…

Leave a comment