Skip to content

Puffin-Programs/Flight_Radar_Widget

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flight Radar Widget

A cross-platform desktop flight radar widget for macOS, Linux, and Windows. Built with Flutter and Dart. Inspired by the Tiny Desk Radar by Tom Haczewski.

Classic Green theme radar display


What it does

Displays a real-time PPI (Plan Position Indicator) radar sweep showing aircraft in a configurable radius around your location. Tap any blip to see callsign, altitude, speed, heading, route, and tail number. Switch to map view for a geographic OpenStreetMap overlay.


Quick start

Prerequisites

  • Flutter ≥ 3.16 with desktop support enabled
  • macOS: Xcode · Linux: clang + cmake + ninja + libgtk-3-dev · Windows: Visual Studio 2022

Build

# Clone the repository
git clone https://github.com/Puffin-Programs/flight-radar-widget.git
cd flight-radar-widget/flutter_app

# Generate platform runner (first time only — choose your platform)
flutter create --platforms=macos .    # macOS
flutter create --platforms=linux .    # Linux
flutter create --platforms=windows .  # Windows

# Install dependencies
flutter pub get

# Run
flutter run -d macos      # or linux / windows

# Production build
flutter build macos --release

macOS: required Info.plist and entitlements

Add to macos/Runner/Info.plist:

<key>NSLocationUsageDescription</key>
<string>Flight Radar Widget uses your location to centre the radar.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Flight Radar Widget uses your location to centre the radar.</string>

Add to both macos/Runner/DebugProfile.entitlements and Release.entitlements:

<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>

Data sources

Source Used for Key required
OpenSky Network Live aircraft positions No (anonymous) / Client ID+Secret (registered)
AirLabs Positions + route data in one call API key (free tier: 1 000 calls/month)
adsbdb.com Route lookup (origin/destination) No
hexdb.io Route lookup fallback No
OpenStreetMap Map tiles (map view) No

Recommended: Register a free account at opensky-network.org. An email address is all that's required. This increases your API limit from 400 to 4,000 calls/day. Enter your Client ID and Client Secret in Settings → OpenSky Credentials.


Features

  • Animated PPI radar sweep with 6 colour themes
  • Configurable range: 10 – 500 nautical miles
  • Tap aircraft to see full detail: callsign, tail number, altitude (FL), speed, heading, vertical speed, distance, bearing, route
  • Route confidence indicator (scheduled / approx / estimated)
  • Aircraft trails
  • Map view with OpenStreetMap tiles and geographic aircraft markers
  • Location detection (macOS/Linux/Windows)
  • Always-on-top floating window
  • Aircraft category filters
  • OpenSky and AirLabs data sources
  • In-app debug log viewer (off by default)
  • All settings persisted between sessions

Route data limitation

Origin and destination information is not transmitted by aircraft. It must be inferred from historical callsign databases, which are unreliable for low-cost carriers (EasyJet, Ryanair, TUI) that rotate callsign suffixes daily. The application tries three sources in cascade and shows a confidence indicator. This is about as accurate as freely available data allows — for precise route data a commercial API subscription would be required.


Project structure

flutter_app/lib/
├── main.dart                  Entry point, window setup
├── models/
│   ├── aircraft.dart          Data model + ICAO→IATA map
│   ├── radar_settings.dart    Settings + SharedPreferences persistence
│   └── theme.dart             Colour theme definitions
├── providers/
│   ├── opensky_provider.dart  OpenSky OAuth2 client
│   ├── airlabs_provider.dart  AirLabs client
│   ├── route_enrichment.dart  Multi-source route lookup
│   ├── radar_view_model.dart  State management hub
│   └── location_service.dart  GPS abstraction
├── radar/
│   ├── radar_screen.dart      Main screen + toolbar + detail panel
│   ├── radar_painter.dart     CustomPainter — the radar drawing
│   └── map_radar_screen.dart  flutter_map + OSM tile view
├── settings/
│   └── settings_panel.dart    Settings UI overlay
└── utils/
    ├── logger.dart            Debug logger (off by default)
    └── log_viewer.dart        In-app log viewer

Full architecture documentation: PROJECT.md


Cross-platform notes

The Dart code is identical on all three platforms. The lib/ directory is copied unchanged. The platform runner (macos/, linux/, windows/) is generated fresh on each machine with flutter create --platforms=<platform> ..

Settings are stored per-platform in the standard location (~/Library/Preferences/ on macOS, ~/.local/share/ on Linux, %APPDATA%\ on Windows) and do not share between platforms — re-enter your credentials on each machine.


Licence

MIT — see PROJECT.md §16 for full text.

Built with Flutter · Inspired by Tiny Desk Radar · Data from OpenSky Network · Maps © OpenStreetMap contributors

About

Cross-platform desktop flight radar widget built with Flutter. Inspired by the Tiny Desk Radar by Tom Haczewski.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages