HangarControl Stream Deck Plugin

Complete Setup & Configuration Guide

Overview

The HangarControl Stream Deck plugin transforms your Elgato Stream Deck into a fully integrated flight simulator control panel. Fire SimConnect events, write LVars, send keyboard shortcuts, toggle flags, monitor simulator values in real time, and display live data β€” all directly from your Stream Deck buttons and encoders.

Unlike generic Stream Deck simulator plugins that rely on pre-built profiles, the HangarControl plugin connects to your running instance of HangarControl and has direct access to the full SimConnect catalog, LVar bridge, X-Plane command system, and HangarControl's internal flag and conditional action engines. If HangarControl can do it, your Stream Deck can trigger it.

How It Works

The plugin operates as a bridge between the Elgato Stream Deck software and HangarControl:

  1. The Stream Deck software loads the HangarControl plugin and provides button/encoder events.
  2. The plugin connects to HangarControl via a local WebSocket on port 19850.
  3. When you press a button or rotate an encoder, the plugin sends the configured action to HangarControl.
  4. HangarControl executes the action (fires the SimConnect event, writes the LVar, sends the key, etc.).
  5. For display and state monitoring, the plugin polls HangarControl at 250ms intervals for live simulator values.
ℹ️ Local Icons Work Offline The plugin ships with a built-in icon pack that loads directly from disk. Icons display on your Stream Deck keys even when HangarControl is not running. Only action execution and live data require an active HangarControl connection.

Supported Hardware

Device Buttons Encoders LCD Touch
Stream Deck Mini 6 keys β€” β€”
Stream Deck MK.2 15 keys β€” β€”
Stream Deck XL 32 keys β€” β€”
Stream Deck + 8 keys 4 rotary encoders 4 LCD touch strips
Stream Deck Neo 8 keys β€” β€”
Stream Deck Pedal 3 pedal keys β€” β€”
πŸ’‘ Stream Deck+ Tip If you have a Stream Deck+, the encoder and LCD touch strip features unlock powerful capabilities like scrollable value adjustments (heading, altitude, VS, COM frequencies) and live cockpit readouts directly on the touch display. The Encoder action type is specifically designed for these controls.

Installation

Requirements

  • HangarControl β€” installed and registered (trial or full license)
  • Elgato Stream Deck software β€” version 6.5 or later, installed and running
  • Windows 10 or later β€” the plugin is Windows only
  • A Stream Deck device β€” any model (Mini, MK.2, XL, +, Neo, Pedal)

The plugin runs on Node.js 20, which the Stream Deck software supplies. There is nothing extra to install.

Installing the Plugin

1 Open HangarControl Settings

Launch HangarControl and click βš™ Settings from the Home View sidebar, or use the gear icon in the header.

2 Locate the Stream Deck Plugin Section

Scroll down to the STREAM DECK PLUGIN card. You will see the current plugin status and an install button.

3 Click Install Plugin (or Reinstall Plugin)

Click the Install Plugin button. HangarControl extracts the embedded .streamDeckPlugin package to a temporary location and opens it with the Elgato Stream Deck software.

4 Confirm in Stream Deck Software

The Elgato Stream Deck software will display an installation dialog. Click Install to complete the process. The plugin files are deployed to:

%AppData%\Elgato\StreamDeck\Plugins\com.overkillsimulations.hangarcontrol.sdPlugin
5 Verify

After installation, the status in HangarControl Settings should update to Plugin status: Installed βœ“ followed by the installed plugin version. The status keeps checking for up to 90 seconds after you click install, so it turns green as soon as you confirm the Stream Deck dialog. In the Stream Deck software, you should see a new HangarControl category in the action list on the right side.

Verifying Installation

To confirm the plugin is installed and working correctly:

  1. Open the Elgato Stream Deck software.
  2. In the right-hand action panel, scroll down or search for HangarControl.
  3. You should see the available action types: SimConnect Event, SimVar Write, Keyboard Shortcut, X-Plane Command, X-Plane DataRef, Flag Control, Conditional Action, SimVar Display, DCS Command, HC Binding, Encoder Control, HC Window Toggle, HC Service Toggle, and Page Sound.
  4. Encoder Control and SimVar Display only appear when you drag onto a Stream Deck+ dial slot β€” they cannot be placed on a standard key. HC Binding works on both keys and dials.
  5. Drag any action onto a button. If the property inspector (right panel) shows a Connected status at the bottom, the plugin is communicating with HangarControl.
⚠️ HangarControl Must Be Running The plugin connects to HangarControl via WebSocket on port 19850. If HangarControl is not running, buttons will show a ⚠ warning icon and actions will not fire. Icons configured from the built-in icon pack will still display correctly even when HangarControl is closed.

Keeping the Plugin Updated

The Stream Deck plugin is bundled inside each HangarControl release. When HangarControl is updated, the bundled plugin may also be updated with new features, action types, or fixes.

Checking the Installed Version

The STREAM DECK PLUGIN card in Settings shows the version of the plugin currently installed in the Stream Deck software. If it is older than the plugin bundled with HangarControl, the status turns orange and shows both versions, for example Plugin status: Update available (v3.7.1 installed, v3.7.2 ready), and the button changes to Update Plugin. Once the update finishes, the status turns green with the new version number, so there is no need to check inside the Stream Deck software.

Automatic Version Check

Starting with HangarControl v1.19, the application automatically checks whether your installed Stream Deck plugin version matches the version bundled with HangarControl. If a mismatch is detected on startup, you will see a notification prompting you to reinstall the plugin.

Reinstalling After an Update

To update the plugin after a HangarControl update:

  1. Open HangarControl and go to Settings.
  2. If you are prompted that your plugin is out of date, simply go to Settings and click Update Plugin. It takes about 10 seconds and your existing Stream Deck layout is completely untouched. The status line confirms the new version once it is installed.
  3. Confirm the install in the Elgato Stream Deck dialog.

Your existing button configurations and bindings are preserved β€” reinstalling only updates the plugin code, not your layout or settings.

πŸ’‘ Tip If you are prompted that your plugin is out of date, simply go to Settings and click Reinstall Plugin. It takes about 10 seconds and your existing Stream Deck layout is completely untouched.

Getting Started

Adding Actions to Your Stream Deck

1 Open the Stream Deck Software

Launch the Elgato Stream Deck application. Make sure HangarControl is also running in the background.

2 Find the HangarControl Category

In the action list on the right side, look for the HangarControl category. You can also search for "HangarControl" in the search bar.

3 Drag an Action to a Button

Drag the desired action type (e.g., SimConnect Event) from the action list and drop it onto any button slot on your Stream Deck layout. For Stream Deck+ encoders, drag an Encoder action onto one of the four dial positions at the bottom of the layout.

4 Configure in the Property Inspector

When you select the button, the property inspector panel appears below the Stream Deck layout. This is where you configure what the button does, how it looks, and what data it displays. Each action type has its own property inspector with relevant fields.

Connection Status

Every property inspector shows a Status section at the bottom. This indicator shows the real-time connection state between the plugin and HangarControl:

Status Meaning
Connected Plugin is communicating with HangarControl. All features are active.
Disconnected (Icons OK) HangarControl is not running. Local icons still display but actions will not fire and live data will not update.

Property Inspector Overview

The property inspector is the configuration panel that appears when you click on a configured Stream Deck button. While each action type has unique fields, most share a common set of sections:

Section Purpose Available On
Button Press Action What happens when you press the button All button actions
State Toggle Monitor a SimVar and auto-toggle the button's ON/OFF visual state All button actions
Icon (Optional) Choose a built-in or custom icon for the button face (the ON / default icon) All actions
OFF Icon (Optional) Choose a separate icon shown when the button is OFF or a condition is FALSE, with a live preview All actions
Button Appearance Background color, icon size/position All actions
Label Settings ON/OFF text, font, size, color, position All button actions
Live Display Variables Stack additional live SimVar readouts on the button face SimConnect, SimVar, Keyboard, Flag
Status Connection indicator All actions

