Releases: muchimi/JoystickGremlinEx
GremlinEx WASM module for MSFS
WASM module for MSFS 2025.
Unzip to your community folder.
This module is a necessary bridge component for GremlinEx to be able to use Simconnect to connect to Microsoft Flight Simulator.
Project and source code:
https://github.com/muchimi/JoystickGremlinBridge
13.40.16ex m72 (pre-release/release candidate)
Test releases
If you are interested in test releases which are more on the bleeding edge and include all the latest fixes and features, please visit the
Click here to access the test release repository containing the most up-to-date pre-release GremlinEx versions
Major new features in 13.40.16ex
-
New containers (switch, tick)
-
Axis curve and calibration can be applied to the input before any further processing and the curve is mode specific.
-
Conditions can be applied to the container or individual actions concurrently.
-
OSC multi-parameter mapping - support for XY pads and other multi-parameter OSC messages for glass surface inputs.
-
Direct Microsoft Flight Simulator 2020/2024 control via the SimConnect API and a custom WASM module to map to internal L-var and execute RPN calculator expressions
-
Python 3.13.2 64 bit platform
General feature set
- Designed for home cockpits with a high count of mixed input devices from different manufacturers and mixed HID compliant controller types
- Support for network based studio and stage management control systems like Korg, TouchOSC, OpenStage, Stream Deck, Loupe Deck using OSC (and if needed MIDI) protocols to work as game input controllers for axes and buttons and hats. These non-typical control systems easily provide GameGlass type experiences and support phones and tablets and networked touch screens, as well as fader / knob / button based media studio systems. As of m36, supports OSC output from GremlinEx at the API level.
- Support for multiple concurrent networked GremlinEx instances for remote control (control can be projected to another computer).
- Support for complex keyboard combinations, including unusual keys like F13 to F25 and sophisticated trigger based on the latching of multiple and uncommon keys
- Support for Microsoft Flight Simulator 2024 including RPN expressions. GremlinEx can control MSFS via Simconnect and a custom WASM module (must be added to the Community folder) and send linear and momentary actions from any GremlinEx triggers.
- Includes a wide range of mapping functionality, and for more complex/logic based scenarios, user plugins for full python based scripting
- Support for multiple TTS voices using the Microsoft Text to speech API including playback rates
- Support for any audio file playback
- Support for hierarchical modes
- Support for VJOY (virtual joystick)
- Support for Virtual gamepad X-Box 360 controller (via VIGEM) virtual outputs supporting games that only work with console controllers
- Support for HIDHide to only expose mapped devices to the target application and work within the limitations of the game's understanding of multiple input controllers.
- Sophisticated axis curving options including curving of input axis data and further filtering by individual mappings
- Internal sorting of devices to your preference (note, this does not change Windows devices but changes how you interact with them within GremlinEx)
- 64 bit / recent version of Python and Windows support
- New containers and actions applicable to the most common input mapping use cases that can handle simple to very complex mapping for more difficult scenarios like gated axis and mapping of multi-way hardware switches that do not trigger in some positions. Containers group actions together and support an array of output features, such as chaining, sequence (macro), long/short press, axis trigger mapping based on gates and ranges and direction of movement.
- Support for custom user scripts and actions using Python user plugins with enhanced decorators, including two way OSC communication for glass surface output.
- Per device calibration and curvature tools, along with further curve axis refinements.
- For linear inputs, advanced mapping through the gated axis action using a more visual programming of the axis range. Actions can be coded based on the movement of the input, gate crossing and what subrange was entered, and GremlinEx is aware of the direction of travel as well so triggers can be different based on the direction of travel.
Requirements
GremlinEx is written in Python and C++. It is self-contained as a packaged EXE that includes Python runtimes. Highly recommended to use HIDHide and VIGEM for additional functionality and hardware cockpit management. Requires VJOY and Windows x64 10 or 11.
It is highly recommended to use HIDHide along with GremlinEx to simplify game management and avoid detection conflicts in games.
Supported input devices
GremlinEx supports any DirectX (DirectInput) compliant HID controller which is most joysticks/throttles/wheels/pedals, up to 128 buttons, 8 axes and 4 hats each.
Gremlin also supports the OSC and MIDI protocols to enable over the network input from glass surfaces (via, for example, Touch/OSC, OSC/Pilot and open source software using the OSC protocol). While OSC and MIDI are music and stage protocols, the same controllers used for stage management are also very effective for game controls because they also use knobs, faders and buttons. Most are programmable and can be controlled via a touch screen which enables glass surfaces to be used by GremlinEx. Both protocols enable the use of StreamDeck and LoupeDeck and traditional MIDI controllers for input like the KORG midi and other pad control systems.
GremlinEx is vendor agnostic and does not require any vendor software provided the device reports to Windows as an HID joystick, or uses the OSC/MIDI protocols over UDP.
GremlinEx can also use another GremlinEx client on the network as input, itself connected to hardware inputs not visible by the host computer. This feature is solely for the purpose of supporting more complex home cockpit setups where more than one computer is involved and input ports are limited.
Supported output devices
GremlinEx supports VJOY virtual joysticks, VIGEM xbox virtual game controllers, the SimConnect API for MSFS and it can send keyboard and mouse events to applications running on the GremlinEx machine. GremlinEx also supports TTS (text to speech) and can play audio files based on triggers. GremlinEx can also send OSC commands via custom user scripts for two-way communication with controllers/glass surfaces.
License
GremlinEx is open source, for the community, based on prior work and other open source libraries. It is licensed via a GPL license.
Pre-release and RC
I use pre-releases to issue test versions that may include some bugs or proposed fixes to reported bugs. Once a pre-release is stable and mature enough, it will move to RC status.
Thanks for your patience.
Discord server:
I created a discord server for discussion to make tracking various questions and suggestions easier. Please continue to use issues in Github to report bugs/issues.
Documentation
Please consult the documentation. Documentation is still a work in progress.
Current test (work in progress/wip) version
This version is a work in progress and may have unfinished/unpolished new features and fixes to existing features. I do use the WIP version as my daily driver so very obvious issues are fixed rapidly as they are uncovered. Still, this version is called the dragon version due to potential new features introduced that are incomplete. Reasonably safe for the adventurous type.
https://github.com/muchimi/JoystickGremlinEx/releases/tag/test
Patches
(m72)
- New: support for OSC multi-parameter messages - XY pads and other OSC messages with more than one value are supported
- New: move to Python 3.13.2
- Improved: "output" verbose mode to diagnose GremlinEx mapping output (warning, log heavy, impacts performance, troubleshooting only).
- API: Event data includes an optional override input type to simplify dynamic behavior mapping (linear vs momentary)
- Fix: macro keyboard output uses the correct internal API call to support remote control output - had been broken by a prior optimization
- Fix: mode switch action reverting to a default settings in certain conditions
- Improved: performance optimization related to logging (removal of 476 calls)
(m71)
- New: Tick container. The tick container is a container that triggers actions at regular ticks on an axis. The actions can be different based on the tick crossing direction.
- New: Stepped Axis mode in Vjoy Remap. When attached to a button, this mode allows the action to set a VJOY axis value based on configurable ticks. The mapped button is the tick "up" (increase). The latched button defined in the action is the tick "down" (decrease) button. The ticks are configurable to any position on the axis. Use this mode to easily set axis values based on an up/down scheme.
- Improved: Settings tab has new preset buttons to setup default startup VJOY axis values at profile start.
- Fixed: Gated axis will now send a button event on range enter/exit triggers instead of axis triggers. This was confusing actions added to these triggers because they were never seeing a button input, so ignore the trigger completely.
- Improved: Gated axis ranges now also have a delay entry for the triggers that are momentary (exit/enter). The delay, as with normal gates, is the time between a press and a release.
- Fixed: Simconnect connection start/stop behavior not reconnecting, causing errors if MSFS is not ready/running, or entering in some cases into a race condition with the WASM bridge module. Tested with MSFS 24 beta patch. WASM is a release attached to this project.
- Fixed: Simconnect WASM (c++) - alive ping no longer sends the LVARs.
- Fixed: various UI fixes and exceptions.
(m70)
- Improved: Options button added to main toolbar.
- Improved: Options dialog ha...
13.40.13ex (h)
13.40.13ex release.
NOTE
this version has been superseded by pre-releases for 13.40.14ex. All releases, including pre-releases can be found here:
https://github.com/muchimi/JoystickGremlinEx/releases
See changelog for more detailed list of changes.
- Adds version checking of dependent DLLs and drivers.
- improved handling of missing device or physical device changes at runtime
- reworked device information dialog
- improved Directinput event spamming at design time for noisy hardware (UI will ignore rapid-fire events)
- new verbose option to enable detailed log tracking around events received and processed by GremlinEx (use with caution - slows GremlinEx down considerably due to the trace outputs - use only for debug/diagnostics)
- improved icon file search algorithm in packaged (exe) format
- changed directinput dll interface to poll mode by default (as most HID game devices don't support buffered mode) - this eliminates a directinput error message when attempting to connect using buffered mode
- changed directinput dll debug output to dinput_debug.txt
GremlinEx m76 test version
Downloads
Available downloads for current test versions are located at the bottom of this page. Scroll all the way down to assets.
Dragons Ahead!
DRAGONS AHEAD: Test versions are active development builds for specific features and bug fixes. As such, the versions here may be more prone to issues. Please consider this before using. However, these versions also have the latest features and bug fixes, including desirable ones perhaps not available yet in the main releases.
Support/comments
Please join our Discord server for support, questions, feedback, and comments. discord server
Current test releases:
(m76T185)
See updated readme file for patch notes.