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).
- π 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 |
| π¬ 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 |
| π 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, 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. |
| 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...) are stored encrypted with your Windows account, never in your layout file, so sharing a layout never leaks them. The one exception: a Client ID / Secret you type into a plugin's settings box is saved in your settings file in plain text (and is left out when you export a layout).
- 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.
- 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.
- 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 # 388 tests
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.
Two files are deliberately not in the repository: the address of the private sign-in relay for Kick and YouTube (plugins/kick/kick-app.json, plugins/youtube/youtube-app.json; examples sit next to them). Without them, a source build still works, and Kick / YouTube use your own developer app.
- 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 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, 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




