Skip to content

Repository files navigation

SkyTrack

VersionLicensePlatformJavaScriptStatus

Real-time global aircraft tracker with 3D globe view, military/VIP detection, and comprehensive aviation intelligence.

✈️Launch SkyTrack✈️

Live Demo

SkyTrack Screenshot

Self-hosted:

git clone https://github.com/SysAdminDoc/SkyTrack.git
cd SkyTrack
# Open index.html in any browser — no build step, no dependencies

SkyTrack deploys as a zero-dependency, single-file web application. No npm, no bundler, no server required to run it — just open index.html.

Repository layout

For maintainability the app is authored as three files and built back into one for release:

SkyTrack/
├── src/
│ ├── index.html # HTML shell + inline PWA manifest + service-worker reg
│ ├── styles.css # All stylesheet rules
│ └── app.js # The main application script
├── build.mjs # Builder: inlines styles.css + app.js into index.html
├── package.json # Declares `npm run build` / `npm run check`
└── index.html # Generated single-file release (checked in for GitHub Pages)

Edit the files under src/, then regenerate the deployable single file:

node build.mjs # or: npm run build
node build.mjs --check # exit 2 if root index.html is stale (for CI)

The builder has no external dependencies — it uses Node's standard library only. The build is a verbatim concatenation: the rebuilt index.html is byte-identical in content to the src/ files, so running it and committing the output is completely mechanical.

During development you can also just open src/index.html directly in a browser and edit src/styles.css / src/app.js with live reload; the build step is only needed when you want to ship a fresh single-file index.html.

Features

Aircraft Tracking

FeatureDescription
Multi-Source ADS-BParallel data from Airplanes.live, ADSB One, and ADSB.lol with automatic failover
Grid FetchViewport-tiled API requests for global coverage — see every plane in the sky
Smooth AnimationInterpolated movement on 2D map via requestAnimationFrame, SampledPositionProperty on 3D globe
History TrailsAltitude-colored flight paths with local history and OpenSky trajectory data
Altitude TapeSelected-aircraft panel shows a compact altitude scale with climb/descent trend
Time AirborneCallsign chip estimates airborne duration from the local trail and adds route progress when available
Aircraft PhotosAuto-fetched from planespotters.net with preloaded image database
Category SVG SpritesInline top-down silhouettes distinguish light, small, large, heavy, rotorcraft, glider, balloon, UAV, and space categories
High-Volume RenderingCanvas-backed points for ordinary traffic at 800+ aircraft; selected and priority aircraft keep detailed icons
Privacy MarkersPIA/LADD aircraft use a dashed magenta outline and ? badge to make anonymized addresses explicit
Trail ExportExport flight paths as KML or GeoJSON
Share FlightGenerate shareable links for specific aircraft
Historical PlaybackScrub through recorded flight paths with playback controls

3D Globe View

image
FeatureDescription
CesiumJS GlobeFull 3D Earth with terrain, atmosphere, and satellite imagery
Procedural 3D ModelsRuntime-generated GLB airplane models with tubular fuselage, swept wings, tail, and engine nacelles
Smooth InterpolationAircraft glide between position updates using Cesium's SampledPositionProperty
3D TrailsFlight history rendered as altitude-accurate glow polylines, with selected trails emphasized
Civil-Twilight SkyCesium swaps to a star-field skybox below civil twilight and restores the daytime atmosphere automatically
Satellite ConstellationsLive ISS and sampled Starlink OMM orbits propagated with satellite.js in Cesium 3D
Type-Based ScalingHeavy (A380, B747): large, Medium (A320, B737): mid, GA: small
Altitude ColoringGround through cruise altitude mapped to a color gradient
Click SelectionClick any 3D aircraft to select and view details

Intelligence & Detection

FeatureDescriptionDatabase Size
Military DetectionIdentifies military aircraft by hex range and registration database11,383 aircraft + 7 hex ranges
VIP/GovernmentTracks heads of state, government, and notable private aircraft12,420 aircraft
PIA DetectionPrivacy ICAO Address — identifies aircraft using anonymized transponders94 aircraft
Interesting AircraftFlagged aircraft of special interest (chase planes, test aircraft, etc.)4,530+ aircraft
Civilian CategoriesCategorized civilian fleet with type/operator dataSelf-hosted DB

Airport Intelligence

image
FeatureDescription
49,000+ AirportsGlobal airport database with ICAO/IATA codes, coordinates, and metadata
Arrival/Departure BoardsReal-time boards for any airport showing inbound and outbound traffic
FrequenciesTower, ground, approach, ATIS frequencies for 11,000+ airports
Runway VisualizationRendered runway outlines on the map
NOTAMsNotices to Air Missions for selected airports
LiveATCDirect links to live ATC audio feeds
METAR/TAFCurrent weather observations and forecasts for airports

