Layer · Aviation
Live global aviation
Every aircraft transmitting ADS-B over the public network — civil airliners, freighters, private jets, helicopters, military — moving in real time with dead-reckoned interpolation.
Sources
OpenSky Network, adsb.lol, airplanes.live, adsb.fi. The edge races mirrors and merges by ICAO24, preferring the most recent timestamp.
Refresh
Streamed via SSE in ~3–5s chunks. The client interpolates heading and position between updates for visually smooth motion.
Per-aircraft data
Callsign, ICAO24 hex, airline, type code, origin, destination, lat/long, altitude, speed, vertical rate, squawk, data age.
Validation
Stuck or duplicated positions are flagged in the Debug panel. Aircraft that haven't updated for >90s are dimmed; >5m drops them.
Throttling
The aviation cap in the top bar bounds how many aircraft the globe holds at once, which keeps the frame budget predictable on mid-range hardware.
SSE wire format
GET /api/public/opensky-stream → text/event-stream
event: snapshot
data: { "time": 1755302400, "states": [ /* tuples */ ], "cached": 3812 }
event: delta
data: { "hub": [40, -74], "backend": "adsb.lol",
"states": [ ["a4b1c2","UAL231",40.7,-74.0,11277,87,245,0] ] }
event: done
data: { "hubs": 28, "succeeded": 26, "ms": 1840, "cached": 4011 }Normalized entity
icao24a4b1c2
callsignUAL231
airlineUnited Airlines
typeB789 · Boeing 787-9
from / toKLAX → EGLL
alt / spd37,000 ft · M0.84
age4s
Why three backends
No single public ADS-B aggregator has full global coverage at any given second. Racing three and merging by ICAO24 fills the gaps and survives any one backend rate-limiting.
ourwrld / documentation