v1.7.30 now available

Your physical dashboard,
fully customized.

Turn your Ulanzi D200 or Elgato Stream Deck into a command center for iRacing, OBS, Discord, and more. Live telemetry on buttons, one-click pit commands, auto page switching. All configurable from a browser.

CtrlDeck main interface showing button grid, sidebar, and editor panel

Works with

๐Ÿ–ฅ Ulanzi D200
๐ŸŽฎ Elgato Stream Deck
๐Ÿ iRacing
๐Ÿ”ด OBS Studio
๐Ÿ’ฌ Discord
๐Ÿ•น USB Wheels & Controllers

Everything you need,
nothing you don't.

Configure every button from a clean web UI. Changes push to the device instantly.

๐Ÿ—‚

Multi-page layouts

Organize buttons across multiple pages per profile. Flip between pages from any button with page actions.

โšก

Auto page switching

Pages switch automatically based on iRacing session state: practice, qualifying, pit road entry, race start, and more.

๐Ÿ“ฑ

Multi-device support

Connect a Ulanzi D200 and an Elgato Stream Deck at the same time. Each gets its own independent profile.

๐ŸŽจ

Custom icons & labels

Upload any image, use CtrlDeck's own colour-coded pictures, or download free icon packs (4,700+ more icons) and keep only the ones you want. Set a display name. Your button, your way.

๐Ÿ–ผ

Tile pictures

Clean, matching pictures for about 400 controls: pit commands show the tyres they change, chat messages are speech bubbles in your own words. Each page has its own colour and go-to tiles wear it, so you can read the deck at a glance. Review, apply, undo.

๐Ÿ”Ž

Search that gets it

Type โ€œgasโ€ and find every fuel control. Icon search understands synonyms, plurals and typos, browses by topic with a Flat/Glow switch, and suggests icons from each button's label and action.

๐Ÿงญ

Searchable action browser

Every action in one categorized list: Basics, Apps and iRacing. Jump between categories or just type โ€œmuteโ€ or โ€œbrakeโ€. Recently used actions stay a click away.

โ›“

Multi-Action macros

Chain hotkeys, typed text and waits into a single press, like an iRacing chat command: open chat, wait, type #cleartires, hit Enter. Typed text goes in as scan codes, so games see it.

๐Ÿ“ก

Live telemetry on buttons

Over 150 iRacing readouts for any button: tyre temperatures and pressures, fuel laps left, lap delta, gaps to the cars around you, flags, engine health and more. Status tiles change colour, and values follow your iRacing units. Updated at 1 Hz.

๐ŸŽš

Live volume meters

A level meter that stretches down several tiles and tracks your system or a single app's volume. Press the top tile to raise it, the bottom to lower it, and a middle tile to mute.

๐Ÿ•น

Wheel & joystick bindings

Bind any button on a sim racing wheel or USB controller to any CtrlDeck action, independent of the D200/Stream Deck grid. Bind the same shortcut in iRacing's own controls and on a wheel button, and that one action works from either the wheel or the deck. Turn on Hold while pressed and a wheel button works as push-to-talk or look-back, with the key down for as long as you hold it.

โœ…

iRacing binding check

Tells you when a button's key doesn't match what iRacing has bound, spots a tile tagged as the wrong control, and fixes it in one click. Reads your active control profile and suggests free keys for anything unbound.

๐ŸŽ™

Hold to talk

Keys can stay down for as long as you hold a button: push-to-talk, look left and right, look back. Works on deck buttons and on wheel or button-box bindings, and lets go if the device is unplugged.

๐Ÿ”„

Import from Ulanzi or Elgato

Already using the official Ulanzi Studio or Stream Deck software? Import your profiles directly, icons included.

๐Ÿ’พ

Backup & restore

Export your full layout and icons as a zip. Import on any machine. Auto-backup runs before any profile import.

๐Ÿ–ผ

Wallpaper profiles

