Current release. FFB-Bridge v1.1.2 is live. These docs track the current app described by the release manifest. If a section reads stale, flag it via the feedback form.

FFB-Bridge

User manual — Single-page printable edition
v1.1.2 · Revised 2026-05-30 · Windows 10+ / modern Linux (evdev) / macOS (Apple Silicon) · MSFS 2024 & 2020 / X-Plane 11–12
Use your browser's “Save as PDF” — the print stylesheet flips to light mode and hides the nav chrome.

Chapter 1About this manual

This manual covers FFB-Bridge, a userspace bridge that drives force-feedback joysticks from Microsoft Flight Simulator (2024 and 2020) and X-Plane 11 / 12 on Windows 10+, modern Linux, and macOS (Apple Silicon). MSFS connects over SimConnect TCP; X-Plane connects over UDP; the active sim is auto-detected at startup. Five stick families are validated and plug-and-play where tested: Microsoft SideWinder Force Feedback 2, MOZA AB9 + MH16 on Windows and Linux, Logitech Flight System G940, Logitech Force 3D Pro, and Logitech WingMan Force 3D. Other force-feedback joysticks can be enabled experimentally (chapter 2). The macOS build is scoped to X-Plane 12 with the SideWinder FFB2; Windows and Linux are the broad-coverage platforms. It is the single-file edition of the per-page manual at ffb-bridge.com/docs — same content, laid out for reading end to end and for printing to PDF.

The OS chips Windows, Linux, and Both mark paragraphs that apply to only one platform. Menus and buttons are in bold; filenames and shortcuts are in code.

Chapter 2Install

Validated, plug-and-play force-feedback joysticks in v1.1.2: Microsoft SideWinder Force Feedback 2 (045E:001B), MOZA AB9 + MH16 (346E:1000 / 346E:1002, Windows), Logitech Flight System G940 (046D:C287), Logitech Force 3D Pro (046D:C286), and Logitech WingMan Force 3D (046D:C283). If you own a MOZA or Logitech stick, run the Support page's Health checks after installing and send feedback if a device-specific quirk shows up.

MOZA Cockpit's Telemetry mode is for MOZA's own sim-fed telemetry path. It is not the normal default mode, and it can leave the base idle during standalone hardware tests. If the AB9 is detected but does nothing, switch MOZA Cockpit back to its normal/default mode and retry.

Beyond those validated devices, other force-feedback joysticks can be enabled by opting in at Settings → Hardware → Allow unlisted devices (experimental). The bridge then drives an eligible joystick-class device with safe defaults, a live invert and pitch/roll swap calibration to fix direction, and crash-recovery as a safety net. Wheels, gamepads, and single-axis devices can't be driven as flight sticks and are routed to the FFB Probe at ffb-probe.com instead.

2.1 Windows installer

After signing up on the home page, click the Windows link in the emailed download. Save FfbBridge-Setup-x64.exe and double-click it. The installer is code-signed by the Rohsam publisher identity. Brand-new signed builds may still show a SmartScreen reputation prompt; verify the publisher is Rohsam Inc. or RohsamInc before continuing.

The Inno Setup wizard installs into %LOCALAPPDATA%\Programs\FfbBridge by default. No administrator permission required — this is a per-user install. A Start Menu shortcut lands in the FFB-Bridge group.

To uninstall, open Apps & features, find FFB-Bridge, and choose Uninstall. Your profiles under %APPDATA%\ffb-bridge are kept for a later reinstall; remove that folder for a clean slate.

2.2 Linux AppImage

Save the AppImage from the emailed link, make it executable, and let the AppImage install its user-scoped desktop entry:

chmod +x FfbBridge-1.0.0-x86_64.AppImage
./FfbBridge-1.0.0-x86_64.AppImage --install

The --install flag copies the AppImage to ~/Applications, writes the .desktop launcher and icons into your XDG data directories, and refreshes desktop caches when possible. Uninstall the launcher and icons with --uninstall; delete the AppImage manually if you no longer want the file.

Installed menu entry on KDE Plasma; other XDG-compatible desktops pick it up after the AppImage --install step.
Figure 2.1. Installed menu entry on KDE Plasma; other XDG-compatible desktops pick it up after the AppImage --install step.

2.3 macOS (Apple Silicon)

macOS FFB-Bridge ships a signed and notarized DMG for Apple Silicon (M1 and newer). Open the DMG and drag FFB-Bridge to the Applications folder. The build is signed by the Rohsam Inc. Developer ID and stapled, so Gatekeeper opens it without an “unidentified developer” prompt. The macOS build is scoped to X-Plane 12 with the Microsoft SideWinder Force Feedback 2.

2.4 udev rule (Linux)

