How Turbulence works
Where the data comes from
| Source | What it provides | How it's updated | Limits that shape the app | Cost |
|---|---|---|---|---|
| AeroDataBox via RapidAPI | The departures board: what's leaving your airport in the next 3 hours or tomorrow – flight numbers, destinations, times, status, gate, and sometimes the aircraft registration. | Live, per request. | Free tier ≈ 700 calls a month; one call per board view (two for "tomorrow"). Not cached. | Free tier (key) |
| OpenSky Network | Historic flights per airport and per aircraft (who flew the route in the last 7–30 days), flown tracks (position and altitude), and live positions of candidate aircraft. | Flight lists are built overnight, so today never appears; live positions are real-time. | Track downloads are capped at roughly 10 a day – the app fetches tracks for the newest legs of your flight first, stops cleanly at the limit and keeps everything on disk, so coverage grows day by day. | Free (account) |
| FlightRadar24 API | Flight history by flight number and by registration (with airports and flight numbers OpenSky lacks), and full tracks with ground speed – used when OpenSky has gaps. | Live; history back 14 days. | Metered credits: about 27 per history page (20 flights) and 40 per track. The app makes one history call per aircraft and at most two track downloads per new route, all cached permanently. | Paid (credits) |
| Open-Meteo GFS model | Upper-air wind and temperature at seven pressure levels along the route – the basis of the wind/temperature and turbulence forecasts. | New model run every 6 hours, hourly steps, 16 days ahead. | Free for non-commercial use with a per-minute budget weighted by locations and variables; results cached for 3 hours. | Free, no key |
| Aviation Weather Center NOAA, aviationweather.gov | Live turbulence SIGMETs worldwide; airport METARs and TAFs; pilot reports used to calibrate the turbulence scale. | SIGMETs as issued (valid up to 4 h); METAR every 30 min; TAF every 6 h. | 100 requests a minute, custom User-Agent required; cached 5–20 minutes. | Free, no key |
| adsbdb.com / hexdb.io | Aircraft registry: transponder code → registration, type, operator, country, photo link. | Static registry data. | None to speak of; cached permanently. | Free, no key |
| planespotters.net | A photo of the actual airframe, with photographer credit. | As uploaded by photographers. | Requires a contactable User-Agent and a credit link; cached 30 days. | Free, no key |
| FlightFinder himaxym.com | Safety corpus: 164,000 accident and incident records merged from 130 investigation authorities, plus type-family statistics. | Periodic merges of the source registries. | 100 requests a day per IP without a key; one call per airline, cached 24 h. Searchable by airline but not by airport. | Free tier (paid tiers exist) |
| Bundled datasets | Airports and runways (OurAirports, public domain), airframe build/registration dates (OpenSky aircraft database, 260k airframes), curated aircraft type facts. | Shipped with the app; refreshed by hand. | None. | Free |
| CARTO / OpenStreetMap | Map tiles. | Continuous. | Fair use. | Free |
How a request flows
Rounded boxes are things this app does; rectangles are calls to outside services. Grey boxes are results kept on disk so the next visit is faster.
flowchart TD
classDef ext fill:#e4eefb,stroke:#5b8def,stroke-width:1.5px,color:#1f2f4d
classDef int fill:#fff7e0,stroke:#FFBA00,stroke-width:1.5px,color:#222,rx:10,ry:10
classDef cache fill:#eceff3,stroke:#8a94a6,stroke-dasharray:4 3,color:#333
classDef paid fill:#fdecec,stroke:#c0392b,stroke-width:1.5px,color:#5a1a1a
U([You: pick airports and a flight]):::int --> ADB[AeroDataBox: departures board]:::ext
ADB --> PICK([Pick your flight: number, callsign, scheduled time]):::int
PICK --> HIST([Find recent flights of this number]):::int
HIST --> OSD[OpenSky: departures from origin, last 7-30 days]:::ext
HIST --> FR24S[FlightRadar24: flights by number]:::paid
OSD --> MATCH([Match legs to your flight: callsign, else airline + time]):::int
FR24S --> MATCH
MATCH --> REG[adsbdb / hexdb: registration, type, operator]:::ext
MATCH --> TRK[OpenSky: flown tracks]:::ext
MATCH --> FR24T[FlightRadar24: tracks with speed]:::paid
REG --> GUESS([Which aircraft today? board reg, single tail, or nearest by live position]):::int
GUESS --> LIVE[OpenSky: live positions of candidates]:::ext
GUESS --> PHOTO[planespotters: photo]:::ext
GUESS --> AGE[(Airframe database: age)]:::cache
GUESS --> MOVE[FlightRadar24: where this aircraft has been]:::paid
TRK --> ROUTE([Expected route per minute: latest flown track, else great circle]):::int
FR24T --> ROUTE
ROUTE --> WX[Open-Meteo: GFS wind and temperature at 7 levels]:::ext
WX --> WIND([Wind, head/tailwind, temperature along the route]):::int
WX --> TURB([Turbulence: Ellrod index + Richardson number on a 55 km stencil, mapped to EDR bands]):::int
CAL[(PIREP calibration table)]:::cache --> TURB
ROUTE --> SIG[AWC: live turbulence SIGMETs]:::ext
SIG --> HIT([Route within 25 km, altitude in band, valid at the time]):::int
PICK --> APW[AWC: METAR and TAF for both airports]:::ext
APW --> FLAGS([Runway crosswinds and plain-English safety flags]):::int
GUESS --> SAFE[FlightFinder: airline accident and incident records]:::ext
SAFE --> SAFE4([Four views: this aircraft, airline, departure airport, arrival airport]):::int
WIND --> PAGE([Route page: tabs, charts, map]):::int
TURB --> PAGE
HIT --> PAGE
FLAGS --> PAGE
SAFE4 --> PAGE
PHOTO --> PAGE
MOVE --> PAGE
DISK[(On-disk cache of every response)]:::cache -.-> OSD
DISK -.-> TRK
DISK -.-> WX
DISK -.-> SAFE
What runs in the background
Once an hour the app scores recent US pilot turbulence reports with the same shear-and-stability maths it uses on your route, and rebuilds the table that maps those numbers onto the EDR scale. That's the Calibration page; it makes the turbulence forecast honest over time instead of relying on textbook thresholds.
What it is not
Not an operational briefing. Weather models resolve 25–50 km, the turbulence scale is derived rather than the official WAFS product, and the aircraft is an educated guess until the departures board names it. Use it to understand your flight, and treat the airline's own information as authoritative.