A high-performance X-Plane 12 plugin that broadcasts real-time flight data in GDL90 format via UDP. Compatible with ForeFlight, Garmin Pilot, WingX, and other Electronic Flight Bag (EFB) applications.
- π©οΈ Real-time Position Broadcasting: Ownship position, altitude, speed, and heading
- β‘ High Performance: Native C++ plugin, minimal CPU overhead
- π Cross-Platform: Windows, macOS (Universal), and Linux support
- βοΈ Fully Configurable: INI-based configuration for all settings
- π‘ Standards Compliant: Implements GDL90 Data Interface Specification (Rev A)
- π§ Easy Setup: No external dependencies, works out of the box
- Download the latest release from Releases
- Extract the ZIP file
- Copy the
xp2gdl90
folder to:X-Plane 12/Resources/plugins/xp2gdl90/
- Configure your settings by editing
xp2gdl90.ini
- Start X-Plane 12
Edit X-Plane 12/Resources/plugins/xp2gdl90/xp2gdl90.ini
:
[Network]
target_ip = 192.168.1.100 # Your iPad/tablet IP address
target_port = 4000 # GDL90 default port
[Ownship]
icao_address = 0xABCDEF # Your aircraft's ICAO address
callsign = N12345 # Fallback callsign (auto-reads from aircraft)
emitter_category = 1 # 1 = Light aircraft
iOS (iPad/iPhone):
- Open Settings β Wi-Fi
- Tap the (i) icon next to your connected network
- Note the IP Address (e.g., 192.168.1.100)
Android:
- Open Settings β Network & Internet β Wi-Fi
- Tap your connected network
- Note the IP address
Application | Port | Tested |
---|---|---|
ForeFlight | 4000 | β Yes |
Garmin Pilot | 4000 | β Yes |
WingX Pro | 4000 | |
FltPlan Go | 4000 |
- CMake 3.16 or higher
- C++17 compiler:
- Windows: Visual Studio 2019+ or MSVC
- macOS: Xcode Command Line Tools
- Linux: GCC 7+ or Clang 6+
- X-Plane SDK (included in
SDK/
directory)
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
The plugin will be built in build/
directory:
- Windows:
win.xpl
- macOS:
mac.xpl
(Universal binary) - Linux:
lin.xpl
[Network]
target_ip = 192.168.1.100 # Target device IP
# - Specific IP: 192.168.1.100
# - Broadcast: 192.168.1.255
# - Global: 255.255.255.255
target_port = 4000 # UDP port (default: 4000)
[Ownship]
icao_address = 0xABCDEF # 24-bit ICAO address (hex)
callsign = N12345 # Fallback callsign (auto-reads from X-Plane)
emitter_category = 1 # Aircraft type:
# 0 = No info
# 1 = Light (<15,500 lbs)
# 2 = Small (15,500-75,000 lbs)
# 3 = Large (75,000-300,000 lbs)
# 5 = Heavy (>300,000 lbs)
# 7 = Rotorcraft
# 9 = Glider
[Update Rates]
heartbeat_rate = 1.0 # Heartbeats per second (default: 1)
position_rate = 2.0 # Position updates/sec (default: 2)
[Accuracy]
nic = 11 # Navigation Integrity Category
# 11 = HPL < 7.5m (very high precision)
# RECOMMENDED: Use 11 for best EFB compatibility
# Many EFB apps filter out low accuracy reports
nacp = 11 # Navigation Accuracy Category
# 11 = HFOM < 3m (very high precision)
# RECOMMENDED: Use 11 for best EFB compatibility
- Check
X-Plane 12/Log.txt
for error messages (look for[XP2GDL90]
entries) - Ensure plugin is in correct folder:
Resources/plugins/xp2gdl90/
- Verify plugin structure:
Or for Windows/Linux:
xp2gdl90/ βββ mac.xpl (macOS) βββ xp2gdl90.ini
xp2gdl90/ βββ 64/ β βββ win.xpl (Windows) β βββ lin.xpl (Linux) βββ xp2gdl90.ini
Important: Many EFB applications (especially ForeFlight and Garmin Pilot) filter out low-accuracy GPS reports. The default configuration uses nic=11
and nacp=11
(highest accuracy) to ensure compatibility with all EFB apps.
Checklist:
- β
Verify
nic = 11
andnacp = 11
inxp2gdl90.ini
- β Confirm plugin is enabled (check Plugins menu β XP2GDL90)
- β Ensure GPS is available in X-Plane (not in a hangar, GPS panel powered on)
- β
Check X-Plane's
Log.txt
for[XP2GDL90] Plugin enabled
message
- Network connection: Ensure X-Plane computer and EFB device are on the same Wi-Fi network
- IP address: Confirm
target_ip
in config matches your EFB device's IP- Don't use
127.0.0.1
orlocalhost
if EFB is on a different device
- Don't use
- Firewall: Ensure UDP port 4000 is allowed on both devices
- Try broadcast mode: Set
target_ip = 255.255.255.255
to broadcast to all devices - Restart: Restart both X-Plane and the EFB app
If you experience frame rate drops, lower the update rates:
[Update Rates]
position_rate = 1.0 # 1 update per second
heartbeat_rate = 0.5 # Once every 2 seconds
If you need to troubleshoot at a deeper level, you can enable debug logging:
[Debug]
debug_logging = true # Enable detailed logging (may impact performance)
log_messages = true # Log raw message hex dumps
Then check X-Plane 12/Log.txt
for detailed output.
This plugin implements the following GDL90 messages:
Message ID | Name | Description |
---|---|---|
0x00 | Heartbeat | Status and timing information (1 Hz) |
0x0A | Ownship Report | Own aircraft position and status |
All messages follow the GDL90 specification:
- CRC-16-CCITT error checking
- Byte stuffing for 0x7D and 0x7E characters
- Flag bytes (0x7E) for message framing
X-Plane DataRefs
β
GDL90 Encoder (C++)
β
UDP Broadcaster
β
Network (UDP)
β
EFB Application
- CPU Usage: < 0.1% on modern systems
- Memory: ~1 MB
- Network Bandwidth: ~2-5 KB/s
DataRef | Purpose |
---|---|
sim/flightmodel/position/latitude |
Ownship latitude |
sim/flightmodel/position/longitude |
Ownship longitude |
sim/flightmodel/position/elevation |
Ownship altitude (MSL) |
sim/flightmodel/position/groundspeed |
Ownship ground speed |
sim/flightmodel/position/true_psi |
Ownship true track angle |
sim/flightmodel/position/vh_ind_fpm |
Vertical speed (fpm) |
sim/flightmodel/failures/onground_any |
Airborne status |
sim/aircraft/view/acf_tailnum |
Aircraft tail number (callsign) |
Contributions are welcome! Please feel free to submit a Pull Request.
-
Clone the repository with submodules:
git clone --recursive https://github.com/6639835/xp2gdl90.git
-
Build using instructions above
-
Test in X-Plane 12
This project is licensed under the MIT License - see the LICENSE file for details.
- X-Plane SDK - Laminar Research
- GDL90 Specification - Garmin/FAA
- Inspired by the original Python implementation
- Issues: GitHub Issues
- Documentation: Wiki
- Discussions: GitHub Discussions
- Geometric altitude support (XPLM 4.1 feature)
- GUI configuration panel
- Traffic Report support (AI/multiplayer aircraft)
- FIS-B weather data integration
- Multiple EFB simultaneous broadcasting
Made with β€οΈ for the flight simulation community