So the bridge can open the stick without a polkit prompt on every launch, install the following udev rule. The Support page has a one-click installer that uses pkexec to write it; you can also install by hand:

# /etc/udev/rules.d/99-ffb-bridge.rules
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="001b", TAG+="uaccess"
SUBSYSTEM=="input", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c287", TAG+="uaccess"
SUBSYSTEM=="input", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c286", TAG+="uaccess"
SUBSYSTEM=="input", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c283", TAG+="uaccess"

On NixOS, add it to configuration.nix under services.udev.extraRules, then sudo nixos-rebuild switch and replug the stick.

Chapter 3First launch

First-launch flow is three modals back-to-back: a physical-hazard Safety acknowledgement, then the Welcome tour, then the Dashboard. The safety modal blocks dismissal until you tick the “I understand” checkbox; Welcome can be skipped and replayed later from the Help page.

Safety acknowledgement. Shown on first launch only, and required before the bridge can run. Safety acknowledgement. Shown on first launch only, and required before the bridge can run.
Figure 3.1. Safety acknowledgement. Shown on first launch only, and required before the bridge can run.
Welcome dialog. Click “Take the tour” or “Skip tour”. Welcome dialog. Click “Take the tour” or “Skip tour”.
Figure 3.2. Welcome dialog. Click “Take the tour” or “Skip tour”.

The Dashboard opens with the device detected and the arm gauge in the top strip reading DISARMED. Forces do not reach the stick until you explicitly arm. The strip across the top of the window is the operational cockpit: brand block, ARM gauge (centre, the visual hero), Sim · Device · Mode lamps, and the Profile picker + Tune / Save button on the right. Live flight numbers (IAS, G, Mach, pitch / roll force, data age, tick rate) live in a thin tape along the bottom of the content area.

Dashboard in its initial state. Dashboard in its initial state.
Figure 3.3. Dashboard in its initial state.

The window uses the normal operating-system controls for minimize, maximize, close, and resizing. The close action still follows the tray behavior below.

Click the ARM gauge in the strip to arm. The gauge has three states: DISARMED (warm border at rest, neutral glyph), ARMED (amber gradient + bright glyph), FAULTED (red — see § 3.4). Esc cancels the arm-confirmation dialog if you change your mind before confirming. There are no other global keyboard shortcuts; the bridge is mouse / tray-driven by design.

Close-button dialog. Minimize to tray keeps the bridge running; Quit releases the stick. Close-button dialog. Minimize to tray keeps the bridge running; Quit releases the stick.
Figure 3.5. Close-button dialog. Minimize to tray keeps the bridge running; Quit releases the stick.
Safety. The first arm snaps the stick to the trimmed centre position. Make sure nothing — hands, cables, anything loose on the desk — is resting on or against the stick when you arm.

3.4 Recovering from a fault

If a prerequisite drops while you're armed — most often the stick gets unplugged or the sim crashes — the gauge flips to FAULTED and forces stop. The matching lamp goes red so the cause is unambiguous: DEVICE for an unplug, SIM for a sim drop. Click the gauge to acknowledge and reset back to DISARMED; restoring the missing prerequisite then lets you re-arm. The open Diagnostics link next to the gauge takes you to the Support page's Diagnostics tab event log if you want the full story before resetting.

Closing the window (X button) offers to hide to the tray; the bridge keeps running if you choose Minimize to tray. Use the tray menu to arm / disarm / show / quit. On desktops without a usable tray, such as stock GNOME Wayland, the bridge tells you close will quit directly instead of hiding.

System tray menu.
Figure 3.5. System tray menu.

Chapter 4Connecting MSFS (2024 & 2020)

