Joystick Gremlin Plugin
Joystick Gremlin is a joystick remapping tool, not a game. It operates at the device level, so bindings exist independently of any game. Its mode system, response curves, and scripting make it popular in the sim community.
Because JG works below the game layer, importing your JG profiles alongside your game profiles gives you a complete picture of every button's purpose, including bindings that no individual game knows about. Together they form a single, unified view of your HOTAS binds across all sources.
Website: https://whitemagic.github.io/JoystickGremlin
How the Plugin Works
Joystick Diagrams reads your Joystick Gremlin profile XML file. Because JG supports very complex setups, not every configuration type can be fully automated. The plugin uses JG's built-in Action Description feature to handle those cases.
<remap> now covers both buttons and axes, so Gremlin macros and
game-native bindings end up on one diagram. Feedback on
Discord
shapes what we tackle next.
vJoy Routing (new in 2.2)
Joystick Gremlin typically sits between your physical stick and the game, re-emitting inputs
through a vJoy device. Before 2.2, that meant two diagrams: the physical
stick with Gremlin labels on one side, the vJoy device with DCS action names on the other.
Neither was useful on its own.
Starting in 2.2, the plugin reads every <remap> action (buttons
and axes both) and declares a route: “commands bound to vJoy Device N /
Button X (or Axis A) should display on the physical input that triggered them.”
Joystick Diagrams applies those routes before rendering the diagram. The result: one diagram per
physical device, showing both your Gremlin macros and the downstream game actions they fire.
How conflicting bindings combine (e.g. a Gremlin macro name next to the DCS action it produces) is controlled by the alias conflict strategy on the Merging Bindings page. Qualifiers derived from Gremlin container shapes (tempo, double-tap, smart toggle, conditions) show up in the merged text so you can tell a short-press from a long-press at a glance.
The underlying mechanism is documented for plugin authors on the Input Routing API page.
What's Supported
Everything the plugin reads comes from Action Descriptions in your Joystick Gremlin profile. The Action Description is the text that appears on the diagram for that input. Inputs without an Action Description are skipped on export.
Buttons
Fully supported. Label each button binding with an Action Description and it will appear on the diagram. Buttons with no Action Description are skipped.
Axes
Fully supported. Give the axis an Action Description in Joystick Gremlin and it will appear on the diagram. X, Y, Z, Rx, Ry, Rz and Slider are all recognised. Axes without an Action Description are skipped.
Cross-device axis routing via Gremlin's <remap axis=…> is also supported
as of 2.2.0: routed axis bindings surface on the physical axis that fed them, the same way
button routing works. See Input Routing for the full
mechanics.
Hat Containers (hat_buttons)
Supported. Each direction's Action Description is placed at the matching position on the diagram. 4-way hats (N/E/S/W) and 8-way hats are both handled.
Virtual Hats (basic container with <virtual-button>)
Supported. The container's top-level Action Description (or the joined inner descriptions) is used as the label for each enabled virtual direction (north, north-east, east, and so on). Containers with no description are skipped.
<axis> or <button>
element itself. For hats, tempo containers, conditional bindings, and any container-wrapped
action, the description goes inside the <action-set> or container. This is the
single most common reason something doesn't appear on the exported diagram.
Setup
In the Joystick Diagrams plugin configuration, select your Joystick Gremlin
profile.xml file. This is the profile you saved from within the Joystick Gremlin application. After
selecting the file, click Run Plugin(s) to process it.
For full step-by-step instructions, see the Setup Guide.