Set a full-deck background image with Fill, Contain, or Custom fit. Custom mode lets you drag and zoom to crop across all buttons โ€” rendered seamlessly, accounting for physical bezels.

๐Ÿ”†

Brightness control

Adjust device brightness from the sidebar. Persists across sessions.

๐Ÿ”ƒ

Auto-updater

Updates download in the background. When ready, a prompt lets you install and walk through the latest version at your own pace.

See it in action.

CtrlDeck main view with colour-coded tile pictures

Main deck view

The sidebar shows device status and brightness, live integration health, profiles, and pages. The grid shows your tiles as colour-coded pictures, so each page reads at a glance. The right panel edits the selected one: look first, then the action and its options, with a live check against your iRacing bindings.

Action browser with categories and search

Action browser

Every action in one list, grouped into Basics, Apps, and iRacing. Click a category to jump to it, or type what you want. Recently used actions are pinned at the top.

Icon library searching for gas and finding fuel controls and the throttle

Icon library

CtrlDeck's own 400+ pictures plus 4,700+ icons in optional packs, organized by topic. Search understands meaning: โ€œgasโ€ finds the fuel controls and the throttle. Switch between Flat and Glow, and get suggestions from the button's label and action.

Tile pictures screen showing each tile's current picture next to the new one

Tile pictures

Every tile with a fitting picture, current one beside the new one and why it was chosen. Only tiles with no picture are ticked to begin with, so nothing you already have is replaced unless you say so. Apply, then undo if you change your mind.

Icon packs window with a preview of each pack and Download and Remove buttons

Icon packs

Icon packs are separate downloads, each with a preview. Get only the ones you want, remove them later, and the pictures your tiles already use come back automatically. Keeps the installer small.

Multi-Action step editor building an iRacing chat command

Multi-Action macros

Chain hotkeys, typed text, and waits into one press. Here: open iRacing chat, wait 50 ms, type #cleartires, and press Enter, with the timing games need to actually register it.

Wallpaper profile with custom fit

Wallpaper profiles

Set a full-deck background image with Fill, Contain, or Custom fit. Drag and zoom to find the perfect crop โ€” rendered seamlessly across all buttons, gap-aware so lines flow right through the bezels.

Auto page switching modal

Auto page switching

Map iRacing session states and pit road events to pages. The deck switches automatically as the race unfolds.

Page settings modal

Page & profile settings

Reorder with a live position list, rename, or delete with confirmation. All in one gear modal.

iRacing keybindings browser

iRacing keybindings browser

Browse all bound controls. Yellow = device/wheel button, blue = keyboard combo. Fully searchable.

iRacing unbound controls

Unbound controls

Every iRacing action with no key assigned, each with a suggested free combo to bind.

Settings panel

Settings & integrations

OBS WebSocket, Discord OAuth, profile import from Ulanzi/Elgato, and backup/restore. All in one place.

Built for the tools
you already use.

Deep, native integrations. Not just hotkey passthroughs.

๐Ÿ
iRacing
SDK + keybind actions, live telemetry
  • Pit service: fuel, tires, fast repair, windshield
  • 150+ live readouts on buttons (tyres, fuel laps, delta, gaps, flagsโ€ฆ)
  • Replay & camera control via SDK
  • Black box panel shortcuts (F1โ€“F11)
  • Auto page switch on session/pit road state
  • Reads your active iRacing control profile (controls.cfg)
  • Binding checker: flags tiles whose key doesn't match iRacing or that are tagged as the wrong control, with one-click fixes
  • Unbound control finder with suggested free keys
  • Hold while pressed for push-to-talk and look-back
๐Ÿ”ด
OBS Studio
WebSocket live state, scene switching
  • Scene switch (glows green when active) Live
  • Record toggle (glows red while recording) Live
  • Stream toggle (glows orange while live) Live
  • Connects via OBS WebSocket v5
  • Password-protected connections supported
๐Ÿ’ฌ
Discord
OAuth voice controls, per-user volume
  • Mute/deafen (glows red when active) Live
  • PTT toggle (glows orange in PTT mode) Live
  • Join voice or text channels
  • Your own output volume
  • Per-user volume: raise, lower, or set any participant

Live data, right on your buttons.

Assign any button to display a live iRacing readout, updated at 1 Hz while you're driving. Pick from over 150: the basics, every tyre, fuel strategy, timing and gaps, flags, weather and more. Status tiles change colour so you can read them at a glance.

3rd
Gear
87
Speed
km/h
6,240
RPM
55.2
Brake Bias
%
88.5
LF Tyre Temp
°C
184.2
RR Pressure
kPa
9.7
Fuel Laps
laps
1.4
Gap Ahead
s
+0.31
Δ Best Lap
s
-0.12
Δ Best Lap
s
YELLOW
Flag
1:38.4
Last Lap

100+ actions.
One button each.

Every action is configurable. Search or browse by category, set params, pick an icon, done.

Pages & Navigation
Page Next
Page Prev
Page Go To
Page Back
Volume & Media
Volume Up
Volume Down
Volume Mute
Volume Set
Volume Meter
App Volume Up
App Volume Down
App Volume Set
App Volume Mute
Media Play/Pause
Media Next
Media Prev
Now Playing
Now Playing Display
Play/Pause
Next Track
Prev Track
System
Hotkey (scan code)
Type Text
Multi-Action
Run Command
OBS Studio
Scene Switch
Record Toggle
Stream Toggle
iRacing: Key Picker
Bound Key
Free Key
iRacing: Pit Service
Pit Fuel
Pit All Tires
Pit Tire LF / RF / LR / RR
Pit Windshield
Pit Fast Repair
Pit Clear All
Pit Clear Tires
Pit Clear Fuel
iRacing: Replay & Camera
Replay Play / Pause / Slow Mo
Replay Rewind / Fast Forward
Replay Live
Prev / Next Lap
Prev / Next Incident
Camera Group
Camera My Car
Prev / Next Car
iRacing: Car Controls & UI
Ignition
Starter
Pit Limiter
DRS
Brake Bias ยฑ
Black Box Panels (F1โ€“F11)
Look Left / Right / Up / Down
Toggle Driving Line
Toggle Mirror
Recenter VR
FFB ยฑ
Mark Event
Giant Screenshot
Chat Macro
Reload Textures
Telemetry Log
Video Toggle
iRacing: Live Telemetry Display
Speed (km/h or mph)
Gear, RPM, shift light
Throttle, brake, clutch, handbrake
Steering angle & FFB load
ABS active / cut
Oil & water temperature
Oil, fuel & manifold pressure
Voltage & fluid levels
Engine warnings
Pit & rev limiter
DRS, ERS & Push to Pass
Fuel % / L / burn
Fuel per lap
Fuel laps left
Fuel to add to finish
Lap, position, class position
Lap time, best, last
Incidents & limit
Delta to best / session best / optimal / last
Gap ahead & behind (seconds)
Distance to car ahead & behind
Time left, elapsed, laps left
Flag (colour-coded)
Session type
Pit road, pit stall, pits open
Pit service & plan
Repair time, fast repairs, tow time
Tyre compound & sets
Tyre temperature (average and left / middle / right)
Tyre pressure, cold pressure, tread left
Planned pit pressures
Brake line pressure
Ride height & shock deflection
Lateral, longitudinal & vertical G
Yaw rate, pitch, roll
Brake bias, ABS, TC, throttle map settings
Air & track temperature
Humidity, wind, skies, rain, track wetness
Car, class, iRating, licence, track
Discord
Mute
Deafen
Push to Talk Toggle
Join Voice Channel
Join Text Channel
Your Volume
User Volume Up / Down / Set

Up and running
in minutes.