Both Microsoft Flight Simulator 2024 and 2020 talk to FFB-Bridge over SimConnect TCP, and the same setup applies to either. On Windows this works out of the box; on Linux under Proton the default port (500) can't be bound and a one-click fix on the Support page's Health checks tab adds a parallel unprivileged port. (The paths below are MSFS 2024's; MSFS 2020 uses the equivalent Microsoft Flight Simulator folder, which the bridge also detects.)

4.1 Where SimConnect.xml lives

The file's location depends on the MSFS install source:

  • Windows Steam %APPDATA%\Microsoft Flight Simulator 2024\SimConnect.xml
  • Windows Store / Xbox %LOCALAPPDATA%\Packages\Microsoft.Limitless_8wekyb3d8bbwe\LocalCache\SimConnect.xml
  • Linux Steam + Proton ~/.steam/steam/steamapps/compatdata/2537590/pfx/drive_c/users/steamuser/AppData/Roaming/Microsoft Flight Simulator 2024/SimConnect.xml

FFB-Bridge detects the correct path automatically. Override with FFB_BRIDGE_MSFS_CONFIG or FFB_BRIDGE_MSFS_PREFIX if you run MSFS from a non-standard location.

4.2 One-click fix from the Support page

Open the Support page → Health checks tab. The SimConnect config row shows the detected XML path and the port the bridge is targeting. Three outcomes:

  • Green — matching entry found, nothing to do.
  • Amber Use port :X — entry at a different port; the button adopts it.
  • Red Fix… — no usable entry; the dialog shows exactly what it will add.
Fix dialog on Linux, showing the parallel unprivileged port entry about to be merged. Fix dialog on Linux, showing the parallel unprivileged port entry about to be merged.
Figure 4.1. Fix dialog on Linux, showing the parallel unprivileged port entry about to be merged.

All fix operations are additive — existing entries are never overwritten. If the XML is unparseable, a timestamped backup is taken first.

Chapter 5Connecting X-Plane 11 / 12

Zero-config. X-Plane accepts UDP RREF subscribes on 127.0.0.1:49000 by default; FFB-Bridge subscribes on launch and data flows. If X-Plane is running when you start the bridge, the SIM lamp in the top strip goes green within milliseconds.

A 3-second staleness watchdog covers the UDP no-disconnect problem: if no datarefs arrive for three seconds, the SIM lamp turns red. Loading a new flight re-establishes automatically.

Firewalls rarely interfere on loopback, but if the Support page's X-Plane probe is red and X-Plane is genuinely running, check for a firewall blocking UDP 49000. See chapter 14 for the recovery flow.

Chapter 6Dashboard

Dashboard layout — flight-state panel on the left, stick-activity panel on the right. Operational state (arm, sim, device, mode, profile) lives in the top strip. Dashboard layout — flight-state panel on the left, stick-activity panel on the right. Operational state (arm, sim, device, mode, profile) lives in the top strip.
Figure 6.1. Dashboard layout — flight-state panel on the left, stick-activity panel on the right. Operational state (arm, sim, device, mode, profile) lives in the top strip.

Operational state — arm, sim, device, mode, profile — is no longer on this page. It moved into the persistent top strip so it stays visible while you're on Tuning, Diagnostics, or anywhere else. The Dashboard is the live explanation surface: what the sim is reporting, what dynamic channels are active, and what baseline spring state the stick is holding.

Left panel: flight state. A row of three numeric readouts — airspeed (kt), G-load (g, turning amber outside the normal range), Mach — over a pair of BiBars for elevator and aileron deflection. Below the bars, smaller readouts for elevator trim, ground state, and stall warning. The UI refreshes at ~20 Hz — a decimated view of the 50 Hz control loop.

The bottom of the left panel is a list of effect-group toggles: Stick feel, Engine rumble, Airframe buffet, Ground roll, Mechanical shoulders, Axis load, and Autopilot follow. Each row has a checkbox, a live status, and a compact level bar. Use these as quick mutes for in-flight A/B comparisons; per-effect gains stay on Tuning. Toggle state is part of the active profile.

Right panel: stick activity. The headline names the strongest dynamic contributors, the stacked bar groups them by family, and the active-channel chips show individual values when they matter. The centring spring is treated as the baseline feel, so the active list focuses on changes above that baseline: trim centre, G-load spring changes, axis load, engine rumble, ground roll, buffets, and mechanical one-shots. Axis-load bars use a distinct blue from the spring-load contribution; the centring-spring section shows coefficient, deadband, and pitch / roll centre.

Chapter 7Tuning

Tuning page: master-gain accent card, then effect sliders grouped by subsystem (Forces, Trim, Stick feel, Ground effects, Aero buffets, Powerplant, One-shots, Autopilot), with per-slider reset arrows and dirty indicators. Tuning page: master-gain accent card, then effect sliders grouped by subsystem (Forces, Trim, Stick feel, Ground effects, Aero buffets, Powerplant, One-shots, Autopilot), with per-slider reset arrows and dirty indicators.
Figure 7.1. Tuning page: master-gain accent card, then effect sliders grouped by subsystem (Forces, Trim, Stick feel, Ground effects, Aero buffets, Powerplant, One-shots, Autopilot), with per-slider reset arrows and dirty indicators.

Every slider change applies on the next 50 Hz tick; you can fly with the Tuning page pinned on a second monitor and adjust effects while they're happening.

7.1 Master gain

A single multiplier applied at the device-output edge, displayed as a percentage from 0% to 100%. 100% is the designed level (and the default); lower values attenuate everything the bridge sends, including the centring spring coefficient, airspeed forces, rumbles, buffets, sustained drag, and one-shots. 0% sends no force output. There's no “boost” above 100% — that ceiling is the one the per-effect gain sliders work up to. Underneath the slider the bridge drives the device at 95% of its full authority, leaving 5% headroom.

Master-gain card. Master-gain card.
Figure 7.2. Master-gain card.

7.2 Slider groups

Top to bottom: Centring spring (base, low-speed floor, G-gain, min/max clamps, deadband) · Aerodynamic loading (pitch gain, roll gain) · Trim (one Enable trim switch, elevator-first) · Stick feel (control-system feel selector, rate damping, control-edge bonus, stick drop) · Ground effects (runway rumble, touchdown thump, gear bumps, brake shudder, nosewheel shimmy, ground-acceleration pitch cue, and an undercarriage type Wheels/Skis/Floats selector) · Aero buffets (stall, overspeed, Mach, spoiler, turbulence, plus a stall stick-shaker) · Powerplant (engine rumble, reverse rumble) · One-shots (gear deploy, flap step) · Autopilot (low-authority AP cue). See chapter 12 for the full reference.

7.3 Stick drop

Stick drop models the gravity bias on an unloaded elevator at low airspeed — what makes a parked GA aircraft's yoke sit slightly forward of centre. Two sliders: Force (how hard the bias pulls) and Fade airspeed (the kts at which the bias has decayed to zero). Defaults are Cessna-class — drop Force toward 0 to silence on jet or fly-by-wire profiles.

7.4 Trim

Trim is one switch: Enable trim, near the top of the Tuning page. With it on, trimming eases the held airspeed-loaded force (computed against (elevator − trim)) and shifts the centring target to the trimmed position, so at a trimmed steady state with neutral stick you feel close to zero force and the stick settles at the trimmed position on release — the way a real cable-rigged stick behaves. With it off, trim does nothing to the stick. The elevator is the headline control; aileron trim strength sits under an Advanced disclosure. (Earlier builds had a second, hidden centre-only trim path that kept moving the stick even with trim off — that has been retired, so “Enable trim” off now genuinely turns trim off.)

7.5 Control-system feel

A per-aircraft selector at the top of the Stick feel group with three settings: Manual, Hydraulic-boosted, and Fly-by-wire. It modulates the existing centring and aerodynamic-loading forces to match how the real aircraft's controls feel:

  • Manual (default) — mechanical / cable controls; no change to the baseline feel.
  • Hydraulic-boosted — gentles the aerodynamic loading the way an artificial-feel system does, without removing it.
  • Fly-by-wire — suppresses aerodynamic loading and the G-load stiffening, matching a spring-centred sidestick.

The built-in starters set this per airframe — the GA and turboprop starters are Manual, the 747-8 is Hydraulic-boosted, and the A320neo is Fly-by-wire — so a starter is a good reference for which to pick.

7.6 Slider interaction

Drag the thumb, click anywhere along the track to jump there, or click once to focus and then use the wheel / arrow keys. Hovering and scrolling does not capture the wheel — the slider has to be focused first — so you can scroll the page past hovered sliders without nudging them.

7.7 Dirty indicators and resets

When a slider differs from the loaded profile, a back-arrow reset glyph appears next to its value; click it to revert just that slider. Each section header carries a matching glyph that resets every slider in the section. A Discard button on the Profile card reverts everything at once. The amber dot on the profile picker summarises “this profile has unsaved changes”. Resets are local-only — they don't touch the saved profile.

Per-slider and per-section reset arrows on dirty rows; matching glyph on the section header; dirty dot on the profile picker. Per-slider and per-section reset arrows on dirty rows; matching glyph on the section header; dirty dot on the profile picker.
Figure 7.4. Per-slider and per-section reset arrows on dirty rows; matching glyph on the section header; dirty dot on the profile picker.

7.8 Saving

Save overwrites the active profile. Save as… opens a dialog to save under a new name. Starter presets are read-only; Save as creates the editable aircraft profile you will keep.

Chapter 8Profiles

Profiles page: starter presets and saved profiles in one searchable list, with the active profile highlighted. Profiles page: starter presets and saved profiles in one searchable list, with the active profile highlighted.
Figure 8.1. Profiles page: starter presets and saved profiles in one searchable list, with the active profile highlighted.

Saved profiles are JSON files under %APPDATA%\ffb-bridge\profiles\ (Windows) or ~/.config/ffb-bridge/profiles/ (Linux, honouring $XDG_CONFIG_HOME; macOS uses the same path). Each file is one profile. Copy them between machines or share them with others by emailing the file.

There is also a free community Profile Library at ffb-bridge.com/profiles: browse and download profiles other users have published (no account needed), and publish your own with the globe Share action on the Profiles page. Share hands the profile to the library with the submission form pre-filled; you sign in only at the moment you publish, nothing is uploaded silently, and built-in starters can't be shared. Shared profiles travel in a forward-compatible format that carries descriptive metadata and migrates cleanly into newer app versions; plain hand-copied files still work as before. A community forum lives at ffb-bridge.com/community.

Starters and saved profiles share one list. Actions: Use selected profile, Duplicate selected, Delete selected, and Refresh. Starter presets are read-only; use Duplicate or Save as to get an editable copy.

Profile library list with built-in starter rows, active-profile highlight, and selected-profile actions. Profile library list with built-in starter rows, active-profile highlight, and selected-profile actions.
Figure 8.2. Profile library list with built-in starter rows, active-profile highlight, and selected-profile actions.

Built-in starters are named after the MSFS aircraft: Cessna 172 Skyhawk (G1000), Daher TBM 930, Beechcraft King Air 350i, Airbus A320neo, and Boeing 747-8 Intercontinental. Switching profiles applies on the next 50 Hz tick without disarming. The profile picker on Tuning shows an amber dot for unsaved changes — save before loading another profile or you'll discard the changes.

Chapter 9Support page — Diagnostics tab

Diagnostics tab inside the Support page — triage summary, runtime signals, searchable event log, and support-bundle export. Diagnostics tab inside the Support page — triage summary, runtime signals, searchable event log, and support-bundle export.
Figure 9.1. Diagnostics tab inside the Support page — triage summary, runtime signals, searchable event log, and support-bundle export.
Triage summary close-up. Triage summary close-up.
Figure 9.2. Triage summary close-up.

The Diagnostics tab is the deeper triage surface. The four top cards show Device, Data source, Force output, and Log health before you dig into details. The runtime panel shows the current session's uptime, data age, UI telemetry rate, control-loop rate, target rate, active / allocated effects, reassertions, and exception count.

The event log is searchable and level-filtered. Info, Warn, and Error toggles trim by severity, the search box matches any substring, and Copy visible exports exactly the rows currently shown. Use Copy full log or Export full log... when support needs the whole on-disk session log.

Searchable event log. Searchable event log.
Figure 9.3. Searchable event log.

The Support bundle button produces a single ZIP for feedback reports. After export, the tab shows the filename, size, a feedback-form link, and Reveal file where the desktop can open the bundle location. See chapter 15 for the complete contents list.

Bundle-exported banner with filename, size, and feedback-form link. Bundle-exported banner with filename, size, and feedback-form link.
Figure 9.4. Bundle-exported banner with filename, size, and feedback-form link.

Chapter 10Health checks & hardware settings

Support page on the default Health checks tab. Support page on the default Health checks tab.
Figure 10.1. Support page on the default Health checks tab.

10.1 Health checks

The Support page opens on the Health checks tab. Click Run checks to probe the supported joystick, MSFS SimConnect config and reachability, X-Plane reachability, and the runtime state. Rows update independently and use PASS, INFO, WARN, FAIL, READY, CHECKING, and N/A states so a non-running simulator is not confused with a broken one.

Where a fix is obvious, the row offers an inline action — Install udev rule, Use port :X, Fix…, or Reveal. The Fix dialog shows exactly what will change before it is applied, and never overwrites existing entries.

Fix dialog for SimConnect config install. Fix dialog for SimConnect config install.
Figure 10.2. Fix dialog for SimConnect config install.

10.2 Settings hardware

The Settings page's Hardware tab hosts Invert axis polarity and the live drag-pad polarity test. Different production runs of the FFB2 read polarity differently; the test verifies which way yours runs by driving the stick from a 2-axis drag-pad in real time. Click Start, move the puck, click Stop, then answer “Did the stick follow the puck?” — Yes makes no change, No auto-flips the toggle. The toggle is install-level and flips both pitch and roll axes together.

Settings hardware tab — polarity, software-blended periodics, and hardware-effects probe. Settings hardware tab — polarity, software-blended periodics, and hardware-effects probe.
Figure 10.3. Settings hardware tab — polarity, software-blended periodics, and hardware-effects probe.

10.3 Software-blended periodics

The bridge has two ways to dispatch periodic and one-shot effects to the FFB2. Hardware mode — the fresh-install default — uses raw HID/PID force output directly on the SideWinder FFB2, with DirectInput kept as a compatibility fallback where needed. Current Windows builds keep that topology deliberately small: one vector constant, one two-axis spring, and a lazy three-slot periodic pool. The firmware still drives periodic waveforms at native rate; the bridge reuses those physical slots for runway, engine, buffet, and one-shot cues. Software-blended periodics, on the same Settings → Hardware tab, keeps only the continuous force / centering hardware path and synthesises periodic / one-shot cues in C# at 200 Hz, folding the result into the constant-force outputs.

Hardware mode is crisper and lower-latency on the highest- frequency effects because the firmware drives them faster than the bridge's tick rate. Software blending is the compatibility fallback for failed hardware probes, classified hardware-effect crashes, or users who deliberately prefer it; a generic unclean exit does not force software blending by itself. Its high-frequency edges can feel a little softer. Restart-required either way — the dispatcher reads the mode at startup. Use Test hardware effects to try the compact hardware topology safely in a separate worker process.

Linux actions that write system paths route through pkexec. Exit codes: 0 = success, 126 = user dismissed the prompt, 127 = auth failure / no polkit agent.

Chapter 11Mock Sim

Mock Sim page. Mock Sim page.
Figure 11.1. Mock Sim page.

Mock Sim is a bench-test mode for the force pipeline. Enable Mock Sim from the prominent row at the top of the page, then use the normal Arm button in the top strip. The Dashboard and status strip identify the source as a demo rather than a live sim.

The scenarios are intentionally exaggerated so each force family is obvious on the stick: takeoff roll, brake shudder, turbulence, flap buffet, spoiler buffet, stall buffet, overspeed buffet, and rate damping. They are demos, not tuned aircraft profiles.

Scenario preset bar. Scenario preset bar.
Figure 11.2. Scenario preset bar.

The Direct stick test moves the spring centre directly: drag the dot and the physical stick should chase it even at 0 KIAS. This is the fastest way to prove the force path, centring spring, and polarity before flying.

Turning Mock Sim off stops force output, resets every mock input, and returns the bridge to Live. If a real simulator is connected, the page locks out with an explanatory banner so live telemetry remains the only source.

Lockout banner. Lockout banner.
Figure 11.3. Lockout banner.

HelpHelp & tour

Help page — Start tab with setup status, get-flying checklist, tuning order, and support evidence. Help page — Start tab with setup status, get-flying checklist, tuning order, and support evidence.
Figure H.1. Help page — Start tab with setup status, get-flying checklist, tuning order, and support evidence.

The Help page isn't in the sidebar — it opens automatically on first launch and can be replayed any time via Support → Resources → Replay welcome tour. It's a tabbed action hub. Start shows setup state, the get-flying checklist, the recommended tuning order, and the support-bundle path. Troubleshooting groups common symptoms and points to the page that owns each fix. Support links the Diagnostics tab's support-bundle export with the feedback form. Resources opens the online docs, printable manual, feedback, privacy, and publisher/legal resources. The desktop app uses the bundled PDF manual when it is present and falls back to the online manual when the local file is not available.

SettingsSettings

Settings page — General, Session, and Privacy & diagnostics cards. Settings page — General, Session, and Privacy & diagnostics cards.
Figure S.1. Settings page — General, Session, and Privacy & diagnostics cards.

Settings holds install-level preferences rather than aircraft tuning. General controls close-button behavior, theme, Visual contrast (a Standard / High contrast choice that raises contrast app-wide — surfaces, text, borders, buttons, status lamps, and effect-group colours — without changing any force output), and first-launch UI resets. Session controls opt-in auto-arm (when a supported device and a live sim are both ready) and auto-disarm (when the sim exits); both default off. Hardware holds the force-feedback device picker, effect-rendering mode, the Windows device backend, the Allow unlisted devices (experimental) opt-in, and the polarity / pitch-roll-swap axis test. Privacy & diagnostics opens the local config and diagnostics folders and clears crash reports or log files on this machine.

Chapter 12Force effects reference

Effects shipped with v1.1.2:

  1. Centring spring — stiffens with G-load, deadband scales with airspeed, centre shifts with trim.
  2. Airspeed-loaded pitch force — constant pitch-axis force scaled by airspeed² × elevator offset.
  3. Airspeed-loaded roll force — same model on the roll axis, independently tuned.
  4. Rate damping — opposing force proportional to body-axis rotation rates (p, q); viscous damping.
  5. Stick drop — gravity bias on the elevator at low airspeed; pulls stick forward when parked, fades by Fade airspeed (default 30 kts).
  6. Autopilot follow — optional low-authority spring cue toward the autopilot's flight-director reference. Off by default in current builds.
  7. Runway rumble — continuous periodic force scaled by ground speed and surface type (grass 1.5–1.9×, ice 0.3–0.5×).
  8. Touchdown thump — single impulse on on-ground transition; amplitude scaled by vertical speed and peak tire load (so a greaser feels softer than a firm arrival).
  9. Brake shudder — low-frequency rumble proportional to brake deflection, gated on-ground.
  10. Gear bumps — discrete impulses during taxi under ~40 kt.
  11. Aero buffets — seven sub-effects (stall, overspeed, Mach, spoiler, flap, gear, turbulence) sharing a buffet generator.
  12. Engine rumble — uses the sim's per-engine vibration value when reported (turboprops, jets); falls back to a synthesised RPM ramp when the sim doesn't report it.
  13. Reverse-thrust rumble — rollout rumble when reverse is engaged, scaled by ground speed.
  14. Mechanical one-shots — gear-deploy and flap-step shudders on any transition, both directions.
  15. Sustained aero-drag pitch forces — flap drag, spoiler drag, gear drag, and propwash pitch. Constant pitch biases that mirror the trim-out a pilot feels when configuration changes.
  16. Stall stick-shaker — a sharp continuous buzz gated on the sim's own stall warning, separate from and supplementing the synthesised stall buffet. Off by default on the GA starter; on for the faster starters.
  17. Nosewheel shimmy — a rapid side-to-side (roll-axis) vibration during the ground roll, tuned per aircraft.
  18. Ground-acceleration pitch cue — a pitch-axis cue tied to acceleration during the ground roll.

Two per-aircraft modulators ride on top of the effects above rather than adding new channels of their own. The control-system feel selector (Manual / Hydraulic-boosted / Fly-by-wire) scales the aerodynamic loading and the G-load spring stiffening to match the aircraft's control system (§ 7.5). The undercarriage type selector (Wheels / Skis / Floats) scales the continuous ground-roll rumbles — runway rumble, gear bumps, and nosewheel shimmy.

Everything sums into two outputs (pitch + roll force plus spring parameters). Master gain is applied at the device-output edge to all force output, including spring coefficient; an install-level pitch / roll polarity invert (Settings → Hardware) negates both axes together at the device-output edge if your hardware reads polarity reversed. The Dashboard separates the baseline spring from active dynamic channels so you can see which effects are contributing at any instant.

Trim changes the input to effects 1 (centring spring) and 2 / 3 (airspeed-loaded pitch / roll forces). With Enable trim on, they reference (stick − trim) and the centring target tracks the trimmed position — at a trimmed steady state with neutral stick, the held force eases off and the stick settles at the trimmed position on release. With it off, trim does not move the stick at all. The single switch lives near the top of the Tuning page (elevator-first; aileron strength under Advanced).

Software-blended periodics is a dispatch-mode choice, not a feature toggle. Either mode is fully tuned — same effect catalogue, same sliders. In hardware mode (the fresh-install default) the bridge allocates one vector constant, one two-axis spring, and a lazy Sine / Triangle / Triangle periodic pool. In software-blended mode the bridge keeps only the continuous force / centering hardware path and synthesises periodic / one-shot cues in C# at 200 Hz. Toggle on the Settings → Hardware tab; restart-required.

Pause and stale-telemetry safety sit outside the effect catalogue. Sim pause is instant — the moment MSFS or X-Plane reports paused (or the frozen-frame watchdog detects values that stopped changing), every dynamic force drops to zero on the same tick and the stick holds a neutral default spring until live data resumes. The user-tunable Watchdog sliders control the separate "sim went away entirely" fade timing.

Chapter 13Tuning guide

Verify polarity first via the Settings → Hardware drag-pad polarity test (chapter 10) — if forces are reversed, every gain you set below will fight the wrong sign. Then work through the stages in order, saving the profile after each stage so you can fall back.

  1. Master gain. Start at 100%. Fly cruise, look for motor saturation; if the stick feels harsh at full deflection, drop to 80% and repeat. This scales every force, including the spring. There's no boost above 100% — that's the designed ceiling.
  2. Centring spring. Release the stick at cruise: snappy vs sluggish. Then pull a 2 G turn: does it firm up? If taxi or sim-disconnect centring feels too limp, raise Low-speed spring floor before chasing the G-gain.
  3. Stick drop. Park the aircraft, engine off — the stick should sit slightly forward (modelling gravity on the unloaded elevator). Adjust Force for resting position, Fade airspeed for when it disappears in the takeoff roll. Set Force to 0 for jet / fly-by-wire profiles.
  4. Control-system feel. Set Manual, Hydraulic-boosted, or Fly-by-wire at the top of Stick feel to match the aircraft before tuning gains — it scales aerodynamic loading and the G-load spring, so set it first or your gains chase a moving target.
  5. Trim. Decide whether Enable trim is on. On: trimming eases the held force and the stick settles at the trimmed position — at trim with neutral stick, near-zero force, stick holds on release. Off: trim does nothing to the stick. Set it before tuning loadings; switching mid-tune shifts the felt forces.
  6. Aerodynamic loading. Push the stick without trimming; should feel like air pushing back. Verify across the speed envelope.
  7. Ground effects. Taxi on paved vs grass. Brake. Plant a firm arrival.
  8. Buffets. Power-off stall for the stall buffet; deploy spoilers for the spoiler buffet.
  9. Mechanical one-shots. Retract / extend gear and flaps.
  10. Powerplant. Idle vs takeoff power — should feel distinctly different.
  11. Rate damping. If the stick rings back to centre, raise it. Too much and the stick feels dead.

Aircraft-type patterns: light singles want firm centring and moderate loading; aerobatic wants soft centring and low damping; heavy jets want heavy damping and strong AP back-drive; bush / STOL wants low centring base but high G-gain. Start from the built-in starter closest to your aircraft: Cessna 172 Skyhawk (G1000), Daher TBM 930, Beechcraft King Air 350i, Airbus A320neo, or Boeing 747-8 Intercontinental.

Chapter 14Troubleshooting

14.1 Stick doesn't move

In the top strip, confirm in order: (1) the ARM gauge reads ARMED (amber) — not Disarmed or Faulted; (2) the DEVICE lamp is green ("Ready"); (3) the SIM lamp is green ("Sim connected"). A red lamp points to the corresponding row on the Support page's Health checks tab.

14.2 MSFS connects but forces feel wrong

Load the starter closest to your aircraft. Most “wrong” feels come from a profile that was tuned for a different aircraft class. Third-party aircraft occasionally skip implementing standard SimVars — the bridge tolerates that (missing vars default to zero), but effects that depend on them will go quiet.

14.3 Tray icon doesn't appear (Linux)

Some desktops don't ship a tray host out of the box — GNOME Wayland is the big one. The bridge detects this and shows a banner explaining that close will quit the app directly instead of hiding. Install AppIndicator Support on GNOME to get a tray back; KDE, Xfce, Cinnamon, MATE, Budgie work out of the box.

14.4 Windows hardware-mode crash after arming

Earlier builds could crash on some Windows / FFB2 stacks because hardware mode created a large retained DirectInput effect table. This was a bridge architecture bug, not MSFS or bad firmware. The current hardware path uses one vector constant, one two-axis spring, and a lazy three-slot periodic pool, with raw HID/PID as the default SideWinder FFB2 path and DirectInput as fallback. Version 1.0 also resets the raw HID/PID effect table before rearming after a simulator disconnect. If a current build still crashes in hardware mode, run the Test hardware effects probe on the Settings → Hardware tab and switch to Software-blended periodics if the bridge offers that recovery.

14.5 Crash on launch

Next launch shows a crash-report dialog with the stack trace and an Open feedback form button that pre-attaches the crash log. If the app crashes before the dialog appears, pull the log by hand from %LOCALAPPDATA%\ffb-bridge\crashes\ (Windows) or ~/.local/share/ffb-bridge/crashes/ (Linux).

14.6 Forces disappear after pause or a long stutter

Current builds target this directly. MSFS pause and Active Pause suppress dynamic effects immediately, hold a neutral default spring while paused, leave springs playing through quiesce where possible, and reupload spring parameters before replay after quiesce. If roll or pitch force still feels absent after resume, export a support bundle right away and note what the Dashboard showed under stick activity.

Chapter 15Support bundles

A support bundle is a single ZIP produced by Diagnostics → Support bundle. The ZIP contains, and only contains:

  • sysinfo.txt — OS, kernel, distro, CPU, RAM, .NET version, locale.
  • session.log — full event log for the current session.
  • last-crash.log — crash log if one exists.
  • doctor.json — last Support-page scan in machine-readable form.
  • tunables.json — the active profile at export time.
  • hardware-settings.json — hardware backend, smoothing, polarity, axis-swap, and compatibility settings.
  • simconnect.txt — MSFS SimConnect path and contents, with IPs redacted.

Limits: 50 MB compressed total, 5 MB per entry, 30 entries max, 20 MB uncompressed total, UTF-8 text only (plus the XML). A typical bundle is under a megabyte.

The bundle never leaves your machine automatically — you choose when to attach it to a feedback report, and whether to send it.

Export flow — Diagnostics button, then the banner with filename and feedback-form link. Export flow — Diagnostics button, then the banner with filename and feedback-form link.
Figure 15.1. Export flow — Diagnostics button, then the banner with filename and feedback-form link.

Chapter 16Licence and disclaimer

FFB-Bridge binaries are proprietary Rohsam Inc. software provided under the FFB-Bridge End User Terms and offered as-is with no warranty. Use at your own risk — the bridge drives physical hardware and bugs can produce unexpected forces. Treat every arm as a “hands clear” moment.

FFB-Bridge is published by Rohsam Inc. and is independent of Microsoft and Laminar Research. “Microsoft Flight Simulator”, “SimConnect”, “Sidewinder”, and “X-Plane” are trademarks of their respective owners; they appear here for the sole purpose of identifying compatible products. Nothing on this page implies endorsement by either company.

The full FAQ and privacy policy live at ffb-bridge.com/#faq and ffb-bridge.com/privacy.

End of manual. Feedback on any section — text, figures, or tuning advice that didn't help you — ffb-bridge.com/feedback.