Action Types

The HangarControl plugin provides fourteen distinct action types, each designed for a specific type of simulator interaction. Choose the right action type based on what you want your button to do.

SimConnect Event

The most commonly used action type. Fires a SimConnect key event (K: event) in Microsoft Flight Simulator 2020 or 2024. This is how you trigger cockpit switches, autopilot functions, lighting controls, gear, and virtually any simulator action that has a named event.

Configuration Fields

Field Description Example
Prefix Event namespace prefix. Options are None, K: (SimConnect event), L: (LVar write), A: (aircraft variable), B: (MSFS 2024 input event), and H: (third-party HTML event). Leaving it on None dispatches the name as a K: event. H:, B:, or None
Event The SimConnect event name. You can type it directly or use the Browse Catalog button to search HangarControl's full event catalog. TOGGLE_MASTER_BATTERY
Value Numeric value sent with the event. Most toggle events use 0. Some events require a specific value (e.g., setting a radio frequency). 0
Momentary Checkbox. When enabled, the button becomes hold-to-run: the event fires with Value on press and with Release Value on release. Off
Release Value (Momentary only) Value sent when the button is released. Useful for controls that must be held, such as a helicopter starter or an engine crank switch. 0
Quick Setup Presets

The SimConnect action includes a Quick Setup section with a Browse Presets button. This opens a searchable catalog of 85 pre-configured common actions across ten categories: Radio Frequencies, Autopilot Toggles, Autopilot Adjustments, Autopilot Displays, Lighting, Electrical, Anti-Ice / De-Ice, Fuel Systems, Gear & Flaps, and Engine Controls. Selecting a preset auto-fills the event name, value, and usually an icon β€” saving you from looking up event names manually.

Custom H:Events

Third-party aircraft (FlyByWire A320, Fenix A320, PMDG 737, etc.) often expose custom H:Events. The SimConnect property inspector includes a Custom H:Events section that shows any custom events registered with HangarControl for the currently loaded aircraft. You can also add your own H:Events here with a name, description, and category.

πŸ’‘ Finding Event Names Use the Browse Catalog button in the property inspector β€” it searches HangarControl's full catalog with thousands of entries, filterable by keyword and by type: K: events, A: SimVars, L: LVars, B: BVars, H: HTML events, and a dedicated PMDG filter for PMDG airliner variables. On SimVar Write, Conditional Action, SimVar Display, and Encoder Control the picker adds an HC Variables filter for HangarControl's own variables. You can also find event names in your aircraft's documentation or on community resources like the MSFS SDK docs.

SimVar Write

Directly writes to simulator variables. Unlike SimConnect Events which trigger actions, SimVar Write lets you set a variable to a specific value. This is essential for working with LVars (aircraft-specific local variables), AVars (standard SimConnect variables), BVars (MSFS 2024 behavior variables), and JVars (MSFS 2024 JavaScript variables).

Configuration Fields

