Colored push-button macros and live mini screens for Windows. Use it on your desktop, or float it in VR as a real SteamVR overlay.
Website Β· Download Β· Build a plugin Β· Full guide
A grid of big, colored buttons that run macros, plus mini screens that show live information (SteamVR battery, the song playing, your stream's ad timer and viewers, a clock, dice...). Press a button and it mutes your mic, switches your OBS scene, sends a chat message on Twitch, Kick or YouTube, changes your Voicemod voice, shows your CPU and GPU temperature live, changes your Voicemeeter volume, posts "I'm live" to Discord, jumps in VRChat, and much more.
It is a native SteamVR overlay: grab it, move it, resize it, snap it to your wrist, or leave it in the room, all from inside VR, and edit everything without taking the headset off. No VR? It works just as well as a desktop window (and you can hide that window if you only use VR).
A new Base Stations plugin, the wrist overlay that fades with your arm, and a big tune-up. Full list in the release notes.
- π‘ Base Stations (new): turn your SteamVR base stations on, to sleep or to standby from a button, over Bluetooth, straight from your PC (no headset, no SteamVR, no Windows pairing). "All on" / "all asleep" checks every station really switched and tries again if one missed it. Flash blinks a station's light so you know which is which, a mini screen shows how many are on, and an automatic trigger can wake them when SteamVR starts. 2.0 stations (Valve / Index) are tested on real hardware. 1.0 stations (HTC Vive) are experimental and still need testing with a real 1.0 station: they need their ID, the 8 letters and numbers after "ID" on the sticker on the back of the station (take it off its mount, or hold your phone behind it and take a photo); its last 4 match the end of the station's Bluetooth name.
- ποΈ The wrist overlay fades with your arm: turn Fade away on and the panel fades out when you turn your wrist away or look elsewhere, and back in when you raise it.
- π Safer: an up-to-date Electron (44); every password, key and token you type into the app is now encrypted with your Windows account (not in your settings file); importing a layout shows what it can do first, keeps your own settings, and switches off buttons that would fire on their own until you choose to keep them.
- π Fixes: hardware widgets no longer freeze on one number; a Twitch hiccup no longer signs you out; a web service that never answers can no longer leave a button stuck; OBS buttons pressed right after start-up wait for OBS instead of failing.
- β¨ Better: exported layouts include their pictures; Copy diagnostics in Settings β About for bug reports, and a log file on disk; a faster first start (the Windows helpers come ready-built); Twitch checks your sign-in every hour as Twitch asks; YouTube uses less of its daily allowance.
- π§© Plugin authors:
ctx.oauthsign-in helpers,ctx.changed()for live widgets, password fields encrypted for you, andplugin-api.d.tsfor autocomplete.
- π Libre Hardware Monitor and π₯οΈ HWiNFO (new): live CPU, GPU, memory, drive and network stats as mini screens. A stat with a small graph that turns amber and red when it gets hot (CPU / GPU temperature and usage, GPU memory, power, clock, fan, memory used, drive temperature, network speed, or any sensor you pick), an overview list, "hottest parts", network speed and drives. Buttons can also light up on "the CPU is hot", "the GPU is hot", "a drive is hot" or "memory is nearly full", and a button can pop a stat up. Read-only: nothing on your PC is changed.
- Pick whichever you like: Libre Hardware Monitor is free with no time limit (turn on its Remote Web Server). HWiNFO needs Shared Memory Support ticked and HWiNFO restarted once; the free version switches it off again after 12 hours, HWiNFO Pro does not.
- π§© Plugin authors: a widget can now draw a small graph (
spark). See the Plugin reference.
- π Voicemod (new): change voice (the whole list, or only Voicemod's or your Community voices), random voice, voice changer / mute / hear-myself / background effects on and off with buttons that light up to match, and play any soundboard sound (all sounds, or one soundboard: yours are found by themselves and listed first). Needs a Voicemod client key: press Instructions on the Voicemod card.
- π£οΈ TeamSpeak 3 (new): mute your microphone or speakers and set yourself away, with buttons that follow your real TeamSpeak state. TeamSpeak 5 / 6 have no way for other apps to control them.
- ποΈ Mix It Up (new): run your Mix It Up commands, send a chat message, clear chat, and turn commands on or off, through its Developer API.
- π Better pick lists everywhere: long lists (voices, sounds, scenes, actions) scroll, open showing everything, and narrow as you type, with several words in any order ("demon radio" finds "Radio Demon").
Everything is a plugin now. OBS, Twitch, VRChat, Spotify, SteamVR, Voicemeeter and the rest were moved out of the app's core into plugins that you can switch on and off, and you can write your own.
- π§© A real plugin system. A plugin is a folder with a few small JavaScript files: no build step, no touching the app. Drop it in, restart, and it has its own settings card, actions, mini screens, sign-in and connection status. Start with the step-by-step tutorial: Build your own plugin.
- π¬ Discord (new): post "I'm live" messages, cards and screenshots through a webhook, share a new Steam screenshot or your last VRChat photo, and press your Discord mute / deafen / push-to-talk shortcuts.
- π Discord Notifications (new): mini screens that show who last messaged you, with filters for DMs,
@everyone,@youand server events, and buttons that light up on a new message. - π’ Kick (new): chat, title and category, ad breaks and timeouts, live status and viewers, through Kick's official API. Press Connect and log in on Kick.
- π€ Streamer.bot (new): run your Streamer.bot actions from a button (emote-only, slow mode, clear chat, anything you built), by name and grouped like in Streamer.bot itself. It uses Streamer.bot's normal WebSocket server, so it works with the default settings and no password.
βΆοΈ YouTube (new): live chat, go live and end stream, ad breaks, title, description and category, public / unlisted / private, plus live-status and channel-number mini screens. See the note below about signing in.- π Any grid size, up to 100 Γ 100, with "Fit the whole page on screen" so a big grid shrinks to the window instead of scrolling.
- β©οΈ A Back button in the action picker, so after picking something you land where you were in the long list.
- π Optional update check (off by default): Settings β General β Check for updates. When a new version is out you get a box with a link, a Download button and a Skip button. Portable copies save the new exe next to the old one; installed copies can install it and restart for you.
- π One connections icon in the top bar (dot and count) that opens a list, instead of one chip per plugin.
- π "Instructions" buttons on plugins that need a one-time setup, with numbered steps, links that open in your browser, and Copy buttons.
- ποΈ Mic and speaker buttons tied to a device now follow that device's real Windows mute state.
- π A website with the privacy policy and terms: vrmacropad.jayconius.com.
Note
YouTube sign-in: the one-click Log in with Google is not available yet. It is waiting for Google to verify the app, which I can't rush. The YouTube plugin still works today: open Settings β Plugins β YouTube, press Instructions, and follow the steps to make your own free Google app (about five minutes, no cost), then paste its Client ID and Secret. Once Google verifies the app, it will become a single button.
Everything from 2.0 is still here: the native SteamVR overlay with its dashboard entry and in-VR editor, button effects, your own pictures and GIFs, Voicemeeter, the SteamVR functions, VRChat OSC, and the buttons-only view. VR overlay guide
| πΏ Installer | Start menu + desktop shortcut, uninstaller. VR-Macro-Pad-Setup-x.y.z.exe |
| π Portable | One file, nothing to install, run it from anywhere. VR-Macro-Pad-x.y.z-portable.exe |
Note
The exes are not code-signed yet, so Windows SmartScreen may say "unknown publisher". Click More info β Run anyway.
The first start takes a few seconds while it builds its small Windows helper programs.
Your layout and settings live in %APPDATA%\VR Macro Pad, so updating (or switching between installer and portable) keeps them.
- Start it. You get a starter layout with a mic button, volume, media and a few tools.
- Press a button to run it. Buttons light up to match reality (mic muted, recording, emote-only on...).
- Hold the π button for a second to unlock editing. Then drag buttons to move them, drag a corner to resize, click one to edit it, or press οΌ Add button.
- It locks itself again a few minutes later, so a stray click in VR can never rearrange your deck.
| ποΈ Audio | mic mute, output mute, switch devices, volume, per-app volume |
| β¨οΈ Keyboard & system | shortcuts, type text, media keys, launch programs, open links |
| π₯½ SteamVR | start / quit / restart, battery on a mini screen, supersampling, motion smoothing, brightness, dim the view, play-area bounds, performance graph, recenter |
| ποΈ Voicemeeter | mute / solo / route, gain and fades, macro buttons, recorder, audio devices, per-app volume, any script |
| π¬ OBS | switch scene, record, stream, save replay, mute a source |
| πΎ VRChat | mic mute, chatbox (with song / time), avatar parameters and steps, game controls, walk / turn, any OSC message |
| π Twitch | chat messages, emote-only, followers-only, shield mode, ads, clip, raid, title... |
| π’ Kick | chat, title and category, ad breaks, timeouts |
| live chat, go live / end stream, ad breaks, title / description / category, public / unlisted / private | |
| π€ Streamer.bot | run any of your Streamer.bot actions |
| ποΈ Mix It Up | run your commands, send a chat message, clear chat, turn commands on or off |
| π Libre Hardware Monitor | live CPU, GPU, memory, drive and network stats, and buttons that follow "the GPU is hot" |
| π₯οΈ HWiNFO | the same stats from HWiNFO's Shared Memory Support |
| π Voicemod | change voice, random voice, voice changer / mute / hear-myself / background effects, play or stop soundboard sounds |
| π£οΈ TeamSpeak 3 | mute your microphone or speakers, set yourself away |
| π‘ Base Stations | turn base stations on, to sleep or to standby over Bluetooth, flash one to find it (1.0 stations experimental) |
| π¬ Discord | post messages, cards and screenshots, share a Steam screenshot or VRChat photo, mute / deafen / push-to-talk |
| π΅ Spotify | play / skip, shuffle, repeat, seek, volume, and Like |
| through Pear Desktop: like, shuffle, repeat, volume | |
| π Web & smart home | webhooks, Home Assistant |
Every button is a list of steps with optional delays. Give it a picture or GIF (a different one when active), and an animation for its states (pulse, flash, glow, ripple, hazard stripes...) so a live mic or a running stream cannot be missed. It can also fire on its own: a hotkey, an app starting or closing, a state changing (recording started, low battery, ad coming up...), or a time of day.
Buttons that show live information instead of just running steps:
| π Clock, β³ Timer, β±οΈ Stopwatch | timers survive restarts and can run actions when they finish |
| πͺ Coin flip, π² Dice | d4 to d100, advantage / disadvantage, and they can post the result to Twitch chat |
| π SteamVR battery | headset, controllers, trackers and base stations, as a list or as pictures |
| πΆ Now playing | album cover, title, progress, controls. Spotify and most players |
| πΊ Stream status | Twitch, Kick and YouTube: live badge, viewers, uptime, and the countdown to your next ad |
| π Discord messages | who last messaged you, and buttons that light up on a new one |
| π‘ Base stations | how many base stations are on, and each one's state |
| π Hardware stats | CPU / GPU temperature and usage with a live graph, overview, hottest parts, network speed, drives. From Libre Hardware Monitor or HWiNFO |
One click on the π button (or Ctrl+Alt+Shift+V) makes everything except your pages and buttons fully transparent, so they float over your game or desktop.
- Settings β VR overlay β Show the deck in SteamVR, then start SteamVR. (The app never starts SteamVR itself.)
- Point a controller at the deck and pull the trigger. Hold the trigger on the dotted handle to grab it; carry it to your other wrist and let go to snap it there.
- Open the SteamVR menu: VR Macro Pad is in the bar at the bottom, with Controls and a full Editor.
It works next to XSOverlay and OVR Toolkit and with any SteamVR headset (Quest over Link / Air Link / Virtual Desktop, Index, Vive, Steam Frame streaming...). The full guide is docs/VR-OVERLAY.md.
Prefer a window capture? The desktop window still works with OVR Toolkit / XSOverlay / Desktop+, and clicking it does not steal focus from your game.
π Setting up OBS, VRChat, Twitch, Kick, YouTube, Streamer.bot, Mix It Up, Voicemod, TeamSpeak 3, Libre Hardware Monitor, HWiNFO, Base Stations, Discord, Spotify Like, Pear...
Open Settings β Plugins and expand the plugin. Ones that need a one-time setup have an Instructions button.
| How | |
|---|---|
| OBS | Tools β WebSocket Server Settings β enable. Enter the port and password on the OBS card. |
| VRChat | Action Menu β Options β OSC β Enabled. |
| Twitch | Connect Twitch, then approve on twitch.tv. Nothing else to set up. |
| Kick | Connect Kick, then log in and approve on kick.com. Nothing else to set up. |
| YouTube | Not one-click yet (Google's verification is pending). Press Instructions on the YouTube card, make your own free Google app, paste its Client ID and Secret, then Connect YouTube. |
| Streamer.bot | In Streamer.bot: Servers/Clients β WebSocket Server β start it (the defaults are fine). Then the plugin lists your actions. Only fill in a password if you turned on Authentication. |
| Mix It Up | In Mix It Up: Services β Developer API β Connect. Then Save and test connection on the Mix It Up card. |
| Voicemod | Voicemod's Control API needs a client key, which you ask Voicemod for (the Instructions button has the link). Paste it on the Voicemod card and press Save and test connection. A sound or soundboard you have just added only shows up after it has been played once in Voicemod (then press β³). |
| TeamSpeak 3 | In TeamSpeak 3: Tools β Options β Addons β ClientQuery β Settings, copy the API key into the TeamSpeak 3 card, connect to a server, then Save and test connection. |
| Libre Hardware Monitor | Run Libre Hardware Monitor (as administrator, so it can read every sensor), then Options β Remote Web Server β Run. Press Save and test connection on its card. |
| HWiNFO | In HWiNFO Settings (General / User Interface tab) tick Shared Memory Support, press OK, then restart HWiNFO (close it completely, also from the tray, and open it again) with its Sensors window running. The free version turns Shared Memory Support off after 12 hours: tick it again and restart. Then press Save and test connection. |
| Base Stations | Needs Bluetooth on the PC (built in, or a small USB adapter) near the stations; nothing is paired in Windows. Press Find base stations, press Flash on each to see which one it is, name them, Save. A 1.0 station (experimental) also needs its ID: the 8 letters and numbers after "ID" on the sticker on the back of the station (take it off its mount, or hold your phone behind it and take a photo); its last 4 match the end of the station's Bluetooth name. Type it in its row and press Wake to identify to check it. |
| Discord | Channel settings β Integrations β Webhooks β copy the webhook URL into the Discord card. The mute / deafen / push-to-talk buttons press the shortcuts you set in Discord. |
| Spotify | Play, skip, shuffle, repeat, seek and volume need no setup and no login. Like needs a one-time connection with your own Spotify developer app (see the guide). |
| YouTube Music | In Pear: Plugins β API Server β enable. Then Connect Pear. |
| SteamVR | Nothing. It only looks at SteamVR when something needs it, and never starts it. |
| Voicemeeter | Install Voicemeeter (Standard, Banana or Potato) and start it. Nothing to configure. |
- Everything stays on your PC. The app runs a small web server on
127.0.0.1only, protected by a secret token. - Logins (Twitch, Spotify, Kick, YouTube...) and every password, key or token you type into the app (OBS password, Voicemod key, Home Assistant token...) are stored encrypted with your Windows account, never in your layout file or its backups, so sharing a layout never leaks them.
- Kick's and YouTube's one-click sign-in goes through a tiny free relay that only swaps the sign-in code for a token (those services need a secret the app can't safely carry). It stores nothing. Details: Privacy policy.
- The update check is off by default. When on, it asks GitHub for the latest release number and nothing else, and it downloads only from this project's releases, verifying size and checksum first.
- Editing (and linking accounts) is locked by default and can be limited to a hotkey or the tray menu.
- Importing somebody's layout never runs anything by itself: the app first lists what the layout can do (start programs, type text, send web requests), takes only the pages unless you say otherwise, and switches off buttons that would fire on their own until you choose to keep them.
- The activity log is saved in
logs\activity.login the data folder. Copy diagnostics (Settings β About) leaves out your names, keys and passwords.
- Windows only.
- YouTube's one-click sign-in is not available yet (waiting on Google's app verification). Use your own Google app for now (Instructions button). Once verified, anyone will be able to log in with one click, and it will still show Google's normal permission screen.
- Hardware stats were tested against a real Libre Hardware Monitor and a real HWiNFO. Which sensor counts as "the CPU temperature" is picked automatically (the package temperature, or the GPU that is busiest); any reading can be picked by hand instead. HWiNFO must be restarted after Shared Memory Support is ticked, and the free version stops sharing after 12 hours.
- Base Stations: 2.0 stations were tested on real ones. 1.0 stations (HTC Vive) still need testing with a real 1.0 station: the commands match open-source tools that people use with them, but it is not confirmed yet. If you have one, please report whether it works.
- Tried less in 3.0.1: Voicemod was tested against a real Voicemod. Mix It Up and TeamSpeak 3 were built from their official documentation and tested against stand-ins, not yet against the real apps. Reports welcome!
- Voicemod only tells other apps about a sound after it has been played once in Voicemod, and never says which voices are on a soundboard (only which sounds), so voices have no soundboard lists.
- The YouTube plugin has no actions that target one viewer (bans, timeouts) on purpose, and Kick has no ban / unban either: they are slow and error-prone to do from inside VR.
- Tried on real hardware: the overlay, the dashboard entry and editor. Not tried on real hardware yet: the SteamVR battery screen, Voicemeeter (built against VB-Audio's official documentation and a built-in test double), headset brightness (depends on the headset's driver; "Dim the view" works everywhere), and the SteamVR keyboard in the VR editor. Reports welcome!
- Spotify Like talks to Spotify's Web API, which (since Feb 2026) only lets a development-mode app work while its owner has Premium, for up to 5 people. So each person uses their own Client ID.
- Keystrokes can't be sent into programs running as administrator unless VR Macro Pad runs as administrator too.
- The overlay needs SteamVR. There are no controller bindings yet (grab and click use the laser and trigger).
- The "install and restart" update path (installed copies) has had less real-world testing than the rest; if it ever misbehaves, download the Setup from the release page and run it yourself.
- OVR Advanced Settings cannot be controlled from other apps, so its features are done directly where SteamVR allows (supersampling, brightness, bounds...). VRChat's web API (friends, status) is not used.
Every integration above is a plugin, and yours works exactly the same way: a folder with a few small JavaScript files, no build step. Two guides:
- π Build your own plugin: a step-by-step tutorial (a real Discord webhook example), a cookbook (settings, logins, polling, mini screens, saving data) and a FAQ. Also as a single web page.
- π Plugin reference: every field of
plugin.js, the runtime API, and how the app loads plugins. - Working examples live in
docs/example-plugin,docs/example-plugin-discordanddocs/example-plugin-login(a full sign-in flow against a fake service).
git clone https://github.com/Jayconius/VRMacroPad.git
cd VRMacroPad
npm install
npm start # run it
npm test # about 440 tests (plus: npm run lint, npm run test:ui, npm run test:overlay)
npm run dist # build the installer and portable exe into dist/Needs Node.js. The full guide (every setting, how to add an action or a mini screen) is in docs/GUIDE.md.
A source build uses the same sign-in relays for Kick and YouTube as the released app. A fork with its own relay can point at it with plugins/kick/kick-app.json / plugins/youtube/youtube-app.json (examples sit next to them).
- OpenVR SDK by Valve (BSD-3), used for the overlay and to read SteamVR batteries and settings.
- Voicemeeter and its Remote API by VB-Audio (the API is used through the DLL that comes with Voicemeeter; nothing of theirs is bundled).
- Libre Hardware Monitor (MPL-2.0) and HWiNFO by Martin Malik (REALiX): the Hardware plugins only read the numbers these free programs show, through Libre Hardware Monitor's web server and HWiNFO's Shared Memory Support. Nothing of theirs is bundled.
- Voicemod (Control API), Mix It Up (Developer API) and TeamSpeak (ClientQuery): controlled through their own official interfaces on your PC; nothing of theirs is bundled.
- The base station Bluetooth commands follow the open-source Lighthouse PM and ShayBox/Lighthouse projects; no code of theirs is used.
- The device pictures come from the author's other app, OhFudgeMyBatteryChat (MIT).
- Built with Electron and ws.
VR Macro Pad is an independent project. It is not affiliated with Macro Deck (a different app by SuchByte), Valve, HTC, Meta, Twitch, Kick, Google / YouTube, Discord, Streamer.bot, Spotify, OBS, VRChat, VB-Audio, Voicemod, Mix It Up, TeamSpeak, Libre Hardware Monitor or HWiNFO. Those names belong to their owners.
Made by Jayconius (jayconius.com) and Claude, an AI assistant from Anthropic. Jayconius came up with it and tested it in VR; Claude wrote the code, tests and docs.
Found a bug or want a feature? Open an issue.
MIT Β© 2026 Jayconius