Airline & Route Data

FeatureDescription
5,800+ AirlinesICAO/IATA codes, names, callsigns, and country data
5,774 Callsign PrefixesDecode any flight callsign to airline and route
Alliance MembershipsStar Alliance, oneworld, SkyTeam identification
Route PredictionPredicts origin/destination based on flight path analysis
Route DatabaseKnown routes for 568 airlines

Map & Visualization

FeatureDescription
Multiple Map StylesDark CartoDB, satellite, OpenStreetMap, and more
Traffic HeatmapDensity visualization of aircraft positions
Airspace OverlaysFAA Class B/C/D polygon boundaries, ARTCC and terminal areas, V/J airways, Shanwick/Gander/New York/Oakland oceanic FIRs, restricted areas, TFRs, and MOAs
Vector Overlay RenderingVectorGrid slices dense airway GeoJSON, PolylineOffset separates V/J lanes, and EdgeBuffer preloads map tiles beyond the viewport
Fires & HurricanesNIFC active-fire incidents, NHC forecast cones/tracks, firefighting aircraft, and NOAA hurricane hunters
Weather RadarPrecipitation overlay from RainViewer
Mini-MapPicture-in-picture overview map
Distance MeasurementClick-to-measure great-circle distances
Aircraft ClusteringGroup dense traffic into expandable clusters
Fast ClusteringSupercluster viewport index keeps dense global views responsive
Virtualized ListMobile aircraft list keeps the full sortable set without mounting every row
Privacy AircraftPIA/LADD traffic is visibly marked without relying on the randomized ICAO24 value alone

Monitoring & Alerts

FeatureDescription
WatchlistTrack specific hex codes or registrations with real-time alerts
Military AlertsConfigurable radius-based alerts for military activity
Notification CenterCentralized alert history with sound and desktop notifications
BookmarksSave and quick-jump to map locations

Search & Analysis

FeatureDescription
Advanced SearchSearch by hex, registration, callsign, type, airline, or airport with fuzzy ranking and / jump-to-callsign
Random FollowOptional kiosk mode selects a fresh, filter-eligible aircraft every 15 seconds and centers the map
CPA WarningsBounded five-minute pairwise projection flags predicted conflicts within 5 nm and 1,000 ft
Holding PatternSelected-aircraft trails are checked for two level, consistent turns within eight minutes
Multi-SelectCtrl+click to select multiple aircraft for comparison
Comparison PanelSide-by-side analysis of selected aircraft
Altitude ChartLive altitude profile with climb/descent phases
Time MachineBrowse historical aircraft positions

UI & Experience

FeatureDescription
ThemesDark, Midnight, Light, High Contrast, Color Blind, CRT Radar, Cockpit OLED
Compact ModeDense layout for smaller screens
Accessible Motion & DialogsAlerts expose polite live regions, reduced-motion preferences stop map interpolation, and modals isolate background focus with inert
Mobile OptimizedTouch gestures, responsive panels, swipe navigation
Offline ModeServiceWorker caching plus ?demo=1 for a self-contained 24-hour continental replay
Dashboard LayoutsConfigurable panel positions — Default, Minimal, Analyst presets
External LinksQuick links to FlightAware, FlightRadar24, ADS-B Exchange, Wikipedia

Architecture

┌──────────────────────────────────────────────────────────────────┐
│ index.html (single file) │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Data Sources │───>│ Grid Fetch │───>│ Aircraft Cache │ │
│ │ │ │ System │ │ │ │
│ │ airplanes. │ │ Viewport tiles │ │ Dedup + enrich │ │
│ │ live │ │ Parallel fetch │ │ with databases │ │
│ │ adsb.one │ │ Rate limiting │ │ │ │
│ │ adsb.lol │ │ CORS proxy │ │ │ │
│ └─────────────┘ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┤ │
│ │ │ │
│ v v │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 2D Map (Leaflet)│ │3D Globe (Cesium)│ │
│ │ │ │ │ │
│ │ Smooth markers │ ◄── Toggle ──► │ GLB models │ │
│ │ Altitude trails │ │ Interpolation │ │
│ │ Clusters/heat │ │ 3D trails │ │
│ │ Airspace layers │ │ Terrain/sat │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Intelligence Layer │ │
│ │ Military DB │ VIP DB │ PIA DB │ Airlines │ Airports │ ... │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ UI: Search │ Alerts │ Watchlist │ Compare │ Settings │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘

Data Sources

SkyTrack fetches live ADS-B data from multiple free APIs with automatic failover:

SourceCORSPriorityCoverage
ADSB OneNo (proxy)PrimaryGlobal
ADSB.lolNo (proxied)SecondaryGlobal
ADSB.fiYesTertiaryEurope-strong
Airplanes.liveYesQuaternaryGlobal

