LivingKiosk · Display 05
Flights Overhead
A screen that shows the aircraft above you right now — where they are, what they are, how high, and where they came from when that can honestly be told.
What this is
Point a spare screen at a URL and it becomes a live scope of your own airspace. Aircraft appear as they enter the range you choose, drift across at their real speed on their real heading, and leave a slowly fading trail behind them. Beside each one is a data block: callsign, altitude, whether it is climbing or descending, and — depending on how much detail you ask for — its speed, its type, and the airline flying it.
It is built for a screen nobody is tending. Nothing blinks, nothing beeps, nothing turns red. The aircraft move because aircraft move; everything else holds still. An emergency squawk gets a thin ring around the symbol and no more than that, because a wall panel shouting at an empty room helps nobody.
The two styles are the same data with different manners. Map is a dark chart: coastline, lakes, built-up areas, and aircraft as small darts coloured by altitude. Radar is a phosphor scope — range rings, a beam sweeping once every six seconds, and blips that brighten as it passes and dim behind it.
Where the data comes from
Volunteers with receivers on their roofs
Positions come from adsb.lol, with airplanes.live as a fallback. Both are free community networks, fed by thousands of people running small ADS-B receivers at home and pooling what they hear. Neither charges anything and neither asks for a key. If this display is useful to you, consider putting a receiver up and feeding them back.
Airlines and airports from OpenFlights
A callsign like AAL1234 begins with an ICAO airline designator, so the airline can be named exactly. The bundled OpenFlights database — 5,779 airline designators and 7,697 airports — is what turns those three letters into “American Airlines”.
Type codes into plain English
The feeds report an aircraft type as a code like B738. A bundled table of 285 common types turns that into “Boeing 737-800”. Where the code is not in the table, the display shows the code and nothing invented.
Nothing is hotlinked
Your browser never talks to a feed. This server polls once every 8 seconds per configured location and every screen reads the same cached answer, so ten kiosks cost the volunteers exactly what one does. A display on a locked-down network only needs to reach this app.
About origin and destination
This is the one thing worth being careful about, so here is exactly what the display is doing. There is no free source that maps a live callsign to its actual flight plan. What is bundled is the list of city pairs each airline serves — it contains no flight numbers, so AAL1234 cannot simply be looked up.
So a route is shown only when it can be supported. Usually that is because the aircraft is doing something unambiguous: it is three miles from a runway at 1,500 feet climbing hard, and the airline it belongs to flies from that airport. That is an observation, and it appears plainly — LAX →. Half a route drawn honestly beats a whole one guessed.
Occasionally a cruising aircraft is sitting squarely on the great-circle track between two airports its airline serves, pointed the right way, and is the only route in that airline’s network that fits. Then both ends are shown with a tilde — ~LAX → JFK — and drawn dimmer, because it is an inference. If two routes fit, nothing is shown at all. That is the rule the whole thing runs on: an ambiguous answer is no answer.
Configure it
Live preview · 16:9 · real aircraft · reloads a moment after you change something
/
Plash (macOS desktop wallpaper) — add the URL and leave the reload interval at Never; the page updates itself.
open -a Plash --args "/"
Fully Kiosk Browser (Android tablet) — Settings → Web Content → Start URL. Leave auto-reload off.
/
Chromium in kiosk mode (Raspberry Pi, mini PC, anything with a browser):
chromium-browser --kiosk --noerrdialogs --disable-infobars \ --disable-features=Translate --check-for-update-interval=31536000 \ "/"
Raspberry Pi, start on boot — drop that command into ~/.config/lxsession/LXDE-pi/autostart after an @xset s off and @xset -dpms so the screen never blanks.
@xset s off @xset -dpms @xset s noblank @chromium-browser --kiosk "/"
Every parameter
| Parameter | Default | Meaning |
|---|---|---|
lat / lon | FLIGHTS_LAT / FLIGHTS_LON, else 34.05 / −118.24 | Centre of the display, decimal degrees, longitude east-positive. Both are needed together — a latitude on its own is a typo, and honouring half of it would move the screen into the Atlantic. |
place | FLIGHTS_PLACE, else the coordinates | The label in the corner. Supplying coordinates without a name shows the coordinates rather than a place name that is now wrong. |
radius | 40 | Search radius in nautical miles, 5–250. Also the outermost range ring, and the edge of what the display actually knows about. |
style | map | map | radar — a dark chart, or a phosphor scope with a slow sweep. |
labels | standard | min | standard | full — callsign only; plus altitude and route; plus speed, type and airline. |
units | imperial | imperial | metric. Altitudes above 18,000 ft are flight levels either way. |
basemap | full | full | coast | plain — how much bundled geography to draw. All of it is local; no tile server is contacted. |
trails | on | on | off — the fading track behind each aircraft. |
rings | on | on | off — range rings, spokes and compass letters. |
ground | off | on | off — include aircraft the feed reports as on the ground. |
minalt / maxalt | — | Altitude window in feet. A minimum around 10,000 leaves only the aircraft genuinely passing over. |
refresh | 6 | Seconds between browser polls, 3–300. This does not change how often the feeds are asked — the server's cache decides that. |
max | 250 | Most aircraft to draw, nearest first, 10–600. Worth lowering on a Raspberry Pi. |
Anything unparseable is ignored rather than fatal. A mistyped parameter on a wall screen shows aircraft, not a stack trace: values out of range are clamped, unknown words fall back to the default, and a missing longitude leaves the location alone.
Aircraft positions from adsb.lol and airplanes.live, community ADS-B networks fed by volunteer receivers. Airline, airport and route data from OpenFlights — airport and airline data in the public domain, route data under the Open Database License (ODbL). Coastlines, lakes, borders and urban areas from Natural Earth (public domain). Fonts: Inter and IBM Plex Mono, SIL Open Font License 1.1. Flights Overhead is not affiliated with any of them, and is not for navigation.