No drivers, no complex configuration. Connect your device and open the UI.

1

Install CtrlDeck

Download the installer and run it. CtrlDeck starts automatically at login and sits in the system tray.

2

Connect your device

Plug in your Ulanzi D200 or Elgato Stream Deck. CtrlDeck detects it automatically. Hot-plug, no restart needed.

3

Open the config UI

Click the tray icon to open the web UI at localhost:57271. Click any button to assign actions and icons.

4

Import or build your profile

Import from Ulanzi Studio or Stream Deck software, or build from scratch. Changes push to the device instantly.

Already using official software?

Import your existing profiles from Ulanzi Studio or Elgato's Stream Deck app. Button icons, labels, hotkeys, media keys, and Discord actions all carry over. A backup of your current config is created automatically.

Ulanzi Studio โœ“
Hotkeys, page navigation, folder โ†’ sub-page, volume & media, Discord actions, button icons & labels
Elgato Stream Deck โœ“
Hotkeys, child profiles โ†’ sub-pages, volume & media, embedded button icons, titles. Supports Mini, MK.2, XL, Stream Deck +

What's new.

v1.7.30
Latest
  • + A picture for the tile that takes you to a telemetry page: a live data trace on its axes. With 150+ readouts you'll likely want several telemetry pages, so a number in the tile's or page's name is drawn into the picture: "Telemetry 1", "Telemetry 2" and so on (1 to 99). "Data", "Stats" and "Graph" pages get it too, while "Tyre data" keeps the tyre and "Race data" the chequered flag. Pictures for Telemetry and Telemetry 1 to 4 are in the icon library under CtrlDeck
  • ~ A page made of telemetry Display tiles is now teal in Tile pictures, so the tile that leads to it is teal too and telemetry pages stand out from pit, volume and camera pages. A go-to tile named "Telemetry" used to get the generic dashboard picture and now gets the new one when you re-run Tile pictures
v1.7.29
  • + Over 150 live iRacing readouts for telemetry tiles, up from 24, in 17 groups in the field picker. Every tyre has its own group: average temperature, left / middle / right temperature, hot and cold pressure, tread left and the planned pit pressure. Also new: oil, water and fuel pressure, voltage, engine warnings, clutch, handbrake, steering angle and force feedback load, ABS, ride heights, shock travel, G forces, brake line pressures, tyre compound and sets, pit service and plan, repair and tow time, humidity, wind, skies and track wetness, and your car, class, iRating and licence
  • + Fuel strategy tiles: fuel used per lap, laps of fuel left, and litres to add to reach the finish. They learn from your last few clean laps and ignore pit laps and cautions
  • + Lap delta tiles (to your best, the session best, the optimal lap and your last lap) and gap tiles that show the seconds to the car ahead and behind on track, plus the distance to each
  • + Status tiles now change colour: the flag tile turns yellow, blue, green, white, black or red with the flag, engine warnings turn the tile red, lap deltas are green when you're up and red when you're down, and the fuel laps tile goes amber and then red as you run low
  • + Temperatures, pressures, fuel volumes and distances follow iRacing's own metric or imperial setting, and the tile's unit label changes with it
  • + Long values such as a car name or a pit plan now shrink to fit the tile instead of running off the edge, and tiles in the editor show their real name and unit as soon as they're placed
  • ~ Fixed the Brake Bias tile, which always showed "--". Fixed Fuel Burn, which was labelled L/h but iRacing reports kg/h: it's now converted, so it reads higher than before. Time Left now shows a plain clock (1:23:45) and Laps Left shows "--" for unlimited sessions instead of a huge number
v1.7.28
  • ~ A "go to page" tile that has a CtrlDeck picture no longer shows the "→ Page" link chip over the name already drawn in the picture, so the label doesn't appear twice in the deck view. The chip still appears when you hover the tile
