X-Plane 11 / 12
X-Plane needs no special setup. FFB-Bridge subscribes to X-Plane's built-in UDP dataref protocol (RREF) on port 49000. Nothing to install X-Plane-side, no plugin, no SimConnect-style XML file. If X-Plane is running when you launch the bridge, you're connected.
X-Plane is the supported simulator on the new macOS (Apple Silicon) build — the same zero-config UDP path described here. MSFS is Windows and Linux only.
Auto-detect behaviour
On startup the bridge runs two probes in parallel: a SimConnect TCP probe (for MSFS) and an X-Plane UDP probe. The first one to return a real response wins. In practice this means:
- If only X-Plane is running, it wins within a few milliseconds.
- If both MSFS and X-Plane are running, whichever responded first is used — and you can force a choice from the CLI if that's ever a problem.
- If neither is running, the bridge goes into Idle mode until one shows up.
When X-Plane is running and the bridge has subscribed successfully, the SIM lamp in the top strip turns green (“Sim connected”) and the MODE lamp reads “Live”. The DEVICE lamp is independent — green as long as a supported joystick is plugged in and open.
Make sure X-Plane isn't firewalled out
UDP 49000 is the only port the bridge touches on the X-Plane side. Default Windows Firewall rules on a fresh X-Plane install usually allow this automatically; Linux desktops with
firewalld or ufw almost never block loopback. If nothing is showing up in the bridge's event log after X-Plane boots, open the Support page
(sidebar → Support → Health checks) — the
X-Plane reachability row attempts a probe and tells you what came back (timeout, connection refused, or actual packets).
Datarefs the bridge reads
sim/flightmodel/position/indicated_airspeedsim/flightmodel/misc/machnosim/flightmodel/forces/g_nrmlsim/joystick/yoke_pitch_ratiosim/joystick/yoke_roll_ratiosim/cockpit2/controls/elevator_trimsim/cockpit2/controls/aileron_trimsim/cockpit2/annunciators/stall_warningsim/flightmodel/failures/onground_anysim/flightmodel/position/groundspeedsim/flightmodel/position/vh_indsim/cockpit2/controls/left_brake_ratiosim/cockpit2/controls/right_brake_ratiosim/cockpit2/controls/gear_handle_downsim/cockpit2/controls/flap_handle_request_ratiosim/cockpit2/controls/flap_ratiosim/cockpit2/autopilot/servos_onsim/cockpit2/controls/speedbrake_ratiosim/flightmodel2/controls/flap1_deploy_ratiosim/flightmodel2/controls/flap2_deploy_ratiosim/flightmodel/position/Qsim/flightmodel/position/Psim/flightmodel2/engines/thrust_reverser_deploy_ratio[0]sim/flightmodel/ground/surface_texture_typesim/cockpit2/engine/indicators/N1_percent[0]sim/flightmodel/engine/ENGN_running[0]sim/time/pausedsim/flightmodel/forces/g_sidesim/flightmodel/position/Q_dotsim/flightmodel/position/P_dotsim/flightmodel/position/R_dotsim/weather/aircraft/turbulence[0]sim/flightmodel2/misc/has_crashedsim/flightmodel/controls/hstab1_elv1defsim/flightmodel/controls/wing1l_ail1defsim/flightmodel/position/betasim/flightmodel/forces/fnrml_gearsim/cockpit/autopilot/flight_director_pitchsim/cockpit/autopilot/flight_director_rollsim/cockpit2/controls/total_pitch_ratiosim/cockpit2/controls/total_roll_ratiosim/flightmodel/forces/g_axilsim/flightmodel2/engines/prop_rotation_speed_rad_sec[0]sim/flightmodel/position/alphasim/aircraft/overflow/acf_stall_warn_alphasim/flightmodel2/gear/deploy_ratio[0]sim/flightmodel2/gear/deploy_ratio[1]sim/flightmodel2/gear/deploy_ratio[2]sim/flightmodel2/gear/tire_skid_ratio[0]sim/flightmodel2/gear/tire_skid_ratio[1]sim/flightmodel2/gear/tire_skid_ratio[2]sim/flightmodel2/controls/speedbrake_ratiosim/aircraft/view/acf_Vnesim/flightmodel2/engines/rotor_blade_slap_rat[0]sim/weather/aircraft/wind_now_y_mscsim/flightmodel/misc/Qstaticsim/flightmodel2/engines/thrust_reverser_deploy_ratio[1..7]sim/cockpit2/engine/indicators/N1_percent[1..7]sim/flightmodel/engine/ENGN_running[1..7]sim/aircraft/view/acf_ui_name[0..249]sim/aircraft/view/acf_descrip[0..259]sim/aircraft/view/acf_ICAO[0..39]sim/version/xplane_internal_versionsim/aircraft/controls/acf_flap_detentssim/aircraft/engine/acf_num_enginessim/aircraft/controls/acf_elev_upsim/aircraft/controls/acf_elev_dnsim/aircraft/controls/acf_ail1_upsim/aircraft/controls/acf_ail1_dn
Datarefs the bridge writes during AP Follow
When AP Follow owns a linked pitch or roll control, FFB-Bridge temporarily enables the corresponding joystick override, back-drives the stick with the full saved 0–100% authority, and writes the physical yoke ratio back to X-Plane, so grabbing the yoke still reaches the sim. Ownership is axis-scoped and released on disarm, disconnect, or shutdown. The Zibo 737-800X is detected through its own autopilot and its datarefs are never written.
sim/operation/override/override_joystick_pitchsim/operation/override/override_joystick_rollsim/joystick/yoke_pitch_ratiosim/joystick/yoke_roll_ratio
Staleness and reconnect
UDP has no disconnect signal, so the bridge runs its own watchdog: if no datarefs arrive for three seconds, it treats the session as dead and the Sim chip turns red. Relaunching X-Plane or loading a new flight re-establishes the connection automatically — you don't need to restart the bridge.
X-Plane pause continues to send datarefs (just frozen values), so the bridge stays connected but the staleness watchdog doesn't trip. During menu-level screens (aircraft selection, location dialog), X-Plane briefly stops emitting; the bridge will drop the SIM lamp back to grey ("no sim running") and snap green again when the flight resumes.
Non-default X-Plane install
Both free and paid X-Plane binaries bind UDP 49000 by default. If you've changed X-Plane's UDP port (Settings → Network → UDP ports), the bridge currently doesn't expose a UI for the alternate port — use X-Plane's default or tell us so we can prioritise it.