Field Description Example
Type Variable type: LVar (local variable), AVar (aircraft variable), BVar (binary variable), JVar (JavaScript variable), or Custom SimVar for anything you want to address by its full prefixed name. LVar
Name The variable name. Browsable via the catalog button. A32NX_OVHD_ELEC_BAT_1_PB_IS_AUTO
Units SimConnect unit type for the variable number, bool, percent
Action What to do with the value: Set Value (write), Toggle (flip 0↔1), Increment (+), Decrement (βˆ’), or Pulse (set the value, then reset it β€” for variables that expect a momentary trigger). Set Value
Value The value to write (for Set action) 1
Momentary Turns the key into a hold to run control. The Value is written when you press the key and the Release Value is written when you let go, rather than firing once and latching. Ticking this forces the Action to Set on press, because the other actions have no meaningful release behaviour. ticked
Release Value Only appears when Momentary is ticked. The value written the moment you release the key. 0
πŸ’‘ Spring Loaded Switches Momentary is what you want for anything the aircraft expects you to physically hold β€” a helicopter starter, an engine crank, a fire test, a trim hat. Without it the variable latches at the pressed value and the starter runs forever. With it, the switch springs back the instant your finger leaves the key, exactly like the real one.
ℹ️ When to Use SimVar vs SimConnect Event Use SimConnect Event when there is a named event for what you want to do (e.g., TOGGLE_MASTER_BATTERY). Use SimVar Write when you need to directly write a value to a variable (e.g., setting an LVar to 1 on a third-party aircraft that doesn't expose toggle events). Many third-party aircraft require LVar writes for proper interaction.

Keyboard Shortcut

Sends a keyboard keystroke or key combination to the active simulator window. This is the simplest action type and works with any simulator or application. Useful for DCS World, ATS/ETS2, or any scenario where you need to press a key combo.

Configuration Fields

Field Description Example
Key Chord The keyboard shortcut to send. Uses standard modifier notation. Separate modifiers with +. Ctrl+Shift+F, G, Esc

The keyboard action sends a keyDown on button press and keyUp on button release, so you get realistic hold-and-release behavior for keys that respond to hold duration in the simulator.

X-Plane Command

Fires an X-Plane command for X-Plane 11 or X-Plane 12. X-Plane uses a command-based system rather than events, so this action type sends the named command string directly through HangarControl's X-Plane connection.

Configuration Fields

Field Description Example
Command The X-Plane command path, typed directly. The property inspector lists common examples underneath the field. There is also an optional State DataRef below, with a threshold, to drive the button's ON/OFF icon from an X-Plane DataRef. sim/autopilot/heading_sync

X-Plane DataRef

Writes a value to an X-Plane DataRef. DataRefs are X-Plane's equivalent of SimConnect variables β€” they represent cockpit switch positions, system states, and more.

Configuration Fields

Field Description Example
DataRef The full DataRef path sim/cockpit/electrical/battery_on
Value Numeric value to write 1
State DataRef (Optional) DataRef to watch for the key's ON/OFF state. Leave it empty and the key monitors the DataRef it writes to, which is what you want most of the time. sim/cockpit/electrical/battery_on
Threshold Value above which the state reads as ON 0.5

Flag Control

Toggles, sets, or clears a HangarControl flag. Flags are internal boolean variables managed by HangarControl that can be used to build complex multi-button logic. A flag can be checked by conditional actions to create state machines, mode selectors, or multi-step workflows.

Configuration Fields

Field Description Example
Flag Name Name of the HangarControl flag ALT_MODE_ACTIVE
Action Toggle, Set (on), or Clear (off) Toggle
State Var (Optional) What drives the key's ON/OFF icon. Use FLAG:name to have the key reflect the flag it controls, or any SimVar to drive it from the sim instead. FLAG:AP_ACTIVE
Units Units for the state variable number
Threshold Value above which the state reads as ON 0.5

Flag names are case-insensitive. The State Var field is separate from the flag being controlled, so a key can set one flag while showing the state of something else entirely.

πŸ’‘ Flags + Conditional = Power Combine Flag actions with Conditional actions to create sophisticated multi-mode controls. For example, press one button to set a "TAXI_MODE" flag, then have other buttons check that flag via Conditional actions to behave differently depending on the current mode.

Conditional Action

Evaluates one or more conditions and executes different actions based on the result. This is the "if/else" of the Stream Deck β€” when you press the button, the plugin checks the conditions and fires the appropriate action.

Configuration Fields

Field Description
Conditions One or more conditions to evaluate. Each condition specifies a source β€” SimVar, LVar, Flag, DCS Data (a DCS cockpit argument or export key), or HC Variable β€” an operator (=, β‰ , >, <, >=, <=), and a comparison value. SimVar, LVar, and HC Variable conditions also take a units field and have a browse picker; Flag and DCS Data do not use units.
Logic AND (all conditions must be true) or OR (any condition can be true)
Action When TRUE The action to execute when conditions are met. Choose from SimConnect Event, SimVar Write, Keyboard, X-Plane Command, X-Plane DataRef, or Flag.
Action When FALSE (Optional) The action to execute when conditions are NOT met. Same six choices as above, plus No Action.

Conditions are evaluated at press time. You can add multiple conditions using the + Add Condition button and remove them with the βœ• button on each row.

ℹ️ Live Icon Swap A Conditional button doesn't only react on press β€” HangarControl evaluates the conditions continuously and updates the key's visual state in real time. When the conditions are TRUE the button shows its main (ON) icon; when FALSE it shows the OFF icon. See Separate ON/OFF Icons for how to assign them.

SimVar Display

Displays live simulator values on a Stream Deck+ LCD touch strip. Use this to show real-time cockpit data like heading, altitude, airspeed, radio frequencies, fuel quantity, or any readable SimVar, plus DCS export variables and cockpit arguments.

⚠️ Stream Deck+ Only SimVar Display is a dial action. It can only be dropped onto one of the four Stream Deck+ dial slots and will not appear as an option for a standard key. To put a live readout on a regular key, use the Live Display Variables section of a SimConnect Event, SimVar Write, or DCS Command action instead.

Configuration Fields

There are no top-level variable fields on this action. Everything below is configured per text slot, so each of the four slots carries its own copy of these settings.

Field Description Example
SimVar The simulator variable to display, with a browse picker. Supports A: (standard), L: (LVar), and B: (BVar) prefixes, and DCS:<arg_id> for a raw DCS cockpit argument. AUTOPILOT HEADING LOCK DIR
Units SimConnect unit type degrees
Format Display format string. Use {value} as placeholder. Supports zero-padding like {value:000}. HDG {value:000}
Decimals Number of decimal places, from 0 to 3. 0
Font / Size / Weight / Color Independent styling per slot. Weight is Normal or Bold. Font offers the eleven built-in faces plus Custom… for anything installed on your system. Consolas, Bold
X Position / Y Position Where the text sits on the 200Γ—100 strip. 100 / 50
Display Text Slots

You can enable up to four text slots on a single LCD strip. Each slot has its own checkbox, SimVar, units, format string, decimals, font settings, color, and X/Y positioning, so you can lay out a multi-line cockpit readout on one strip. A slot can show static text, a live SimVar value, or DCS data.

Format Tokens
  • {value} β€” the full value
  • {value:0000} β€” zero-padded to the given width
  • {digit:N} β€” the Nth digit of the value, 1-based. This lets you split one value across several slots or several dials. A transponder reading 7200 gives {digit:1} = 7, {digit:2} = 2, {digit:3} = 0, {digit:4} = 0.
DCS Quick Pick

The DCS Quick Pick section gives you a searchable dropdown of DCS export variables. Pick a value, choose which slot to send it to under Apply To, and click Apply β€” the slot's variable, units, decimals, and format are all filled in for you. For a raw cockpit argument instead, type DCS:<arg_id> into the slot manually (for example DCS:404).

Display Background & Icon

The strip has its own background colour picker, plus an optional icon with ON/OFF variants and the same width, height, X, and Y controls used on keys.

Touch Action (Optional)

You can configure an event that fires when the user taps the LCD area, so the display doubles as an interactive control. Enter a SimConnect event name (the browse picker is right there) and a numeric value. This action is SimConnect only β€” if you need a DCS command on the tap, use an Encoder Control dial instead, whose Touch Action supports both.

State Toggle

The display strip has its own ON/OFF state, which drives the icon variant. The Mode dropdown offers No State Change, SimVar Monitoring (watch a State Var against a threshold, same as a key), or Toggle on Touch (flip the state each time the strip is tapped).

DCS Command

Sends a cockpit command to a specific aircraft in DCS World. DCS commands are device-based β€” each switch, button, or lever on an aircraft module is identified by a device ID, command code, and press/release value. The plugin loads DCS aircraft libraries directly from disk, so command browsing works even when HangarControl is not connected.

Configuration Fields

Field Description Example
Source Aircraft Library for cockpit controls driven by device ID and command code. Universal iCommand for global commands such as view and camera control, which are sent by name rather than by device. Aircraft Library
Aircraft (Aircraft Library only) The DCS aircraft module this command belongs to. F/A-18C Hornet
Press Cmd / Release Cmd (Universal iCommand only) The iCommand name exactly as it appears in DCS β€” these are case-sensitive. Release Cmd is optional; leave it blank for fire-and-forget commands. iCommandViewCockpitZoomIn
Command The specific cockpit command. Use the Browse button to open a searchable picker with category filtering. Commands are loaded from the DCS aircraft library JSON files. Master Arm Switch - ARM
Button Mode Momentary sends a press on keyDown and a release on keyUp (default). Toggle alternates between the press value and an off value on each press, with no release sent. Step advances one position per press in a fixed direction. Tumbler cycles through a list of values you define. Momentary
Press Value Value sent when the command is activated. Most switches use 1. Hidden in Step and Tumbler modes, which take their values from the Values list instead. 1
Off Value (Toggle mode only) Value sent on the alternate press to deactivate the command. 0
Direction (Step mode only) CW (next) or CCW (previous) β€” which way the switch advances on each press. CW
Values (Step and Tumbler) The comma-separated list of positions the switch moves through. Take these straight from the DCS Lua defineTumb or defineMultipositionSwitch arguments. Both modes need this list β€” leave it empty and the key sends nothing at all. 0, 0.5, 1
Wrap (Step mode only) Whether the sequence loops back to the start after the last position. Tumbler always wraps and has no Wrap control. No
Universal iCommands

Setting Source to Universal iCommand switches the action away from the aircraft library and lets you send a named DCS iCommand instead. These are the global commands that are not tied to a specific cockpit device β€” view and camera control, and similar functions common to every airframe. Enter the command name exactly as DCS spells it, since iCommand names are case-sensitive, and optionally supply a Release Cmd for controls that need a matching release.

State Monitor

A DCS Command key can drive its own ON/OFF icon state from the sim. The State Monitor section has a Source dropdown with two choices:

Source Field Notes
Cockpit Argument Argument ID The cockpit argument number taken from the aircraft's mainpanel_init.lua. This is not the same file as clickabledata.lua, which is where the command itself comes from.
DCS Export Variable Variable An export key such as GEAR, IAS, or RPM_L. Use the browse button to pick from the export catalog, or type the key directly.

Either source is compared against a Threshold β€” a value above the threshold shows the ON state. Most switches sit at 0 and 1, so the default of 0.5 works. Leave the monitor blank for no state tracking.

πŸ’‘ A State Monitor Keeps Step And Tumbler Honest On a Step or Tumbler key, configuring a State Monitor does more than drive the icon. When live state is available the key works out its current position from the actual reading rather than from an internal counter, snapping to whichever entry in the Values list is closest. That means moving the switch in the cockpit, loading a saved mission, or respawning does not leave the key out of step with the aircraft. Without a monitor the key counts its own presses and will drift the moment anything else touches that switch.
Command Library

DCS aircraft command libraries are stored as JSON files in your HangarControl data folder at:

%AppData%\HangarControl\DCS\AircraftLibrary

The plugin reads these files directly from disk. When new aircraft modules are added to HangarControl, the corresponding JSON files are deployed automatically and appear in the aircraft dropdown without any extra setup.

πŸ’‘ Momentary vs Toggle Most cockpit switches in DCS are momentary β€” they expect a press (value 1) and a release (value 0). Use Toggle mode only for switches that need to stay in one position until pressed again, like two-position toggles where DCS expects you to send the same command with alternating values.

HC Binding

HC Binding hands the key over to HangarControl's own binding engine β€” the same one behind every physical button on your hardware. Instead of one action per key, you get the full press model: short press, long press, double tap, release, hold, and multi-command sequences, with all the same command kinds available to a Honeycomb Bravo button or a WinWing panel switch.

Use this when a single-action key is not enough: a switch that needs one thing on press and another on release, a button that does one job on a short tap and a different job on a long hold, or any key that should run a sequence rather than a single command.

ℹ️ Works on Keys and Dials HC Binding is the only action type available on both standard keys and Stream Deck+ dial slots. On a dial it also exposes rotation, press, and touch configuration alongside the press model.

Configuring an HC Binding

1 Drop the Action

Drag HC Binding onto any key or dial. The property inspector is deliberately short β€” there are no fields to fill in here, because the real editor lives in HangarControl.

2 Click Configure Binding in HangarControl

Press the Configure Binding in HangarControl… button. HangarControl brings up its Stream Deck binding window for that exact key. If HangarControl is not running, the button reports back that it could not connect rather than failing silently.

3 Set Up the Key

The binding window owns everything about the key: the press model, the icon, live readouts, state, and β€” on a dial β€” rotation behaviour. Clicking Configure on the press model opens the standard HangarControl binding editor, the same dialog used for hardware buttons, so anything you can bind to a physical button you can bind here.

4 Save

Close the window to save. The key configuration is pushed straight back out to the Stream Deck, so the icon and any readouts update immediately.

Clearing a Binding

The binding window has a Clear Press Model button. Clearing removes what the key does on press but keeps its icon and readouts, so you can strip the actions without rebuilding the appearance.

More Than Two States

The ON/OFF pairing that the standalone action types use tops out at two looks. A key configured through HangarControl is not limited that way: HangarControl can push an ordered list of value bands, each with its own icon, background colour, label text, and label colour. The plugin walks the list and uses the first band whose range contains the current value, with both ends of each range treated as inclusive and an open end meaning no limit in that direction.

This is what a real multi-position switch needs β€” a five position flap selector or a rotary mode knob that reads UP, 1, 2, 3, DOWN with a different colour at each detent, rather than being forced into a true/false pair. Set the bands up in the HangarControl binding window; there is nothing to configure on the Stream Deck side. If no band matches, the key falls straight back to normal two-state behaviour.

Readout Layout

Each readout in the binding window has an Align setting: Left, Center, or Right. On the LCD strip it decides how the value sits on its X position. Right makes X the right edge, so the last digit stays put when a value grows from two digits to three. On a key, a readout with a free position anchors the same way on its Free X, and a stacked readout sticks to the left or right edge of the key. LCD readouts also have a separate Label align, which follows the value unless you set it.

The Gap setting beside Prefix and Suffix adds up to 10 spaces between them and the value, so ALT and 1500 can read ALT 1500 instead of ALT1500. Existing readouts stay centred with no gap until you change them. Switching a readout to Right moves it, since X now marks the right edge, so nudge X back where you want it.

πŸ’‘ HC Binding vs the Single Action Types Reach for the dedicated action types (SimConnect Event, DCS Command, and so on) when a key does one simple thing β€” they are quicker to set up and configured entirely inside the Stream Deck software. Reach for HC Binding when you need press types, sequences, or the exact behaviour you already have on a hardware button.

HC Window Toggle

Restores the HangarControl window from the system tray or minimizes it if it is already visible. This is useful in VR or full-screen simulator setups where you want to quickly surface or hide HangarControl without using alt-tab or the taskbar.

The button state automatically reflects the current visibility of the HangarControl window. When HangarControl is visible, the button shows its ON state. When HangarControl is minimized or hidden to the tray, the button shows its OFF state.

πŸ’‘ VR Tip Assign this button on a physical Stream Deck page you can reach while in a headset. A single press brings HangarControl up to make configuration changes, and a second press hides it again without breaking your VR session.

Configuration

The HC Window Toggle action supports full icon and label customization. You can assign an icon from the built-in pack (with ON/OFF state variants), adjust the background color and icon size/position, and configure separate label text and colors for the visible (ON) and hidden (OFF) states. All settings are configured in the property inspector when you select the button.

HC Service Toggle

Starts or stops the HangarControl input service β€” the same service controlled by the Start/Stop buttons in the HangarControl home view. When the service is running, all hardware inputs, bindings, and axis mappings are active. Stopping the service suspends all input processing without closing HangarControl.

The button state reflects whether the service is currently running. The ON state indicates the service is active. The OFF state indicates the service is stopped. The HC UI Start/Stop buttons update automatically when the service is toggled from the Stream Deck.

⚠️ This stops all hardware input processing Toggling the service off will immediately suspend all button bindings, axis mappings, and encoder actions. This is intentional for scenarios where you need to temporarily disable HangarControl inputs β€” but be aware that all hardware control through HangarControl stops until you toggle it back on.

Configuration

The HC Service Toggle action supports full icon and label customization. You can assign an icon (with ON/OFF state variants), adjust background color and icon size/position, and configure separate label text and colors for the running (ON) and stopped (OFF) states. The default label colors are green for running and red for stopped, but these can be changed to your preference.

HC Page Sound

Plays an audio beep pattern when you navigate to the Stream Deck page this button lives on. This is designed for VR use β€” when you flip to a new page on your Stream Deck inside a headset, the beep pattern tells you which page you have landed on without needing to see the display.

Configure a unique beep count per page (e.g., 1 beep for page 1, 2 beeps for page 2) so you can orient yourself by sound alone. The sound fires automatically on page navigation β€” no button press required for the audio cue.

Sound Configuration

Field Description Default
Beep Count Number of beeps to play when the page is navigated to 1
Frequency Pitch of the beep tone in Hz 880 Hz
Beep Duration How long each individual beep lasts in milliseconds 150 ms
Gap Silence between beeps in milliseconds 120 ms
Sound Enabled Master toggle to disable the page sound without removing the button On

Press Action

Because the sound fires on page navigation rather than button press, the button press itself can be assigned a secondary action so the button is never wasted. There is also a Beep on Press checkbox β€” when enabled, pressing the button replays the page beep in addition to running the press action below. Configure all of this in the Press Action section:

Option Behavior
None (beep only) Button press runs no action. With Beep on Press enabled, pressing still replays the page beep.
SimConnect Event Fires a SimConnect event on press. Enter the event name and optional value β€” same format as the SimConnect Event action type.
Keyboard Shortcut Sends a keyboard chord on press. Enter the shortcut using standard modifier notation (e.g., Ctrl+Shift+A).
DCS Command Sends a DCS cockpit command on press. Enter the aircraft, command ID, and press value. Sends a momentary press and release.
HC Window Toggle Shows or hides the HangarControl window on press β€” the same behavior as the HC Window Toggle action.
HC Service Toggle Starts or stops the HangarControl input service on press β€” the same behavior as the HC Service Toggle action.
πŸ’‘ Recommended Setup Set the beep count to match the page number (1 beep on page 1, 2 beeps on page 2, etc.) and leave Beep on Press enabled. That way you always know your page on load, and pressing the button replays the cue any time without looking β€” while still being free to run a real action on press if you want one.

Encoder (Stream Deck+)

Encoder Overview

The Encoder Control action type is specifically designed for Stream Deck+ rotary dials. Each encoder dial supports three distinct interactions: rotation (clockwise/counter-clockwise), press (push the dial), and touch (tap the LCD strip below the dial). This makes encoders ideal for cockpit knobs like heading selectors, altitude setters, radio tuners, and trim wheels.

Encoder Control is a dial-only action β€” it will not appear as an option when you drag onto a standard key. If you want HangarControl's full press model on a dial as well as rotation, use HC Binding instead, which supports both keys and dials.

Rotation Modes

The rotation behavior is configured via the Mode dropdown in the Rotation Action section:

Mode Behavior Best For
Adjust SimVar Directly increments/decrements a SimVar by a configurable step. Supports min/max clamping and wrap-around. Heading, altitude, VS, trim, brightness
Execute Actions (CW/CCW) Fires a separate action for CW and CCW rotation. Each direction picks its own action type independently β€” SimConnect Event, SimVar Write, Keyboard Shortcut, X-Plane Command, X-Plane DataRef, DCS Command, or Flag β€” with its own parameter fields. Radio tuning, autopilot inc/dec, panel knobs
DCS Commands (CW/CCW) Fires separate DCS cockpit commands for CW and CCW rotation. Each direction has its own aircraft, command, and value. Use the browse picker to select commands from the DCS aircraft library. DCS rotary knobs, radio dials, cockpit selectors
DCS Axis Controls a DCS axis with incremental encoder rotation. Configurable step size, min/max clamp, wrap-around, and starting position. The axis value is tracked by the plugin and sent to DCS on each tick β€” it is never read back, so moving that axis in the cockpit leaves the dial's idea of the position out of date until you spin it back. DCS throttle, brightness, volume, trim wheels
Conditional (Multi-Branch) Evaluates priority-ordered branches of conditions. The first matching branch determines what the dial does. Each branch can use Adjust SimVar or Execute Actions. Context-sensitive controls (see below)
ℹ️ There Is No "Off" Mode The Mode dropdown always has one of the five modes selected β€” there is no None or disabled option. A dial that appears to do nothing has an unconfigured mode, not a disabled one.

Acceleration

Acceleration applies to every rotation mode. When enabled, the increment scales up the faster you spin the dial, so a slow turn stays precise while a fast sweep covers a large range in a few flicks. This is what makes a single dial usable for both fine radio tuning and a climb from 3,000 to 35,000 feet.

Field Description Default
Enabled Yes or No. When off, every tick applies the configured increment exactly once. No
Sensitivity Low β€” needs the fastest spin before it engages and tops out at 3Γ—, so most normal turning stays at 1:1. Best for fine control. Medium β€” engages sooner and tops out at 8Γ—. High β€” engages just as soon and tops out at 12Γ—, best for altitude and frequency sweeps. Medium

The multiplier is driven by how fast you are turning, measured in detents per second, and steps up through fixed bands rather than scaling smoothly. Roughly:

Spin speed Low Medium High
5 / sec1Γ—1.5Γ—2Γ—
10 / sec1Γ—2Γ—4Γ—
18 / sec2Γ—4Γ—8Γ—
30 / sec3Γ—8Γ—12Γ—

Acceleration resets between spins. Leave a gap of more than a quarter of a second between detents and the next one starts at the base increment again, rather than picking up where the last burst left off.

Target Zone

The Target Zone dropdown lets a dial temporarily hand itself over to a TouchPanel zone:

Setting Behavior
Normal function only The dial always does what its Rotation Action says. This is the default.
Override to engaged zone Whenever a TouchPanel Target Zone is engaged, this dial drives that zone instead. The moment no zone is engaged, it falls straight back to its normal rotation function.

This is how you get one physical dial to serve a whole panel: tap a zone on a TouchPanel to engage it, spin the dial to adjust it, and the dial reverts to its usual job on its own.

Adjust SimVar Fields

Field Description Example
SimVar Variable to adjust AUTOPILOT HEADING LOCK DIR
Units SimConnect units degrees
Increment Amount to change per tick 1
Fine Inc. Amount to change per tick when the dial is pressed and rotated simultaneously 0.1
Min / Max Optional value clamps 0 / 360
Wrap Wrap around from max→min and min→max Yes

Execute Actions Fields

This mode gives you a CLOCKWISE ACTION block and a COUNTER-CLOCKWISE ACTION block. Each starts with an action type dropdown, and the fields below it change to match the type you pick:

  • SimConnect Event β€” event name with browse picker, plus an optional value
  • SimVar Write β€” variable, units, and the value to write
  • Keyboard Shortcut β€” a key chord sent on each detent
  • X-Plane Command β€” command path
  • X-Plane DataRef β€” DataRef path and value
  • DCS Command β€” aircraft, command ID with browse picker, and value
  • Flag β€” set, clear, or toggle a HangarControl flag

The two directions are configured completely separately and do not have to match. Clockwise can fire a SimConnect event while counter clockwise writes an LVar, if that is what the aircraft needs.

πŸ’‘ Mixed Direction Knobs Some add-on aircraft expose a clean increment event but nothing for decrement, or the reverse. Because each direction picks its own type, you can use the event where it exists and fall back to a direct SimVar write on the other side, instead of abandoning the event entirely and writing both directions by hand.

The example below shows the common case where both directions use SimConnect events:

Direction Fields Example
CW Event Event name + optional value HEADING_BUG_INC, value 0
CCW Event Event name + optional value HEADING_BUG_DEC, value 0

DCS Commands Fields

When using the DCS Commands mode, you configure separate CW and CCW commands with their own aircraft selection:

Direction Fields Example
CW Aircraft + Command ID + Value F/A-18C, UFC Option 1 +, value 1
CCW Aircraft + Command ID + Value F/A-18C, UFC Option 1 -, value -1

Each direction has its own browse picker with category filtering. The CW and CCW commands can be from different aircraft if needed, though typically they target the same module.

Selector Knobs From the Aircraft Library

When the command you pick is a multi position selector from the aircraft library, such as a radio preset channel knob, HangarControl steps through its real positions for you. Pick the same selector for both CW and CCW and each detent moves one position in that direction. The Value fields are ignored for these commands. HangarControl starts counting from the first position, so if the knob in the cockpit is already somewhere else, the first detent snaps it into step and it tracks from there.

Two position switches are sent their value once per detent, and momentary buttons such as increase and decrease commands are pressed and released using the release value from the aircraft library.

Stepped Selector (Optional)

Some DCS rotary selectors ignore the usual +1 and -1 and want an absolute position value instead. Turn one of those with plain CW and CCW commands and the switch sits there doing nothing. The Stepped Selector block at the top of the DCS Commands section handles those: fill it in and the clockwise command is used for both directions, with the plugin tracking which detent the switch is on and sending that position value.

Field Description Example
Steps Either a single number, which spreads that many detents evenly from 0 to 1, or an explicit comma-separated list of position values. 9 or 0, 0.1, 0.2
Wrap No - stop at the ends or Yes - wrap around. No
Start Which detent index the selector begins on. 0

Leave Steps blank for normal +1 / -1 behaviour on both directions. The stepped path needs at least two positions and a clockwise command to be filled in β€” miss either and the dial quietly reverts to sending the plain CW and CCW commands, with no error to tell you why the switch is not moving. Acceleration applies to stepping too, so a fast spin jumps several detents at once.

DCS Axis Fields

Field Description Example
Aircraft DCS aircraft module for the axis F/A-18C Hornet
Axis The axis to control. Use the browse picker to select from the aircraft's axis catalog. Brightness - Instrument
Step Amount to change per encoder tick 0.05
Min / Max Axis value range. Defaults to -1 and 1 if left empty, which suits centred axes like trim. Set them to 0 and 1 for anything that runs one way only, such as brightness or volume. 0 / 1
Wrap When the value passes Max it jumps straight to Min, and vice versa. Leave it off and the value clamps at each end instead. Only sensible for genuinely continuous controls. No
Start Position Initial axis value when the encoder first loads. Defaults to 0 if left empty. 0.5

Press, Touch & Double-Tap

The encoder press event fires when you push the dial straight down. The Touch Action fires when you tap the LCD strip below the dial. Both have their own Mode dropdown with two choices:

Mode Fields
SimConnect Event Event name (with browse picker) and a numeric value.
DCS Command Aircraft, command ID (with browse picker), value, and a button mode of Momentary (sends the press value then releases) or Toggle (alternates between the value and 0).

Double-Tap Mode

When Double-Tap Mode is enabled, the encoder gains an alternate rotation mode that activates on double-tap:

  • Single tap: Fires the press event normally.
  • Double tap: Toggles the encoder into alternate mode. While in alt mode, rotation uses a completely separate set of actions/SimVars/events (configurable in the Alt section that appears below).
  • Double tap again: Returns to the primary rotation mode.

This is perfect for dual-function knobs. For example, a single encoder could handle both heading and course, or COM1 MHz and COM1 kHz, by double-tapping to switch between them.

Alt mode is a genuinely separate configuration, not just a second variable. It has its own Target Zone dropdown and its own Wrap setting alongside the rotation fields, so the two halves of the dial can behave completely differently β€” the primary side clamped at its limits while the alt side wraps, for instance. Note that alt mode offers only Adjust SimVar and Execute Actions; the DCS and Conditional modes are primary-only.

Conditional Encoder Branches

The Conditional rotation mode is the most powerful encoder feature. It allows you to define multiple priority-ordered branches, each with its own set of conditions and rotation behavior. When you rotate the dial, HangarControl evaluates each branch from top to bottom and uses the first one whose conditions are met.

Example: G1000 Multi-Function Knob

A real-world example β€” a single encoder that automatically adjusts the correct value based on the active autopilot mode:

Branch Condition Rotation Behavior
FLC Mode AUTOPILOT FLIGHT LEVEL CHANGE = 1 Adjust pitch reference speed
VS Mode AUTOPILOT VERTICAL HOLD = 1 Adjust vertical speed in 100 fpm steps
Default (no conditions β€” always matches) Adjust pitch trim

Each branch independently supports either Adjust SimVar or Execute Actions mode, with its own increment, fine increment, min/max, and wrap settings. Use the + Add Branch button to add branches, and the β–² and β–Ό buttons on each branch header to reorder priority (top = highest priority). The default branch is always pinned to the bottom and cannot be moved or removed.

Every branch also has a name field with its own font size and a Show checkbox beside it. Untick Show to hide that branch's name on the strip while keeping it in the editor, so you still know which branch is which. The Default branch can be hidden the same way, or its name cleared entirely. The name is drawn on the LCD strip while that branch is active, so you can see at a glance which mode the dial is currently in β€” which matters most in the manual cycling modes, where nothing else tells you.

Per Branch LCD Display

Each branch carries its own LCD Display (Optional) block, so the strip can show a different readout depending on which branch is live. A dial cycling COM1, COM2, and NAV1 shows the frequency for whichever radio it is currently driving, with no extra configuration on the main LCD section.

Use + Add Display to add as many readouts as you need to a branch. Each one has:

  • Source β€” SimVar / LVar, DCS Cockpit Argument, or DCS Export Telemetry
  • Variable β€” with a browse picker; the Units field disappears for the two DCS sources, which do not use units
  • Format and Decimals β€” the same format tokens as everywhere else, decimals Auto or 0 to 3
  • Value position β€” font size, colour, X, and Y for the number itself
  • Label position β€” a separate multiline text label with its own size, colour, X, and Y. Shift+Enter inserts a line break.
ℹ️ Branch Conditions Are SimVar, LVar, or Flag The branch condition editor offers three sources: SimVar, LVar, and Flag. The DCS Data and HC Variable sources available on the key Conditional Action are not offered here. To branch a dial on DCS state, drive a flag from HangarControl and test the flag.

Branch Switching

Conditions are not the only way to choose a branch. The Switching dropdown at the top of the Conditional section decides how the active branch is picked:

Switching Mode How the branch is chosen
Conditions Only (auto-switch) Branches are selected automatically from sim state. First match wins. This is the default and the behaviour described above.
Press Cycle (manual) Press the dial to step to the next branch. No conditions are used at all.
Touch Cycle (manual) Tap the LCD strip to step to the next branch. No conditions are used at all.
Conditions + Press Cycle Conditions filter the list down to the branches that currently qualify, then pressing the dial cycles among those matches.
Conditions + Touch Cycle Same filtering, but tapping the LCD strip cycles among the matches.
ℹ️ The Condition Fields Disappear In Manual Modes Choosing Press Cycle or Touch Cycle hides the condition section on every branch, because nothing is evaluating them. Switch back to a conditions mode and they return with whatever you had entered still intact. If your conditions have vanished from the branch editor, check this dropdown before assuming anything is lost.
πŸ’‘ When Manual Beats Automatic Automatic switching needs a sim variable that actually tells you what mode you are in. Plenty of aircraft do not expose one, and plenty of use cases have no sim state behind them at all β€” a single dial that walks COM1, COM2, NAV1, and NAV2 is your choice, not the aircraft's. Press Cycle covers those. The combined modes are for when the aircraft narrows the field but you still want the last say, such as cycling only the autopilot values that are valid in the current mode.
⚠️ Press Cycle Takes The Press In Press Cycle and Conditions + Press Cycle, pushing the dial changes branch. Configure the Press Action for something else and the two will fight over the same input. Use Touch Cycle instead if you need the press for a command.
⚠️ Branch Order Matters Branches are evaluated top-to-bottom. The first branch whose conditions are met is used. Always put your most specific conditions at the top and a default (no-condition) fallback branch at the bottom.

Encoder State Toggle

The Encoder Control action has its own State Toggle section that determines how its ON/OFF icon state is decided. It offers one mode that the key actions do not:

  • No State Change β€” the icon never switches state.
  • SimVar Monitoring β€” watch a SimVar against a threshold.
  • DCS Monitoring β€” watch a DCS cockpit argument or export variable against a threshold.
  • Toggle on Touch β€” flip the state each time the LCD strip is tapped.

LCD Display

Stream Deck+ encoders have a 200Γ—100 pixel LCD touch strip below each dial. The Encoder Control action splits this across two sections. LCD Display covers the strip's icon and its static label: a multiline Label Text field (Shift+Enter for a line break) with font, size, weight, colour, and X/Y placement, plus a Show Label toggle to switch it off entirely.

Live values come from the Stacked Variables section below it. Unlike the fixed four slots on a SimVar Display dial, this is an open list β€” press Add Slot for as many readouts as you want, and Remove on any you do not. Each slot has its own on/off switch and:

  • Source β€” SimVar / LVar, DCS Cockpit Argument (with an aircraft picker), or DCS Export Telemetry
  • Variable with a browse picker, and Units for SimVar sources
  • Format, including the {digit:N} token for splitting one value across several dials, and Decimals (Auto, or 0 to 3)
  • Label β€” a multiline caption for that specific slot, separate from the strip's main label
  • X, Y, font size, and colour

Combined with the optional icon, this is what lets you build a real cockpit readout on the strip rather than a single bare number.

⚠️ LCD X/Y Are Pixels, Key X/Y Are Percentages On a key, Icon X and Icon Y are percentages of the button face, where 50 means centred. On the LCD strip, slot X and Y are absolute pixel coordinates on the 200Γ—100 panel β€” X 100 and Y 50 is dead centre, X 100 and Y 16 sits near the top. Carrying a value of 50 across from a key puts your text well left of where you expected it.

Slot labels always render at normal weight and inherit the slot's font family; only the value itself honours the weight setting. When a branch is active on a conditional dial, its name is drawn in bold orange at the top right of the strip, sized by that branch's own name font size field.

Shared Features

These features are available across most or all action types.

Icons

Every action type supports an optional icon displayed on the button face. The plugin ships with 238 built-in icons, most of them supplied as matched ON and OFF pairs, organized by category:

Category Contents
Autopilot A/P, HDG, ALT, SPD, V/S, NAV, APR, LOC, VNAV, FLC, IAS, plus LCD-style indicator faces
Electrical Battery (1 and 2), alternator, generator, avionics (1 and 2), external power, ground power, master β€” in Boeing, Airbus, rocker, toggle, and guarded styles
Lighting Nav, strobe, beacon, landing, taxi, panel, logo, wing β€” in Boeing, Airbus, and rocker styles
Adjustment Plus and minus pairs for ALT, HDG, SPD, and V/S, plus generic plus and minus
Generic Plain switch bodies for your own labels: toggle, push button, horizontal rocker, vertical rocker, indicator light, and display face, each in eight colours. The toggle, push button, indicator and display carry no text at all. The two rockers have ON and OFF marked on their halves, so label the key with what the switch controls rather than its positions.
User Icons Your own custom icons (see Custom User Icons)

Selecting an Icon

Open the Icon dropdown in the property inspector to pick an icon. Entries are grouped by category (Autopilot, Electrical, Lighting, and so on, plus a User Icons group for your own images). A live preview appears directly below the dropdown so you can see the selected icon before saving. Choose Default to use the action's stock icon, or None for a text/value-only key with no icon.

State-Aware Icons

A button can show one icon when it is ON (or a condition is TRUE) and a different icon when it is OFF (or FALSE). There are two ways to set this up:

  • Separate ON/OFF icons (recommended): Pick your main icon in the Icon dropdown and a different one in the OFF Icon dropdown right below it. The main icon is shown for the ON/true state and the OFF Icon for the OFF/false state, and the swap happens automatically in real time. A live Shown when OFF thumbnail appears under the OFF Icon dropdown. Leave OFF Icon set to Same as main icon to use one icon for both states.
  • Paired image files: Built-in icons (and your own user icons) that ship as a matched _on/_off file pair are collapsed into a single dropdown entry that is automatically state-aware. For example, a battery icon shows green when active and gray when off without picking a separate OFF Icon.

The OFF Icon dropdown is available on every action with an icon, and the state that drives the swap comes from the button's State Toggle, a Conditional action's result, or the action's own on/off state (service running, window visible, flag set, threshold crossed).

Icon Appearance Controls

After selecting an icon, the Button Appearance section provides fine-grained control:

Control Description Default
Background Background color behind the icon (color picker) #000000 (black)
Icon Width Width as percentage of the button face (0–100%) 80%
Icon Height Height as percentage (0–100%). Width and height are applied independently and the image is stretched to fit, so setting them to different numbers distorts the icon rather than letterboxing it. Keep them equal unless you actually want a squashed or elongated look. 80%
Icon X Horizontal center position (0=left, 50=center, 100=right) 50
Icon Y Vertical center position (0=top, 50=center, 100=bottom) 50

State Toggle

State Toggle allows a button to visually reflect a simulator state. When enabled, the plugin monitors a SimVar and automatically switches the button between its ON and OFF visual states based on the variable's value.

Configuration

Field Description Example
Mode No State Change β€” the button never switches state. SimVar Monitoring β€” watch a variable and toggle automatically. Toggle on Press β€” flip state each time the button is pressed, with no monitoring. SimVar Monitoring
State Var SimVar to monitor ELECTRICAL MASTER BATTERY
Units SimConnect units for the state variable bool
Threshold Value above which the state is considered ON. For boolean variables, use 0.5. 0.5

When the monitored SimVar value exceeds the threshold, the button switches to its ON state β€” showing the ON icon variant, ON text, and ON label color. When the value drops below the threshold, it switches to the OFF state.

Button Appearance & Labels

The Label Settings section (available on all button action types) lets you add text to the button face:

Field Description
ON Text Text displayed when button is in ON state. Type \n to break the label across lines β€” MASTER\nBATTERY renders as two centred lines, which is how you fit a two-word switch name on a key without dropping the font size.
OFF Text Text displayed when button is in OFF state. Supports \n line breaks the same way.
Font Font family. Eleven built-in choices including Arial, Segoe UI, Roboto, and three monospace faces (Consolas, Courier New, Monaco). Choose Custom… to type the exact name of any font installed on your system β€” this is how you get seven-segment cockpit faces such as DSEG7 Classic, Digital-7, or OCR A.
Font Size Slider, 8 to 32 pixels, relative to the 144Γ—144 key space
Font Weight Normal, Bold, Light, or a numeric weight: Thin (100), Light (300), Medium (500), Semi-Bold (600), Bold (700), Black (900). Numeric weights only render if the chosen font actually ships that weight. DCS Command, HC Window Toggle, and HC Service Toggle do not offer this control.
ON Color / OFF Color Separate text colors for each state
Position Where the text appears: Bottom, Top, Center, or Hidden. The SimConnect Event action adds a Custom X/Y option that exposes X and Y fields for exact placement.

Stacked Variables (Live Display)

Three key action types β€” SimConnect Event, SimVar Write, and DCS Command β€” include a Live Display Variables section. This lets you overlay live SimVar readouts directly on the button face. Keyboard Shortcut, Flag Control, Conditional Action, and the X-Plane actions do not have this section.

Which way the readouts stack is decided for you by the main label's Position. With the label at the bottom the readouts stack upward from just above it; with the label at the top or centre they stack downward beneath it. Either way they stop before running off the key, so a slot that would land off the face simply is not drawn. Use the per-slot Y Offset to nudge individual lines within that flow.

On SimConnect Event and SimVar Write keys, each stacked variable has its own:

  • SimVar β€” the variable to display
  • Units β€” SimConnect units
  • Format β€” display format string with {value} placeholder and optional zero-padding. Two extra tokens are available here: {label} inserts the variable's name as HangarControl reports it, and {index} inserts the slot's position number.
  • Decimals β€” decimal places. Left on Auto this is 3 for anything that looks like a COM, NAV, or ADF frequency, and 0 for everything else.
  • Font / Size / Weight / Color β€” independent styling. Anything left unset inherits from the main label.
  • Y Offset β€” fine-tune vertical position within the stack

On a DCS Command key the section reads DCS telemetry instead, so the fields differ slightly. There is no Units field, the variable is a DCS export key or a raw cockpit argument ID with its own browse picker, and there is an extra Aliases field.

πŸ’‘ Aliases Turn Numbers Into Words DCS reports switch positions as numbers, and 0.3 on a button face means nothing to anyone. Aliases map those values to text: enter 0=OFF, 0.1=STBY, 0.2=NORM, 0.3=EMER and the key shows the actual mode name instead of the raw argument value. Separate pairs with commas, semicolons, or line breaks.
⚠️ Aliases Snap To The Nearest Entry Matching is nearest-value, not exact. Once you define any aliases at all, every reading resolves to whichever entry is closest β€” a value of 0.47 against the list above shows EMER, and nothing ever displays as a bare number again. Cover the full range of positions the switch actually reports, or leave the field empty entirely.

There are three slots per button, each with its own enable checkbox β€” tick Slot 1, Slot 2, or Slot 3 to switch that readout on and configure it. This is great for creating cockpit readout buttons that show several values at once, for example a single key showing heading, altitude, and speed. If you need four readouts and you are on a Stream Deck+, use a SimVar Display dial instead.

Custom H:Events

When the SimConnect property inspector is open and HangarControl is connected to MSFS, the plugin queries HangarControl for the currently loaded aircraft. If the aircraft title is detected, the Custom H:Events section shows any H:Events you have previously registered for that aircraft.

You can add new custom H:Events directly from the property inspector. These are saved per-aircraft in HangarControl and will appear in the catalog for future use. This is especially useful for documenting third-party aircraft events that aren't in the standard catalog.

Custom User Icons

In addition to the built-in icon pack, you can add your own custom icons that the plugin will load automatically.

Adding Custom Icons

1 Locate the User Icons Folder

Navigate to your HangarControl data folder:

%AppData%\HangarControl\UserIcons

This folder is created automatically the first time the plugin runs. It lives with your HangarControl data, not inside the plugin folder, so it is never touched when you reinstall or update the plugin. (If you used an older build that stored icons inside the plugin's user-icons folder, they are migrated here automatically.)

2 Add Your Icons

Drop your image files into the UserIcons folder. PNG, JPG, JPEG, and BMP are all accepted. For best results, use 144Γ—144 pixel PNG images with transparent backgrounds.

3 State Variants (Optional)

You have two ways to give a user icon an ON and an OFF look. Either drop two completely separate images in the folder and assign one in the Icon dropdown and the other in the OFF Icon dropdown on the button, or name a matched pair with _on and _off suffixes:

my_switch_on.png
my_switch_off.png

The plugin automatically detects the suffixed pair and collapses it into one state-aware entry. Use whichever fits β€” the OFF Icon picker is the simplest if your two images aren't named as a pair.

4 Organize with Subfolders (Optional)

Any subfolders you create inside UserIcons become their own categories in the Icon dropdown, so you can keep large icon sets organized (for example a folder per aircraft).

5 Icons Appear Automatically

Newly added icons are picked up on their own. The plugin rescans the folder whenever a key asks for an icon it has not seen yet, so an image dropped in while the Stream Deck software is running shows up without a restart. If a freshly added icon does not appear in the dropdown straight away, reopen the property inspector and it will be there.

ℹ️ User Icons Survive Plugin Updates Because the UserIcons folder lives in your HangarControl data folder, completely outside the plugin, reinstalling or updating the Stream Deck plugin never touches your custom icons.

Troubleshooting

Common Issues

Buttons Show ⚠ Warning

This means the plugin cannot connect to HangarControl. Make sure HangarControl is running. If HangarControl is running but the warning persists, check that no firewall is blocking localhost connections on port 19850.

Icons Display But Actions Don't Fire

Icons are loaded locally from the plugin's icon pack and don't require a HangarControl connection. If icons display but pressing buttons does nothing, check the connection status in the property inspector. It should say Connected, not Disconnected (Icons OK).

Display Shows "---" Instead of Values

This means the SimVar hasn't returned a value yet. Common causes:

  • The simulator is not running or not connected to HangarControl
  • The SimVar name is misspelled β€” use the Browse Catalog to verify
  • The SimVar requires specific units β€” try number or bool if the specified units don't work
  • For L:Vars, the aircraft must be fully loaded β€” some LVars aren't available until the cockpit is initialized

State Toggle Not Updating

If the button's ON/OFF icon state doesn't match the cockpit switch position:

  • Verify the State Var name is correct (use Browse Catalog)
  • Check the Threshold value β€” for boolean states, use 0.5. For percent states, adjust the threshold accordingly
  • Make sure Mode is set to SimVar Monitoring (not No State Change or Toggle on Press)
  • On an Encoder Control dial watching a DCS value, use DCS Monitoring rather than SimVar Monitoring

Encoder Rotation Not Doing Anything

There is no disabled rotation mode, so the dial always has a mode selected β€” the problem is nearly always an unconfigured one. If using Adjust SimVar, verify the SimVar name and units are correct. If using Execute Actions, verify the CW and CCW event names are filled in. If using Conditional, confirm at least one branch matches β€” a set of branches that all fail leaves the dial with nothing to do, so always keep a no-condition fallback branch at the bottom.

Also check Target Zone. If it is set to Override to engaged zone and a TouchPanel zone is currently engaged, the dial is driving that zone rather than its own rotation action. That is working as designed β€” disengage the zone and normal function returns.

H:Events Not Working

Make sure the Prefix is set to H: in the SimConnect Event action. H:Events must include the prefix to be dispatched correctly. Also verify the event name matches exactly (H:Event names are case-sensitive for some aircraft).

Plugin Shows "Not Installed" After Update

After updating HangarControl, the plugin may need to be installed again. Go to Settings β†’ Stream Deck Plugin and click Install Plugin (it reads Update Plugin when an older version is installed). This is expected behavior β€” the plugin is bundled with each HangarControl release.

HC Binding Key Does Nothing When Pressed

Before version 1.26.04, an HC Binding key could lose its action after a Stream Deck or PC restart while keeping its icon, readouts and state. Some keys picked up the action of the key in the same spot on another profile instead. This mostly hit decks built by duplicating profiles or pages, or by copying keys. Every key now keeps its own settings no matter how many copies of it exist, including keys copied while HangarControl was closed.

Keys that had already lost their action before updating need their action set up once more. After that they stay put.

Connection Problems

Plugin Never Connects

  1. Confirm HangarControl is running and you can see it in the system tray or taskbar.
  2. In HangarControl, check that the Stream Deck WebSocket server is active (logged as SDPS-001 in verbose logs).
  3. Verify no other application is using port 19850.
  4. If you run antivirus or firewall software, add an exception for HangarControl on localhost port 19850.

Connection Drops Intermittently

The plugin includes automatic reconnection with exponential backoff β€” it retries quickly at first (starting around one second) and backs off up to a maximum of ten seconds between attempts. If HangarControl restarts or temporarily loses the WebSocket, buttons will show ⚠ briefly and then recover automatically once the connection is re-established. A ping/pong heartbeat runs every 4 seconds and a dead connection is detected within about 12 seconds.

πŸ’‘ Launch Order Doesn't Matter You can start HangarControl before or after the Stream Deck software. The plugin continuously attempts to connect and will establish the link as soon as HangarControl is available. Similarly, if HangarControl restarts, the plugin reconnects automatically.

Catalog Browse Shows Empty Results

The event catalog is served from HangarControl. If the browse button opens but shows no results, HangarControl may not be connected to the simulator yet. Start your flight simulator and wait for HangarControl to show Connected in its home view, then try browsing again.

Quick Reference

Display Format Strings

Format Input Value Result
{value} 247 247
HDG {value:000} 5 HDG 005
{value:0000} ft 350 0350 ft
COM1 {value} 118.900 COM1 118.900
{value} kts 250 250 kts
{digit:1} 7200 7
{digit:3} 7200 0

The {value:000} syntax adds leading-zero padding to the integer portion. The number of zeros determines the minimum digit count.

The {digit:N} token extracts the Nth digit of the value, counting from the left starting at 1. Use it to split a single value across several display slots or across several Stream Deck+ dials β€” a four-dial transponder readout, for example, where each dial shows one digit and adjusts that digit on rotation.

⚠️ Digit Extraction Works On The Bare Integer The value is stripped to its whole-number part before the digit is picked out, which has three consequences worth knowing before you build a four-dial readout:
  • Leading zeros are gone. A squawk of 0700 is the number 700, so {digit:1} gives 7, not 0, and the whole readout shifts one place left. Padding with {value:0000} does not help β€” the two tokens cannot be combined.
  • An index past the end renders blank, not a zero. On that same 700, {digit:4} shows nothing at all.
  • Decimals and the minus sign are discarded. Digit extraction is integer only.
If a slot contains {digit:N}, any {value} in the same slot is ignored β€” the digit token is handled first and returns immediately. Use one or the other, never both.

Common SimVar Prefixes

Prefix Type Description
A: Standard SimVar Standard MSFS simulation variables (altitude, heading, etc.)
L: Local Variable Aircraft-specific variables set by the aircraft developer
K: Key Event SimConnect events (used in Event field, not display)
H: HTML Event Custom events from third-party aircraft
B: Behavior Variable MSFS 2024 input event system
J: JavaScript Variable MSFS 2024 JavaScript variables, available as a type in SimVar Write
DCS: DCS Cockpit Argument Used in display slots and conditions to read a raw DCS cockpit argument, e.g. DCS:404. DCS export variables are addressed by their key instead, e.g. GEAR or IAS.
FLAG: HangarControl Flag Used in a State Var field to drive a button's ON/OFF state from a flag, e.g. FLAG:AP_ACTIVE

Common SimVar Units

Unit Used For
number General numeric values (default)
bool On/off states (0 or 1)
degrees Heading, bearing, angles
feet Altitude, elevation
knots Airspeed, ground speed
percent Throttle position, fuel level, etc.
Mhz Radio frequencies (COM, NAV)
feet per minute Vertical speed
radians Some angular measurements
pounds Weight/fuel quantities

Keyboard Chord Syntax

Modifier Syntax Example
Ctrl Ctrl+ Ctrl+G
Shift Shift+ Shift+P
Alt Alt+ Alt+F4
Combined Ctrl+Shift+ Ctrl+Shift+F
Single key (just the key) G, Esc, F5