v1.7.27
  • + "Hold while pressed" on iRacing key tiles (push-to-talk, look left / right / up / down, and iRacing control tiles): the keys stay down for as long as you hold the button and are released when you let go. It works for deck buttons and for wheel and button-box bindings, and the keys are let go if the device is unplugged or CtrlDeck closes while a button is held
  • ~ More reliable wheel and button-box buttons: presses are now told apart from steering, pedal and force feedback noise by reading the device the way Windows does, so analogue axes no longer register as button presses. Releases are tracked too, and binding a button waits for one clean press
  • + A tow-truck picture for iRacing's Reset car control, labelled "Tow / exit", and the iRacing push-to-talk tile now reads "iRacing PTT" so it can't be mistaken for Discord's Push to talk
  • ~ The iRacing binding check now spots a tile that is tagged as the wrong control. If the key a tile sends is iRacing's binding for a different control (a "Flash headlights" tile on Alt+S tagged "Toggle in-lap mode"), it says so instead of just reporting the tagged control as unbound, and offers a one-click "Tag: Flash headlights". Tile pictures draws such a tile with the picture for what it really does, flagged for you to confirm
v1.7.26
  • + Colour-coded tile pictures, so you can read a page at a glance: each tile's whole card is tinted by what it is (pit orange, spotter red, camera purple, Discord indigo...), and navigation tiles are solid so they stand out from action tiles. A "go to page" tile takes the colour of the page it leads to, so Pit Controls is orange, Volume pink and Admin Commands magenta, and every page becomes a colour you recognise. Chat messages keep their lime speech bubbles. Re-run Tile pictures after moving tiles between pages to update the colours
v1.7.25
  • + Tile pictures screen (in the sidebar): see your tiles with the CtrlDeck picture that fits each one next to the picture it has now, tick the ones you want to change, and apply. Only tiles with no picture are ticked to begin with, so nothing you already have is replaced unless you choose it, and there is an Undo. It works out each picture from the tile's tag, action, the command it types, its name or the key it sends, and flags tiles whose tag doesn't match the key they send
  • + Pictures for page navigation tiles: a "go to page" tile shows what its page is about (a wheel for Wheel Btns, a spanner for Pit Controls, a speaker for Volume...) with a small arrow and your own name for the tile, and Back, Next and Prev have pictures too. About 20 of them are in the icon library under CtrlDeck
  • ~ Tile labels now say what the tile does: Damage report, Weather report, Weather radar, Take screenshot, Black box: Fuel, PC volume + and iRacing volume +, Next split delta, Leave voice... Your own name for a tile still wins, unless it is only a shortened form of the fuller one (a tile called "Damage" gets the "Damage report" picture)
  • ~ Text on the pictures is now centred: chat message bubbles sat too low, and the numbers and letters in gear, ABS, traction control, DRS and UI tiles were slightly off
v1.7.24
  • + CtrlDeck tile pictures: clean, consistent artwork for about 390 tiles, drawn by the app rather than shipped as image files. Every iRacing control has one (setup adjustments, camera tools, replay, black box...), plus Discord, admin commands, volume and media. They carry context: a pit command shows the car with the tyres it changes, a chat message is a speech bubble with your own words, admin and pit commands are written in plain language. Find them in the icon library under CtrlDeck (browsable by set, such as Suspension or Camera tool), or use them on tiles matched to an iRacing control from Your Tiles, with Undo
  • + Icon packs are now optional downloads instead of part of the installer, which makes the installer noticeably smaller. Choose the ones you want from Icon packs in the icon browser, with a preview of each, and remove any you no longer use. Packs your tiles already use are downloaded again automatically the first time you start after updating (this needs an internet connection)
v1.7.23
  • + Link a wheel button to a CtrlDeck tile instead of giving it its own action, so the two can never drift apart. Bind it from the tile editor (Wheel button section) or from the Wheel bindings window (Run a CtrlDeck tile). The wheel button runs whatever the tile does right now, and it follows the tile when you edit it, drag it to another slot or page, or swap it; tiles with a wheel button show a small ๐ŸŽฎ. Existing wheel bindings keep working as before
  • ~ The iRacing binding check now reads the control profile iRacing is actually using (Documents\iRacing\profiles\controls\<profile>) instead of an old top-level controls.cfg that iRacing stopped updating, and says which profile it read and when iRacing last saved it
  • ~ Fixed how iRacing's key codes are read: F1–F12, punctuation such as [ ] ; and the numpad replay keys were misread, and wheel buttons above 31 or pressed in combination weren't decoded. Checked against every binding on iRacing's own Keybinds screens. Black box tiles are now checked too, and control names use iRacing's wording
v1.7.22
  • ~ Fixed Hotkey buttons whose key is a digit (such as the 1–9 chat macro keys) not firing after being edited: the editor saved the key as a number instead of text, which broke the button press and the iRacing binding check. Existing buttons are repaired automatically when the config loads, and only number fields (volume amounts, page numbers) are saved as numbers now
v1.7.21
  • + Update checks you can see: Settings has a new Updates section with a Check for updates button, a status line ("You're up to date, checked 5 min ago", download progress, or "ready, restart to update"), and a Restart to update button. The tray menu shows the same status and can install a downloaded update. CtrlDeck also re-checks when you bring the window back after an hour or more, and tells you when a manual check fails
  • + Hotkey buttons suggest the iRacing control for their key: if a button sends Alt+M and iRacing has Toggle virtual mirror on Alt+M, it offers that control with one click, and lists the matching controls first in the dropdown
  • + See which Hotkey buttons have an iRacing match: a small ✓ (iRacing has a control on that key), ? (nothing bound), or ⚠ (tagged, but the key is wrong) on each Hotkey tile, plus new "Hotkeys with no iRacing match" and "Hotkeys that match an iRacing control" filters in the Your Tiles tab
v1.7.20
  • + Search everywhere in the iRacing keybindings: the Unbound Controls tab now has a search box, the "iRacing control" field on Hotkey buttons is a type-to-filter box instead of a 369-item dropdown, and the Your Tiles tab has a search box plus the same type-to-filter box for tagging each tile
  • + Choosing a control from the Unbound Controls list while editing a Hotkey button now also tags the button with that control, so the binding check can tell you what to bind in iRacing
v1.7.19
  • + Hotkey buttons can now be tagged with the iRacing control they are meant for. A tagged button is checked against that control's actual iRacing key, with a one-click fix when they differ, or marked "Not iRacing" to skip the check (handy for Discord and other non-iRacing hotkeys on an iRacing profile)
  • ~ Hotkey buttons that aren't tagged are never reported as problems and no longer add to the warning count on the keybindings button. The Your Tiles tab has a filter for problems, unlinked Hotkey buttons, or everything, with Tag and Not iRacing buttons on each unlinked row
v1.7.18
  • ~ Fixed the iRacing keybindings reader showing almost every binding as Shift+key: modifiers are now read correctly, so All Bindings, Check a Key, the suggested free combos, and the new binding check all reflect what iRacing actually has bound
  • + The iRacing binding check now also covers plain Hotkey tiles on an iRacing profile, telling you which iRacing control each key triggers, or that nothing is bound to it
v1.7.17
  • + iRacing binding check: the tile editor now tells you whether the key a button sends matches what iRacing has bound for that control (read from controls.cfg), with a one-click fix when they differ, and a heads-up when iRacing has the control unbound
  • + New "Your Tiles" tab in the iRacing keybindings window lists every tile across all profiles and pages that doesn't match, with an "Only show problems" filter and a โš  count on the โŒจ button so mismatches are visible at a glance
v1.7.16
  • + Go to Page now lets you pick the page from a list showing each page's number and name, instead of typing a page number
  • ~ Moving or deleting a page while a tile editor is open no longer lets that editor save a stale page number over a Go to Page button