ADSB.fi and Airplanes.live are queried directly from the browser. Public CORS proxies are reserved for feeds that cannot be queried directly, currently ADSB One and ADSB.lol.

Additional on-demand enrichment APIs (called only for the selected aircraft):

APIPurpose
adsbdb.com v2Callsign → origin/destination airport lookup (400k+ routes)
hexdb.ioFallback callsign→route and aircraft/airport metadata
aviationweather.gov /api/dataSIGMET, G-AIRMET, CWA, PIREP, METAR, TAF, NOTAM
OpenSky tracks APIHistorical trajectory for the selected aircraft; optional OAuth credentials raise the daily quota
Open Aviation FIR datasetCC BY 4.0 world FIR geometry; SkyTrack filters the four oceanic boundaries used by the overlay

The grid fetch system tiles the visible map area with overlapping 250nm radius API queries, distributing requests across sources at 1 req/sec per API. At global zoom, this covers the entire planet in ~16 seconds with progressive loading.

Configuration

Cesium Ion Token (Optional)

For 3D terrain in globe view, get a free token at cesium.com/ion and enter it in Settings.

Personal CORS Proxy (Optional)

For feeds that block browser CORS, deploy tools/skytrack-proxy-worker.js to a Cloudflare Worker and paste the deployed URL into Settings → Data Sources → Personal CORS Proxy. The URL is stored only in this browser and is tried before the shared public fallbacks; no SkyTrack credentials are required.

Settings Panel

Access via the gear icon in the header. All settings persist in localStorage.

SettingDefaultDescription
Map StyleDark CartoDBBase map tile layer
Show LabelsOnCallsign labels on aircraft
Altitude ColorsOnColor-code trails by altitude
Show AirportsOffAirport markers on map
Show RadarOffWeather precipitation overlay
Military Alert Radius50nmDistance trigger for military alerts
Sound AlertsOffAudio notifications for watchlist/military
Compact ModeOffDense UI for small screens
Follow ModeOffCamera tracks selected aircraft

Keyboard Shortcuts

SkyTrack is designed for mouse/touch interaction. All controls are accessible via the header toolbar and panel buttons.

Browser Support

BrowserStatus
Chrome/Edge 90+Full support
Firefox 90+Full support
Safari 15+Full support
Mobile Chrome/SafariOptimized touch UI

Tech Stack

Everything runs client-side in a single index.html — no server, no build process:

  • Leaflet 1.9.4 — 2D map rendering, markers, layers
  • CesiumJS 1.119 — 3D globe (lazy-loaded on first use, ~3MB)
  • Leaflet.heat — Traffic heatmap visualization
  • Leaflet.markercluster — Aircraft clustering at dense zoom levels
  • IndexedDB — Client-side caching of airport/registration databases
  • ServiceWorker — Offline capability and asset caching

All external libraries loaded from cdnjs.cloudflare.com CDN. No npm packages, no compilation.

FAQ

Q: Where does the aircraft data come from? ADS-B (Automatic Dependent Surveillance-Broadcast) is a system where aircraft broadcast their GPS position, altitude, speed, and identity. Volunteer-run receiver networks like Airplanes.live and ADSB One collect and share this data via public APIs.

Q: Why are some aircraft missing? Not all aircraft have ADS-B transponders. Military aircraft often don't broadcast, and some older general aviation aircraft use Mode-C transponders which report altitude but not position. Aircraft using Privacy ICAO Addresses (PIA) may appear with randomized hex codes.

Q: How do I get 3D terrain working? Click the globe icon to enter 3D mode. Terrain loads automatically using a Cesium Ion token included in the app. For a custom token, sign up free at cesium.com/ion and enter it in Settings.

Q: Can I run this offline? Yes. After the first load, the ServiceWorker caches core assets. Use ?demo=1 for a self-contained synthetic 24-hour continental replay; live aircraft data still requires an internet connection.

Q: Why do some planes show as "interesting"? SkyTrack loads curated databases including military, VIP/government, PIA (Privacy ICAO Address), and general "interesting" aircraft. These are flagged with colored markers and badges.

Contributing

Issues and PRs welcome. Edit source files under src/ (index.html, styles.css, app.js) and regenerate the root index.html with node build.mjs before committing. Do not hand-edit the generated index.html — it will be overwritten on the next build.

When contributing:

  • Edit src/ files; run node build.mjs before committing
  • Test in both 2D and 3D modes
  • Verify CORS compatibility for any new data sources
  • Keep the single-file release intact (the root index.html is what GitHub Pages serves — every PR should include a rebuilt index.html)
  • Dark theme is the default — ensure new UI elements support it

License

MIT License — see LICENSE for details.

About

A real-time aircraft tracker. Track commercial flights, military aircraft, helicopters, cargo planes, and private aircraft on a 2D/3D interactive map with weather radar.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages