Next.jsTypeScriptCesiumJSFastAPIPythonSQLiteTailwindshadcn/uiRTL-SDRADS-B
FlightLog-SDR
A 3D ADS-B flight logger for RTL-SDR: live tracking on a CesiumJS globe, history replay, alerts, signal strength and a projector mode for wall displays.





FlightLog-SDR turns a cheap RTL-SDR dongle into a personal flight tracker. It records every aircraft the receiver hears, shows them live on a 3D globe at true altitude, and keeps a searchable history so you can ask "has this flight flown past me before?" and replay past flights on top of each other.
The problem
Most ADS-B viewers are either live-only or depend on someone else's cloud. I wanted something that runs on my own machine with no accounts or API keys, remembers everything, and looks good enough to leave running on a wall.
What it does
- Live 3D map: aircraft at true altitude with airline-coloured models (about 25 liveries), altitude-coloured trails, and estimated pitch and roll.
- Full history: every flight and position is logged to SQLite. Overlay flights from different days, scrub a timeline, or replay all traffic in a time window at once.
- Alerts: emergency squawks (7500, 7600, 7700) and a watchlist of callsigns, airlines or airframes, with toasts, sound and browser notifications.
- Receiver insight: per-aircraft signal strength, a coverage plot and heatmap of what the antenna reaches, and a gain assistant that can change dump1090's tuner gain and roll back if the feed drops.
- Projector mode: a black map with country and state outlines, airports, range rings around the receiver, glowing flight lines and sticky tags that follow each aircraft.
- Extras: route and airline lookup, airport activity board, stats, KML and CSV export, shareable links and a phone layout.
How it's built
- Ingest: the backend reads dump1090's SBS-1 stream, tracks live state, and splits the data into flights when a callsign changes or the signal goes quiet.
- Backend: FastAPI with async SQLAlchemy on SQLite, plus a WebSocket for live updates. A background worker enriches aircraft and routes from adsbdb, with caching, and this is optional and off by default.
- Frontend: Next.js, React, Tailwind and shadcn/ui on CesiumJS. Aircraft models are generated on request by a route handler, and interpolated entities keep movement smooth between sparse position updates.
- Attitude: ADS-B carries no pitch or roll, so heading comes from the ground track, pitch from vertical rate and speed, and roll from turn rate.
- Projector tags: HTML labels are positioned every frame from the 3D scene, hidden when the aircraft is on the far side of the Earth, and laid out so they avoid each other and flip at screen edges.
- Quality: 56 automated backend tests that need no hardware or network, plus type-checking and linting on the frontend.
Design choices
- Private by default: nothing leaves the machine unless online lookups are switched on.
- No API keys: it uses OpenStreetMap tiles and bundled Natural Earth data.
- Open source under Apache-2.0.