v1.7.15
  • + Multi-Action: chain hotkeys, typed text, and waits into a single button press, with a step editor to reorder and edit them. Typed text is sent as scan codes so games see it, and a failed step stops the sequence rather than typing into the wrong place. Built for iRacing chat commands like #cleartires
  • + Volume Meter tiles: a live level meter for the system or a single app. It stretches down through the empty tiles beneath it; press the top tile to raise the volume, the bottom to lower it, and a middle tile to mute
  • + New action browser: Change opens a searchable list of every action, grouped into Basics, Apps, and iRacing, with a category rail that follows your scroll and recently used actions pinned. The button, dial, and wheel-binding editors all share it, and re-picking the same action no longer resets its options
  • + Icon library reorganized: 4,700+ icons grouped by topic and subcategory, with a Flat/Glow switch, a source filter, and recently used icons. Function icons keep their real folder hierarchy instead of being flattened into two giant tabs
  • + Smarter icon search: understands synonyms (gas finds fuel), plurals, British spellings, brand nicknames, and typos, and suggests icons from the button's label and action instead of matching filenames only
  • + Refreshed interface: a device card with brightness, compact integration status, a Profile / Page breadcrumb with a tiles-configured count, sectioned editor panel, and tiles that show what they do instead of raw action ids. Empty tiles are now clearly marked
  • + New CtrlDeck logo and app icon
  • ~ Reordering or deleting profiles now moves connected devices to the right profile instead of leaving them pointed at the old position
v1.7.14
  • + Drag and drop tiles to reorder them on a page, or drag one onto a page in the sidebar to move it there โ€” drops into the first open slot
  • + Copy and paste tiles: right-click a tile for a Copy / Paste / Clear menu, or hover a tile and press Ctrl+C / Ctrl+V
v1.7.13
  • + Added the "Lovely Sim Racing" icon pack (305 icons: apps, lights, messages, music, scenes, settings, sources, streaming, vehicle) to the icon browser, credited and licensed CC BY-NC-SA 4.0
  • + Added a curated set of THK84's Stream Deck Icons (apps, car brands, categories, function icons, games โ€” flat and glow variants) to the icon browser, credited in-app and in the pack's CREDITS.md
v1.7.12
  • ~ Discord voice control (mute/deafen/PTT toggle, live mute state) is currently unavailable โ€” Discord now restricts the "rpc" permission this needs to approved partners only, with no code-side fix possible. The Connect Discord button now says so clearly instead of silently failing
  • + Added a documented workaround: set a keybind in Discord's own Settings โ†’ Keybinds, then bind a CtrlDeck button to that same combo with the existing Hotkey action โ€” works today, no Discord approval needed
v1.7.11
  • + Now Playing buttons can be pinned to a specific app (e.g. only Spotify) instead of always showing whatever's currently playing, with a picker listing active sources
  • + Added a way to give a friendly name to media sources Windows doesn't identify properly (e.g. Firefox), so they show up as something readable instead of a raw id
  • ~ Fixed the Now Playing source picker's Rename button being clipped off-screen in the button editor
v1.7.10
  • + Now Playing: see the current track/artist/album art on a button and control play/pause/next/prev for whatever's actively playing (Spotify desktop, a browser tab, VLC, etc.) — no account or login needed
v1.7.9
  • ~ Fixed button labels and icons appearing mirrored on the Stream Deck+
  • ~ Fixed Stream Deck+ (and likely every other Elgato model) showing as connected then immediately dropping to disconnected: image uploads were sending a malformed HID report (an extra stray byte before the report ID), which the device rejected
  • ~ Fixed Stream Deck detection silently breaking entirely when another process (e.g. the official Elgato software) held an exclusive handle on any single Stream Deck model's USB connection
  • + Added a device scan tool under Settings โ†’ Debug for diagnosing a Stream Deck that isn't being detected
