Changelog
What changed in each public beta. The current build is v1.0.0-beta.10 — entries are most-recent first. Every release is also announced by email to subscribers.
v1.0.0-beta.10
Fixed
- Windows hardware-mode crash during active flight.
Some Sidewinder FFB2 users could run the bridge in hardware
mode for a while, then crash inside Windows'
pid.dll/ DirectInput stack as dynamic effects were allocated or replayed. This was not an MSFS problem and not evidence of bad Sidewinder firmware. Root cause was our architecture: the bridge treated every logical simulator cue as its own retained DirectInput effect, creating a large physical effect table on an old HID/PID stack. Beta.10 replaces that with a compact hardware topology validated in live MSFS flight. - Hardware probe no longer needs an active flight. Doctor's Test hardware effects button now launches an out-of-process probe for the same compact topology the bridge uses in production. A native DirectInput crash takes down only the probe worker, not the bridge UI.
Changed
- Compact DirectInput hardware mode. Windows
hardware mode now allocates one vector constant, one two-axis
spring, and a lazy three-slot periodic pool
(
Sine,Triangle,Triangle). The full logical effect set is still present — runway, gear, brake, engine, buffets, and one-shots are scheduled through the reusable pool instead of retained one-for-one. - Software-blended periodics remain the safety fallback. If a particular Windows driver stack still crashes, the next launch can quarantine that install to software blending. In normal beta.10 use, leave hardware mode on; it is the tested, crisper path.
Notes
- This release is about stability first. The new hardware path may feel slightly different from earlier builds because effects are scheduled through fewer physical slots. Use profile tuning for feel adjustments before reaching for software blending.
v1.0.0-beta.9
Fixed
- Quit-time crash on Windows. A small
number of testers were seeing the bridge die with a Windows
Error Reporting popup citing
0x80131506— the .NET runtime's "fatal internal error" code — when they clicked Quit or closed the window. Root cause: the UI thread and the runtime's control loop were both calling into DirectInput at the same moment on shutdown, and the COM marshaller eventually noticed and tore the process down. All DirectInput access now serialises through a single lock at the device boundary, so the two threads can never race the marshaller. The signature of the bug is now extinct on the dev's stick. - Stick goes silent the moment you click Quit. Some testers were reporting that quit-time effects (rumble, buffet) still played out for ~32 seconds after the bridge closed. Beta.8 had attacked the same symptom with a driver-level halt-all command, but the per-effect cleanup that ran afterwards was, on this driver stack, blocking each call for the effect's full firmware playback duration — so the halt fired, then the process hung silently in cleanup while the firmware finished its tail. The shutdown path now skips per-effect work entirely and uses two device-level commands (halt-all + reset firmware effect table) that return immediately. Stick goes quiet and holds centre cleanly.
Changed
- Hardware-mode FFB is the default again. Beta.8 had set software-blended periodics as the defensive default; with the rationale resolved, hardware mode goes back to being the fresh-install default — lower latency, firmware-generated waveforms, no CPU-side synthesis. Existing users who were on blending only because beta.8 put them there are migrated to hardware mode once on first launch of this build. If you prefer software blending — you simply like the feel — Doctor → Hardware compatibility still has the toggle and your choice will stick. The auto-migration only runs once per build.
Internal
- The ffb-probe diagnostic CLI was extracted into its own repository with full git history preserved. It's still the same tool — published at ffb-bridge.com/probe — and the public download endpoint hasn't moved.
v1.0.0-beta.8
New
- TrimRelief — alternate trim mode. A new model for how trim and stick force interact. With TrimRelief on, airspeed loading is computed against (elevator − trim) instead of total surface deflection, and the spring centre tracks trim with the same authority. At a trimmed steady state with neutral stick: zero felt force, stick holds at the trimmed position on release. This matches how a real cable-rigged stick behaves and how XPforce / FSforce model the same idea. Default off — existing profiles and the legacy centre-relocation TrimFeel mechanic stay exactly as they were. Toggle on the Tuning page under Stick feel; six new unit tests + six pipeline integration tests pin the behaviour. Patrik (FB-0002) flagged this as the missing capability vs other FFB tools — thanks Patrik.
- Software-blended periodics — defensive default in beta.8, reverted in beta.9. An alternative dispatch mode that allocates only four mandatory hardware effects (pitch + roll constant and spring) and synthesises every periodic, one-shot, and buffet in C# at 200 Hz, folding the result into the pitch and roll constant-force outputs. Plays every effect concurrently regardless of how many slots the firmware exposes. Beta.8 made it the fresh-install default; beta.9 flipped back to hardware mode. Software blending is still available — Doctor → Hardware compatibility, restart-required.
Fixed
- Effects no longer play out their full duration on
quit. A few testers reported that quitting the
bridge mid-flight left rumble / buffet effects audible on
the stick for ~32 seconds — the natural play length of
the firmware's effect timer. The shutdown path now sends
a driver-level
DISFFC_STOPALLbefore releasing the device, halting every effect immediately. Distinct from the older per-effect Stop, which on some stacks doesn't halt periodics already playing. - Native crashes no longer abandon effects.
The Vectored Exception Handler that catches access
violations now sends
DISFFC_STOPALL + DISFFC_RESET + Unacquiresynchronously before the process dies. So if the bridge AVs deep in the driver, the firmware effect table is cleaned up and the next acquirer (the bridge itself, on relaunch) starts from a known-good state instead of inheriting whatever forces were live at the moment of the crash. - Stick stays firmly centred in every non-driving state. Disarm, paused sim, sim main menu, sim loading, FAULTED — all paths that previously could leave the stick limp now hold it firm at centre. The pipeline's spring fades cleanly to a non-zero baseline whenever telemetry is unavailable, instead of dropping to zero alongside the dynamic forces.
- Crash dialog offers one-click recovery. The crash-report dialog can offer a Switch to software-blended periodics button when relevant. One click flips the preference and the next launch boots in the alternate dispatch mode without you having to touch Doctor.
Removed
-
The user-facing effect-count fallback
(and its
FFB_BRIDGE_MAX_EFFECTSenvironment variable, briefly shipped in beta.7) — software blending dominates it. The fallback allocated five hardware effects, picked the loudest one in any given tick, and dropped the rest. Software blending allocates four and plays every effect concurrently. ExistingMaxEffectCountvalues inhardware.jsonauto-migrate toUseSoftwareBlending = trueon first launch; the legacy field is dropped on next save.
Internal
- Control-loop tick rate auto-bumps from 50 Hz to 200 Hz when software blending is on — the synthesised periodics would alias hard at 50 Hz against 33 Hz waveforms. Hardware mode stays at 50 Hz.
- Soft compressor on the device-output edge replaces a hard clamp. Identity within ±0.9, tanh asymptotic to ±1 beyond — preserves direction and relative magnitude when multiple effects sum past saturation, instead of letting the strongest effect crush the rest.
- Live force-output card on the Mock SimConnect page so you can watch TrimRelief and the spring centre track trim in real time without flying.
v1.0.0-beta.7
Fixed
- The “works once, then crashes when I click
Arm” bug. A handful of beta testers reported
the bridge running cleanly on the first launch, then
crashing on every subsequent Arm — until they unplugged
the stick or rebooted. Root cause: the FFB2's Windows
driver retains state across processes. When a previous
run exited uncleanly (a crash, a forced kill, a power
loss), the next run inherited the polluted state and
crashed when it tried to allocate fresh effects. The
bridge now resets the driver's effect state on every
connect and disconnect, so a previous run cannot poison
the next one. Verified on the workbench: forcing a kill
mid-session and re-launching no longer reproduces the
crash. If you'd been working around this with
FFB_BRIDGE_MAX_EFFECTS=5, you can remove the environment variable on beta.7.
Internal
- New ffb-probe diagnostic CLI for investigating force-feedback joysticks the bridge does not yet support. Built as part of ongoing work on other FFB sticks; not user-facing yet, but the same probe is what isolated the FFB2 driver-state bug fixed above.
v1.0.0-beta.6
New
- Stick drop physics. A new effect models the gravity bias that pulls the yoke forward in a non-power-assisted aircraft when there's no air over the elevator — the constant forward pull you feel parked or taxiing in a Cessna. Fades to zero by a tunable Fade airspeed (default 30 kts). Find it on the Tuning page under Stick feel → Stick drop. Defaults are GA-friendly; drop Force toward 0 to silence on jet / fly-by-wire profiles.
- Live polarity test on Doctor. A Hardware-compatibility card at the top of the Doctor page hosts an X-Y drag-pad that drives the stick in real time. Click Start, drag the puck, click Stop, then answer “Did the stick follow the puck?” — Yes makes no change, No auto-flips the install-level polarity invert. Replaces the old “imagine your stick mirrored” flow.
Changed
- The Invert axis polarity toggle now flips pitch and roll together, matching how FFB2 firmware quirks actually present. Existing per-pitch settings are migrated forward on first launch.
- Per-slider and per-section reset arrows on the Tuning page, plus a Discard button on the Profile card — easier to back out of an experiment than reload the profile.
- Mouse wheel on a slider now requires focus. Hovering and scrolling no longer captures the wheel, so you can scroll the Tuning page past hovered sliders without nudging them.
- Stick-drop force range extended 0–0.5 → 0–1.0 for hardware that needs more pull.
Fixed
- Doctor's Fix-config dialog no longer claims MSFS ships without a TCP SimConnect endpoint — the wording predated the Proton-side listen-on-:500 reality.
- Refresh build (2026-04-27). Welcome dialog step 2 reworded to drop the stale “Arm forces with SPACE” copy left over from before beta.5 dropped the global hotkeys; reads as “Arm the stick” with cockpit-gauge top-strip prose now. Profile dropdown's trigger button and popup widths now match flush instead of misaligning by 8–10 px when the dirty-dot column collapsed; small vertical gap between the trigger and the popup so they read as separate surfaces. Same beta.6 version; if you installed before this date, re-download from /download for the polish.
v1.0.0-beta.5
New
- Slider interactions overhauled: click anywhere on the track jumps the thumb to that point; drag works as before; mouse wheel and arrow keys nudge the focused slider. Per-slider dirty dots, focus rings, and unified slider chrome across every page.
Removed
- Space=Arm and D1–D8=Navigate
global keybindings dropped. They hijacked the spacebar
and digit keys when a TextBox owned focus (saving a
profile name, for example), and only fired when the
bridge window was foreground anyway — rare in practice
because the sim is foreground while you fly. The tray
menu still exposes Arm / Disarm / Quit.
Escto cancel the arm-confirmation dialog stays.
v1.0.0-beta.4
Fixed
- Hotfix: defensive
DIPERIODICstructure init plus a native SEH crash filter on Windows. A beta-tester report flagged an access violation deep in DirectInput'sCreateEffecton certain Win11 builds we couldn't reproduce locally. Belt-and-braces fix — zero-init the struct ourselves before the API call (the spec says we have to anyway), plus a structured-exception filter that catches the AV at the boundary and surfaces it as a recoverable Faulted state instead of taking the process down.
v1.0.0-beta.3
New
- Cockpit-gauge top status strip. The arm toggle, sim / device / mode lamps, profile picker, and Tune / Save button moved out of the Dashboard and sidebar into a single full-width strip at the top of every page. The strip is the operational cockpit; the Dashboard is now purely a telemetry surface.
- FAULTED state. When a prerequisite drops while armed (stick unplugged, sim crashed), the gauge flips to FAULTED, forces stop, and the matching lamp turns red. Click the gauge to acknowledge and reset — the prerequisite has to be back before re-arm is allowed.
- Profile UX clarity round. Per-slider dirty dots on the Tuning page; an inline Save / Save as… pair on the Profile card; profile picker dirty dot summarises “this profile has unsaved changes”.
v1.0.0-beta.2
Fixed
- Same-day hotfix: Windows SimConnect
defaults. MSFS 2024 ships
SimConnect.xmlwith an enabled IPv4 entry on port 500 on every install — Steam, Microsoft Store, Proton — but Linux treats <1024 as privileged so MSFS-in-Proton can't actually bind it. The bridge now defaults to127.0.0.1:500on Windows (where it works) and127.0.0.1:5111on Linux (where Proton can bind). Doctor learned to detect the Microsoft Store install at%LOCALAPPDATA%\Packages\Microsoft.Limitless_8wekyb3d8bbwe\.
v1.0.0-beta.1
Initial public beta
First tagged release. The desktop app drives a Sidewinder Force Feedback 2 from MSFS 2024 (SimConnect TCP) and X-Plane 11 / 12 (UDP RREF, no plugin) on Windows 10+ and modern Linux. Thirteen force effects with per-effect gain sliders + master gain; arm / disarm safety model with first-launch acknowledgement; tray-resident with hide-to-tray on close; Diagnostics + Doctor pages for triage; built-in Cessna 172 starter profile. Public site live at ffb-bridge.com with downloads gated behind an emailed token.
Every release is also announced by email to subscribers. If you signed up for the beta, you're already on the list.