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.