v1.7.6
  • + Stream Deck+ rotary dials: bind a different action to a dial push, clockwise turn, and counter-clockwise turn
  • ~ Fixed the Stream Deck+ not being detected at all, caused by a wrong USB product ID in the device driver
  • ~ Fixed Elgato profile import finding zero profiles on newer Stream Deck software, which moved profiles from the ProfilesV2 folder to ProfilesV3
v1.7.5
  • + Wheel/joystick controller bindings: map a physical button on a sim racing wheel or other USB controller to any CtrlDeck action, independent of the D200/Stream Deck grid
  • ~ Fixed the iRacing key picker hiding controls that are already bound to a wheel/joystick button, so they now show up under "Free Key" with a note showing what they're currently bound to
v1.7.4
  • ~ Fixed the brightness slider not actually changing the Ulanzi D200's screen brightness
  • ~ Fixed the D200's bottom status strip going blank and drifting out of sync with the physical info-window button after a few presses
v1.7.3
  • ~ Fixed CtrlDeck sometimes showing SimHub's UI instead of its own after launch, caused by both apps defaulting to the same local port
  • ~ The app now falls back to another local port automatically if its default port is ever taken by something else, instead of failing to start
v1.7.2
  • ~ Eliminated periodic screen blink on the Ulanzi D200 by using a lightweight keepalive instead of re-uploading all button images
v1.7.1
  • ~ Fixed backend crash on launch when a previous Python process was still running (e.g. after Electron crashed with minimize-to-tray on)
  • ~ Fixed settings reset after update: config migration now works correctly when the AppData folder already exists
v1.7.0
  • + Wallpaper profiles: set a full-deck background image with Fill, Contain, or Custom fit modes
  • + Custom fit mode: drag to reposition and zoom to find the perfect crop across all buttons
  • + Gap-aware wallpaper rendering: images are sliced accounting for physical bezels so lines and shapes flow seamlessly across buttons
  • + Process picker for auto-switch rules: browse running apps from a dropdown instead of typing names manually
  • ~ Auto-switch rule UI redesigned for clarity
v1.6.1
  • ~ Improved crash diagnostics: the app now writes a local log file to help debug startup issues
v1.5.0
  • + Pit road auto page switching: automatically jump to a page when entering or exiting pit road
  • + Page and profile gear modal: reorder with live position list, rename, and delete with confirmation
  • + Auto page switching now supports Session Type and Pit Road trigger groups
  • + iRacing Keybindings browser: browse all bound controls, check for conflicts, find unbound controls with suggested combos
  • + Per-app volume controls and per-user Discord volume
v1.4.0
  • + iRacing live telemetry display on buttons (speed, gear, RPM, fuel, brake bias, lap time, and more)
  • + Auto page switching based on iRacing session state
  • + Discord voice activity integration: mute, deafen, PTT, channel join, volume controls
  • + Built-in icon browser with 200+ icons
  • + Label overlay rendered directly on physical device buttons
v1.3.0
  • + Elgato Stream Deck support alongside Ulanzi D200
  • + Import profiles from Ulanzi Studio or Elgato Stream Deck software
  • + Multi-page layouts with page navigation actions
  • + Per-app volume controls
  • + Profile management and backup/restore
v1.2.0
  • + Multi-device support: Ulanzi D200 and Stream Deck simultaneously, each with its own profile
  • + Multiple Stream Deck model support (Mini, MK.2, XL, Stream Deck +)
  • + OBS Studio integration: scene switching, record and stream toggle with live state
  • + Full iRacing SDK actions: pit service, replay, camera control

Ready to take control?

Download CtrlDeck and configure your first button in under 5 minutes.

โฌ‡ Download CtrlDeck for Windows
Windows 10/11  ยท  Ulanzi D200 and/or Elgato Stream Deck required  ยท  Auto-updates included