Straight answers to the questions people file issues about. If your question isn’t here, check Data sources, Themes, or Troubleshooting.
Platform and requirements
Does it work on macOS or Linux?
No. Windows only, and that isn’t going to change. The plugin reads HWiNFO’s data locally, and HWiNFO is a Windows-only application. There is no HWiNFO build for macOS or Linux for the plugin to read from, and the interfaces it uses (a named shared-memory section, the HKCU\Software\HWiNFO64\VSB registry key) are Windows constructs. On a Mac the action would have nothing to read.
You also need 64-bit (x64) Windows. On Windows-on-ARM the key shows a Needs x64 / Windows screen: HWiNFO’s interfaces aren’t readable there.
What are the exact requirements?
- Windows 10 or later, x64
- Stream Deck software 6.9+
- HWiNFO (installer or portable) running, publishing on Shared Memory Support or Gadget reporting
Dials are optional: a Stream Deck + or Stream Deck + XL adds the Sensor Dial action, but the key action works on any Stream Deck.
Is this the official HWiNFO plugin? Is it affiliated with REALiX?
No. It’s an independent, MIT-licensed project, not affiliated with or endorsed by REALiX/HWiNFO. It’s a ground-up TypeScript rewrite inspired by shayne/hwinfo-streamdeck, the original Go-based plugin (no code shared).
HWiNFO editions and the 12-hour limit
Do I need HWiNFO Pro?
No. The free version works. The only difference that affects this plugin:
- HWiNFO free: Shared Memory Support auto-disables after 12 hours of runtime. After that, in the default Auto mode the plugin falls back to the Gadget registry by itself (Gadget reporting has no time limit) and upgrades back to Shared Memory automatically if you re-enable it.
- HWiNFO Pro: no 12-hour limit; Shared Memory stays on permanently, so you keep min/max/avg and full sensor coverage indefinitely without touching anything.
If you never leave HWiNFO running longer than ~12 hours between restarts, free + Shared Memory is fully equivalent. If you run HWiNFO 24/7 and want min/max/avg to stay available, either buy Pro or enable Gadget reporting for the sensors you care about (see below).
Why did my values freeze / stop updating after about 12 hours?
That’s the free version’s Shared Memory timer expiring. HWiNFO stops publishing to shared memory after 12 hours of runtime and marks the mapping disabled. What you see depends on your data source:
- Auto mode (default): the plugin detects the dead mapping and falls back to the Gadget registry, if you’ve enabled Gadget reporting for those sensors. If you haven’t, keys show
Shared Memory / is off. - Shared Memory only mode: no fallback; keys show
Shared Memory / is offuntil you re-enable Shared Memory Support in HWiNFO (Settings → Shared Memory Support) or restart HWiNFO.
Fixes, cheapest first:
- In HWiNFO Settings → Shared Memory Support, toggle it back on (resets the 12-hour clock).
- Enable Gadget reporting on the sensors you use, so Auto mode has something to fall back to permanently.
- Buy HWiNFO Pro to remove the limit entirely.
Note: The plugin considers data “stale” when HWiNFO’s poll timestamp hasn’t advanced for 15 seconds, then shows the
Not updatingscreen. So a frozen value shows up as a status screen within seconds, not as silently wrong numbers.
Data sources
Which data source should I use?
Leave it on Auto (the default) unless you have a specific reason not to. Auto uses Shared Memory whenever it’s available (full data), and silently falls back to the Gadget registry when it isn’t (e.g. after the free 12-hour timeout), then upgrades back when Shared Memory returns.
| Shared Memory (preferred) | Gadget registry (fallback) | |
|---|---|---|
| Sensor coverage | everything HWiNFO measures (~500+) | only sensors you tick in HWiNFO |
| Min / max / average | yes (from HWiNFO) | no (current value only) |
| Free-version limit | disables after 12 h | none |
| Enable in HWiNFO | Settings → Shared Memory Support | right-click a sensor → Report value in Gadget |
Set it under Advanced → Data source in any key’s settings, or under Dial gestures & advanced → Data source on a dial (Auto, Shared Memory only, Gadget registry only). It’s a global setting: it applies to every key and dial.
See Data sources for the full breakdown.
Why are min / max / avg showing the current value?
Because you’re reading from the Gadget registry, which only exposes the current value; HWiNFO doesn’t write min/max/avg to the Gadget registry at all. The plugin fills those in with the current value, so a MIN/MAX/AVG stat mode on a key just repeats the live number.
This happens when Shared Memory isn’t available, most commonly after the free version’s 12-hour timeout in Auto mode, or if you’ve forced Gadget registry only. When it’s active, the settings panel shows a note. To get real min/max/avg back, re-enable Shared Memory Support in HWiNFO (or use Pro).
Note: On a dial, min/max/avg always work regardless of source: the dial tracks its own session stats in the plugin (see next question), so it never depends on HWiNFO’s fields.
What’s the difference between the key’s min/max/avg and the dial’s?
They’re two different things:
- Key (Sensor Reading): the
Showsetting and the key-press cycle display HWiNFO’s own min/max/avg, measured since HWiNFO started (or since you last reset them inside HWiNFO). These come from the shared-memory data, so they’re empty (equal to current) on the Gadget source. - Dial (Sensor Dial): min/max/avg are a session the plugin accumulates itself, kept per reading and keyed by HWiNFO’s stable sensor identity. Rotate away and back and that reading’s own session numbers are still there; they survive page switches and profile changes for up to 30 minutes off screen. Push the dial to reset them. This works on any data source.
Sparklines
Why do my sparklines fill in slowly when a graph starts from empty?
Sparkline history lives with the poller and keeps collecting while a key is off screen (as of 1.4; between 1.1.6 and 1.3 a page unviewed for over a minute rebuilt from empty), as long as a Sensor Reading key or Sensor Dial is visible somewhere; HWiNFO Control keys do not keep polling alive. If none of them are visible, or the machine is asleep, the poller stops entirely (see the CPU answer below), so collection pauses and picks up from the same samples when a key comes back. The ring is spaced by sample, not by clock, so after a long pause the old points sit next to the new ones until the line refills; nothing marks the gap. A graph only builds from empty the first time a reading is shown, after a plugin or Stream Deck restart (history is plugin memory), or after a poll-interval change.
When it does build from empty: a new point lands at the slower of HWiNFO’s update rate and the plugin’s poll interval, never faster than one per second. The sparkline only gains a point when HWiNFO produces a genuinely fresh reading; a frozen source never pushes duplicate points (that would flatten the line). At the defaults (HWiNFO polling every 2 seconds, 36 samples) a full graph takes ~72 seconds to build from scratch. Lowering HWiNFO’s polling period (HWiNFO → Settings → Polling period) fills it faster, down to the 1-second floor, and only if the plugin’s own Poll every interval isn’t the slower side.
Two more sparkline behaviors:
- Toggling °C/°F no longer resets the graph: it stores native values and just relabels.
- A frozen HWiNFO holds the line’s last real shape instead of flattening it.
Changing the plugin’s Poll every interval (Advanced) does clear the ring: the history is index-spaced, not time-stamped, so it can’t honestly span a cadence change.
Performance and resource use
Does it slow down my PC? How much CPU and RAM?
Effectively no. Measured on a live page at a 1-second poll (sources and raw numbers in PERF.md in the repo; node scripts/perf-report.mjs, the e2e load test and scripts/soak-monitor.mjs regenerate them):
- CPU: a fraction of one percent of one core (~0.2 % long-run average on the live deck; zero polling cost when no Sensor Reading key or Sensor Dial is on screen, because the poller stops entirely).
- RAM: ~40–48 MB RSS, stable across externally monitored multi-hour soaks (PERF.md carries the measured slopes).
The parse path is incremental: one poll tick to decode ~520 readings costs about 10 µs with near-zero allocation (measured, see PERF.md’s 1.4.1 entry). Most of that memory is the Node runtime the Stream Deck app hosts plugins in, not the plugin’s own data; the plugin’s native bridge is a single 152 KB addon.
Does it get slower or use more CPU if I add more keys?
No. There is one reader regardless of how many keys and dials are visible: it opens a single data source, reads once per poll tick, and fans the result out to every key. Adding keys costs only the tiny per-key render. A load test with one key for every live reading (518) plus 8 dials at a 250 ms poll stayed stable.
And when no Sensor Reading key or Sensor Dial is on screen (you switched to another page/profile), the poller stops entirely (zero CPU, flat RAM) and restarts when a key reappears.
How many sensors / keys can I use?
There’s no practical limit you’ll hit. HWiNFO typically exposes 500+ readings; the picker searches across all of them (the list shows up to 150 rows at once and asks you to refine the search past that). You can place as many keys and dials as your Stream Deck hardware has, and one key isn’t limited to one reading: the key’s Layout setting puts two, three or four readings on a single key, so a deck can show more readings than it has keys. All of them read from the same single poller. The load test above ran 518 key contexts + 8 dials without trouble.
Can multiple keys show the same sensor?
Yes. Put the same sensor on as many keys as you like; each can have its own label, layout, theme, text color, decimals, unit, stat mode, display (sparkline, bar or ring) and thresholds. They all read from the shared poller, so extra copies cost nothing meaningful.
Alerts, thresholds and colors
Why is a key amber or red?
It’s crossed a threshold you set. In the key’s settings:
- Warn at → the whole key flips to an amber field with black text.
- Critical at → a red field with white text.
With Display set to Bar or Ring, those same thresholds also mark muted amber and red zones on the gauge track, escalating toward the alarmed end (the high side normally, the low side when Direction alerts below). The zones are fixed landmarks: they show whenever the thresholds are set, crossed or not, so red on the track is not by itself an alert. The field flip is. See Display: sparkline, bar, ring.
Alerts always track the live value (not the displayed stat: a key showing MAX still colors by the current reading). By default higher is worse; tick Direction → Alert when value drops below thresholds to flip the comparison (for fan RPM, free disk space, etc.).
On a dial, the alert colors the range-bar fill instead of the whole face; the touchscreen slot is too small for a full field flip. Once you set thresholds, the bar’s track also marks the warn and critical bands in dimmed amber and red, so you can see where the trip points sit before the value reaches them. The two Overview views (two rows and three rows) have no range bar: there an alerting row shows its value in the alert color instead. See Sensor Dial.
If a key is amber/red and you didn’t mean to set a threshold, clear the Warn at / Critical at fields. The two alert palettes are global and never themed, so warn and crit stay unmistakable on any theme and with any color-vision deficiency.
How do I reset a dial’s session min/max?
Push the dial (press it in). That resets the current reading’s session min/max/avg to the current value (on the Elite preset it’s the half-second long press; the Reset reach setting can widen a reset to the whole rotation set or every dial, and an HWiNFO Control key can fire it remotely). Since 1.1.10, rotating away no longer wipes a reading’s session: stats are kept per reading and survive rotation, page switches and profile changes for up to 30 minutes off screen. There’s no reset for the key’s stats; those are HWiNFO’s own, reset inside HWiNFO.
Themes
Why isn’t “Deck default” the same as Void?
“Deck default” isn’t a theme; it’s a link. It means “this key follows whatever the deck-wide theme is set to,” which you set under Advanced → Deck theme. It happens to resolve to Void on a fresh install because Void is the default deck theme, but they’re not the same choice:
- Pick the Void chip → this key is pinned to Void forever, even if you later change the deck theme.
- Pick the Deck default chip → this key changes whenever you change the deck-wide theme.
In the gallery the Deck default chip is drawn with a dashed border and a small link badge so it’s structurally distinct from the preset it currently resolves to; the resolved theme is named in its tooltip and in the help line under the gallery (e.g. “currently Void”).
Also note: existing installs that predate the theme system stay on Graphite after updating, not Void, so the deck default you inherit may be Graphite, not the fresh-install Void. That’s deliberate, so an update never changes how your deck already looks. See Themes.
A per-key theme won’t follow my deck theme: why?
Because a per-key pick always wins. The Deck theme (Advanced) only affects keys set to Deck default. If a key has its own theme selected, changing the deck theme won’t touch it; pick the Deck default chip on that key to make it follow again.
Privacy
Is my data sent anywhere? Any telemetry?
No. No ads, no telemetry, no network requests (the plugin’s only connection is the local one to the Stream Deck app). It reads HWiNFO’s shared memory / registry locally and renders to your Stream Deck. Nothing about your hardware, sensors or usage leaves your machine. It’s MIT-licensed; the source is auditable.
Is the native binary signed? How do I verify what I installed?
The plugin’s native piece, bin/hwsm.node, is unsigned: it carries no Authenticode certificate, which is also why an antivirus sometimes eyes it. What you can verify is the bytes. Every GitHub release from 1.4.0 on prints the addon’s SHA-256 and the pack’s SHA-256 in its notes. Compare your installed copy in PowerShell:
Get-FileHash "$env:APPDATA\Elgato\StreamDeck\Plugins\com.lawrensen.hwinfo.sdPlugin\bin\hwsm.node" -Algorithm SHA256
A GitHub-release install matches its published hash byte for byte. Reporting a security problem privately: see SECURITY.md.
Setup and portability
Can I use the free / portable HWiNFO?
Yes to both. The free version works (with the 12-hour Shared Memory caveat above). The portable build also works identically, but only while its window is open. The portable build has no installer to add it to autostart, so:
- Add HWiNFO to Windows autostart yourself if you want the deck populated at login.
- Don’t run portable HWiNFO from a folder that needs admin rights unless Stream Deck is also elevated (see the elevation question below).
Do keys survive reboots, HWiNFO restarts, or reordering sensors in HWiNFO?
Yes. A key stores HWiNFO’s stable identity for the reading (sensor-id : instance : reading-id), not a position in a list. So keys keep working across restarts and if you reorder sensors in HWiNFO. If a saved sensor genuinely disappears (hardware/driver change, or you renamed a sensor profile), the key shows Sensor missing / pick again: reopen its settings and pick it again.
Can I use Stream Deck + dials without HWiNFO Pro?
Yes. Dials have the same requirements as keys: free HWiNFO with Shared Memory or Gadget reporting is enough. The dial’s session min/max/avg are computed in the plugin, so they work on any data source, Pro or not.
A key says “Access denied”: what’s wrong?
HWiNFO and Stream Deck are running at different privilege levels. Windows blocks reading the shared memory across that boundary. Fix it by running both elevated or both normal; most people just restart HWiNFO without “Run as administrator.” (On the free version, Gadget reporting also works across privilege levels.) See Troubleshooting for the full status-screen list.
What do the two-line screens on my keys mean?
They’re status screens telling you exactly what to fix. As of 1.1.6 they’re pure-black, two short lines (a soft-white headline over a dim fix line):
| Key shows | Meaning / fix |
|---|---|
Start HWiNFO / not detected | HWiNFO isn’t publishing on either interface. Start it with Shared Memory or Gadget reporting on. |
HWiNFO busy / retrying | HWiNFO is running but its shared memory was locked at that instant. The plugin retries on the next poll; nothing to do. |
Shared Memory / is off | HWiNFO reports sharing disabled (including after the free version’s 12-hour timer): re-enable it (or use Gadget; Auto falls back by itself). |
Not updating / check sharing | Values frozen for 15 seconds (e.g. the Sensors window is closed). check Gadget instead when reading from Gadget. |
Access denied / un-elevate | Privilege mismatch: run HWiNFO and Stream Deck at the same level. |
Tick sensors / in Gadget | Gadget reporting is on but no sensors are ticked; tick some in HWiNFO. |
Pick a sensor / in settings | No sensor selected yet: open the key’s settings. |
Sensor missing / pick again | The saved sensor isn’t in HWiNFO’s current output; pick it again. |
Needs x64 / Windows | Not a 64-bit Windows machine (Windows-on-ARM / other); unsupported. |
Plugin damaged / reinstall | The plugin’s native bridge (bin/hwsm.node) is missing, was blocked from loading, or does not match this plugin version; often an antivirus quarantine. Reinstall the plugin, and allow that file in your antivirus if it comes back; it is unsigned, so verify its hash first. |
