Radiata is a controller-first command center for a Windows gaming PC. Hold a controller chord and a radial menu blooms over your game; tilt the stick to a slice and release to fire it. Instantly launch games, join the Discord chat, swap to headphones, record your gameplay, and more. You can even alt-tab with it.
Configurable: each slice's action, icon, color, and position; the summon chord; the look and sounds. Configure from Settings, or the controller-based in-wheel editor.
Game Grid: one couch launcher for every installed game across Steam, Epic, GOG, Xbox, Battle.net, Amazon, itch, Ubisoft, and EA.
No game hooks or injection: Radiata reads the controller directly and holds a virtual pad neutral while a wheel is open, so the game underneath doesn't react. For strict-anticheat titles, see Passthru Mode.
Start with Opening a wheel, then try the in-wheel editor: click the aiming stick (R3/L3) with the wheel open.
Installing Radiata
Radiata ships as a single installer, Radiata-<version>-setup.exe. Download it from getradiata.app or the GitHub releases page, then run it.
Only download Radiata from those two places. Anything else claiming to be Radiata isn't from the developer.
What you need
Windows 10 or 11, 64-bit (x64) on an Intel or AMD PC. Windows on ARM isn't supported.
No administrator account is needed for Radiata itself; only the optional drivers ask for approval.
"Windows protected your PC"
Windows SmartScreen shows a blue "Windows protected your PC" box the first time you run the installer, and your browser may warn that the file "isn't commonly downloaded". Both mean the same thing: Windows hasn't seen this file often enough yet to have an opinion about it. Radiata isn't code-signed yet - a signing certificate is the last thing standing between it and version 1.0 - so every new release starts from zero reputation.
In the browser: if the download itself is blocked, keep it (Chrome and Edge: the ⋯ menu beside the download ▸ Keep ▸ Show more ▸ Keep anyway).
At the SmartScreen box: click More info, then the Run anyway button that appears below it. If there's no More info link, you're looking at the browser's warning instead - see the previous step.
No Run anyway button at all? A managed or locked-down PC can have SmartScreen set to block outright. That policy is yours or your IT department's to change; Radiata can't work around it.
You can confirm you have the genuine file before running it: every GitHub release lists the installer's SHA-256, and Get-FileHash .\Radiata-<version>-setup.exe in PowerShell should print the same value. Radiata's own updater runs that check for you on every update.
Antivirus false positives happen for the same reason - a brand-new unsigned program that installs controller drivers looks unfamiliar. If yours quarantines the installer, restore it and run it again, or download it fresh from one of the two links above.
What the installer does
Installs for your user account only, into %LOCALAPPDATA%\Programs\Radiata - which is why it never asks for admin rights and never touches other accounts on the PC.
Adds a Start menu shortcut, and on a first install sets Radiata to start with Windows (turn that off in the tray menu or Settings ▸ Advanced; an update never turns it back on).
No license click-through, no bundled extras, no toolbars. Radiata is GPLv3 free software.
Installing over an existing copy is an upgrade in place - your wheels, settings, and game art are left alone.
Driver prompts (the only UAC boxes)
Leave Install drivers (recommended) ticked and approve the two Windows prompts that follow. They install ViGEmBus and HidHide, the open-source Nefarius drivers that let Radiata keep your menu input out of the game - see Input isolation.
Declining is safe. Everything still works; games just also see your controller while a wheel is open. Install them later any time from Settings ▸ Advanced ▸ Install/Repair Drivers.
The drivers are shared system components other tools may also use, so they stay installed if you later remove Radiata - unless you tick the opt-in to remove them.
First run
Setup opens by itself and walks you through the drivers, a controller check, the look, cover art, and a set of starter wheels. Re-run it any time from Settings ▸ Advanced ▸ Troubleshooting ▸ Run First-Run Setup… - see System tools.
Radiata then lives in the system tray: left-click the icon for Settings, right-click for the menu. Then start at Opening a wheel.
Updating and uninstalling
Updates are one button inside the app - Settings ▸ Advanced ▸ Check for Updates, or leave Automatic ticked and Radiata tells you when a new version is out. It verifies the download before running it, and there's no SmartScreen prompt on that path.
Uninstall from Settings ▸ Advanced ▸ Troubleshooting ▸ Uninstall Radiata…, or from Windows' Installed apps list. Your settings and the shared drivers are kept unless you tick the opt-ins to remove them.
Hold the bumper/trigger; the second button is a tap that brings the wheel up.
Fn / L4/R4 and squeeze chords (Bumper+Trigger, +Home, +Select/Start) - the pressed hand opens the opposite wheel, so the free hand aims (R1+R2 → Left; L1+L2 → Right). For Select/Start, either button works.
L3/R3 and D-Pad L/R - the clicked stick or the direction names the wheel; either bumper/trigger is the hold.
Touchpad swipe - in from the left edge → Left wheel, right edge → Right.
Flip mid-gesture: while holding a chord, tap the opposite bumper or trigger to switch to the other wheel.
Activation is Hold (up while held; release fires) or Toggle (trigger opens; ✕ confirms, ○ cancels; re-trigger dismisses) - set it in Accessibility. Touchpad swipe is always toggle-style.
Either stick aims, whichever you tilt further - in Hold the free hand is the natural one, but the other works too. Wheel ignores opposite stick (Accessibility setting) narrows it to one stick per wheel.
Aiming & firing
Tilt the stick past the center deadzone to arm the nearest slice (it highlights). Release the trigger to fire it.
Release while centered (stick in the deadzone) = cancel - nothing fires.
Center hub
Arming a toggle slice (mic/volume mute, HDR, process toggle) shows its current state before you fire (e.g. Mute Mic / Unmuted); after firing, the hub shows the new state.
A slice that still needs configuring (e.g. a voice-join with no URL) arms as "Configure in Settings". Firing it opens that slice in the editor.
Hold-to-confirm slices
Slices with Hold to confirm won't fire on a quick release: hold the stick on them (0.8 s), then release while still on the slice. Move off or release early to cancel. It can be enabled on any slice in the Settings wheel editors.
While a wheel is open
D-Pad ↑ ↓ adjusts system volume. ↑ / ↓ on the keyboard do the same.
Enable / disable the wheels with the "both sides" of your invocation chord, pressed together:
Bumper/Trigger + D-Pad is directional: D-Pad Up = enable, D-Pad Down = disable.
The tray Disable/Enable Wheels item and the Disable Wheels slice also toggle them.
Disabled wheels are pure pass-through: summons are ignored and your input flows to the game untouched - through the same standing controller, so the game never sees a device disconnect. To hand the game your real controller (gyro, adaptive triggers, anticheat), use Passthru Mode instead.
Edit mode (in-wheel, controller-only)
Enter: with a wheel open, click either stick (L3/R3). The wheel centers and stays up after you release the trigger.
Select with either stick. While you're editing, non-logo slices always show their labels regardless of Label setting.
Wheel ignores opposite stick (Accessibility setting) narrows both of those to the wheel's own aiming stick - the one the hub names in its edit hint.
Move:✕ picks up the selected slice; aim to a target slot and ✕ to drop. D-Pad ← → nudges one spot.
Moving a slice is three beats: pick it up, aim at the slot you want, drop it.
Remove:hold ☐ briefly (a red ring winds in). Removing the last slice disables that wheel - see Single-wheel mode.
Add:△ opens the category→type Add picker (✕ drills in, ○ backs out). Installed Game opens the Game Grid to pick a game, then returns to edit carrying the slice. Other types drop a slice immediately; free-text types (raw URL / keypress) land as placeholders you finish in Settings.
A wheel holds 12 slices.
Undo / Redo:L1 / R1.
Exit + save:○, click the stick again, or press an Fn / L4/R4 button. Edits save live.
Single-wheel mode
Want only one wheel? Remove every slice from the other one. A wheel with no slices acts disabled: invoking it draws and captures nothing, so that side's chord stays fully usable in the game. Remove slices from Settings, or in edit mode with hold ☐ until the last one is gone.
Emptying one wheel turns its side off: the chord that used to open it passes through to the game untouched.
To bring it back: invoke it (hold the gesture) and click the aiming stick (L3/R3) - the wheel opens centered, straight into the Add picker. (Toggle-style gestures, which have no hold, allow the stick click for a few seconds after the invoke.)
If you empty both wheels, Settings opens so you can rebuild.
Slice editor tricks (Settings, mouse & keyboard)
Drag an app (.exe or .lnk) from Explorer into the slice list → a Launch slice is added at the drop position, icon is auto-extracted. You can drop several at once for several slices.
Drag a slice within the list to reorder.
Set a slice's icon and color in the Icon & Color panel below the label.
Color swatches are paired - the wheel shows whichever variation suits its material. Type an exact Hex value instead and that color is used exactly as-is regardless of material. Reset to Default returns to the action-type color.
Show Label toggles the slice's text on the wheel. It appears only when Show labels on is set to Slices I Choose.
Artwork on a slice
Drop your own image onto the preview well to give any slice custom artwork. It needs a transparent background (a logo-style PNG is best): a slice paints artwork through its transparency in the slice's color, so a screenshot or photo comes out as a solid shape and is rejected. The file is copied into Radiata's art cache, so moving the original later won't blank the slice, and it rides along in a backup.
Pick a game and Radiata fetches its transparent logo from SteamGridDB automatically. The ↻ button restores that logo (downloading it if needed); ← → cycles every logo already downloaded for that game.
Choosing a different icon drops the artwork (your glyph wins); changing only the color keeps and re-tints it. A slice's logo is independent of the Game Grid's.
Everything auto-saves - adds, removals, reorders, and edits to an existing slice (Revert undoes an in-progress edit). A new slice stages as a draft until Save Slice. Ctrl+S flushes now.
A slice's action type locks once you Save it - to change it, delete the slice and add a new one.
Game Grid basics
The Game Grid is a controller-scrollable view of every installed game across your storefronts, sorted most-recently-launched first (favorites pinned on top). The button controls are spelled out along the bottom of the grid.
D-Pad / arrow keys or the left stick move the selection.
✕ / Enter or a mouse double-click - launch the selected game. ○ / Esc - close the grid.
△ - favorite the selected game: favorites sit in their own row of larger tiles at the top of every view. Press again to un-favorite.
Hold ☐ - hide the game from the grid. Bring hidden games back with Settings ▸ Advanced ▸ Game Grid ▸ Reset Hidden Games. The same hold on a storefront's Open <store> card hides that whole store - see Hiding a storefront.
L1 / R1 (or PgUp / PgDn) - cycle the storefront filter. A chip appears for each store you have installed.
Select and Start - cycle the selected game's cover and logo; see Cover art & logos.
Add a game to a wheel
Add games from the in-wheel editor: open a wheel → click the aiming stick to enter Edit → △ Add → Installed Game, which opens the grid in pick mode. ✕ picks the highlighted game and carries it into the editor (○ cancels).
Cover art & logos
Select (Create/Share) - cycle the selected game's cover and save it: auto-resolved default → up to 10 top-rated SteamGridDB covers → 5 flat colors → wrap.
Start (Options/Menu) - cycle the logo overlay and save it: default logo → up to 2 SteamGridDB alternates → off (raw cover) → wrap. A game with no logo art uses its centered title text.
Covers come from SteamGridDB - add a free API key in Settings ▸ Advanced ▸ Integrations for portrait covers and logos across every storefront. Without one you still get Steam's own art, Playnite's covers, and the flat colors.
Art is fetched once and kept on disk, so the grid opens instantly and offline after that. A big library fills in over the first few seconds of browsing. Reopen the grid and the stragglers should be there.
A game with no art found is re-checked automatically every couple of weeks, since art gets added over time. To recheck now, use Retry Missing Game Art (Advanced ▸ Game Grid).
Game Grid options (Settings ▸ Advanced)
Settings ▸ Advanced ▸ Game Grid collects the grid's housekeeping buttons:
Retry Missing Game Art - re-attempts only the covers and logos that came up empty, keeping everything already downloaded and every cover you picked by hand (see Cover art & logos).
Clear Game Art Cache - deletes ALL cached covers, so everything re-downloads. Images you dropped onto a slice are kept. Try Retry Missing Game Art first if you want to fill only blanks.
Reset Hidden Games - brings back every game and storefront you hid with hold ☐ (see Hiding a storefront).
Prefer Playnite covers - shown when Playnite and a SteamGridDB key are both set up: favors Playnite's own cover art.
Hiding a storefront
A whole storefront can be hidden from the Game Grid, the same way a single game can.
Filter to the store with L1 / R1, then hold ☐ on its Open <store> card. A toast asks "Hide <store> and all its games in Radiata?" - ✕ hides it, ○ cancels.
Hiding a store hides its games in the Game Grid, the Add picker, and the starter wheels the first-run wizard suggests.
Bring it back with Settings ▸ Advanced ▸ Game Grid ▸Reset Hidden Games, which un-hides storefronts as well as games.
Newly installed storefronts appear automatically the next time Radiata scans.
Only a store with its own Open <store> card can be hidden this way. A Playnite game you added by hand, or one from a third-party Playnite plugin, carries no storefront card. You can hide those games individually.
Action types
Each slice runs one action, grouped by the editor's categories:
Games & Apps - installed game (direct launch), the Game Grid, storefront launcher (big-picture), launch/focus an app, Exit Current App (closes the frontmost app), and Game Bar (open, screenshot, start/stop recording, record last 30 s, toggle mic - via Windows' Xbox Game Bar).
System - controller mode (Xbox / DualShock); audio (switch output, mute, mic mute, set volume, play/pause, next/previous); display (Toggle Extend/Clone and HDR toggle); Windows (Show Desktop - fire again to put the windows back - and Empty Recycle Bin); power (sleep/hibernate/reboot/shut down/log out/lock, and Power Plan, which flips between two plans you pick).
Reboot has a Log In after Reboot checkbox: checked (the default), Windows signs you back in where policy allows; unchecked is a traditional restart, which can land at the sign-in screen.
Custom - Open URI and Key Combo (send a keyboard shortcut like Win+D or PlayPause).
Radiata - the Game Grid, open Settings, and disable wheels. Passthru Mode is not a slice: turn it on or off from the tray or Settings ▸ Passthru Mode.
A slice missing a required value arms as "Configure in Settings". Firing it opens that slice's editor.
Arcade
An Arcade slice opens a little game in a round window, right where the wheel was - something to do while a game loads or a lobby fills up, without alt-tabbing out of anything.
○ always backs you out - one press closes a menu or help card, the next closes the game - and the game freezes exactly as you left it, so you can come back later and carry on. Each game keeps its own state and best score.
✕ acts, ☐ is each game's second action, and the left stick aims. The D-Pad drives the menus. △ explains the game you're in, and START pauses with Resume, How to play, Reset, and that game's own settings.
Kabloom - minesweeper logic on a disc of flower-petal tiles. Aim the cursor with the stick; ✕ reveals a tile, ☐ marks one you've worked out is a bee. Every board is solvable - no forced guesses.
Connate - merge the numbers before the pile grows past the inner ring. Ride the rim and ✕ fires your held number into the cluster: 1 + 2 make 3, and matching numbers from 3 up double - but only matching colors merge, so mind the families.
Over a game, the arcade only plays while your controller is isolated from it - otherwise a card explains why and offers hold △ to play anyway (not offered in Passthru Mode). See Input isolation.
The Arcade also plays games you write yourself. One is a folder holding a game.json and a single JavaScript file; drop it into Radiata's Arcade Games folder and it plays in the same round window as the built-in games, with the same buttons and the same best-score tracking.
A game package contains code. Radiata asks you to confirm a package before it ever runs, and again whenever any file in it changes - but the sandbox below is a limit on what a game *can* do, not a judgement about whether it's worth running. Only install games from a source you trust.
Where it goes
One folder per game under %APPDATA%\Radiata\Packages\Arcade Games - for example …\Arcade Games\Orbit\game.json beside orbit.js. Radiata creates the folder on first run.
That folder's README.txt is the full API reference, kept current by Radiata itself. This topic is the tour; the README is the page to keep open while writing.
Restart Radiata after adding or changing a game, then accept the confirmation. It then appears in the Arcade picker beside the built-in games, and as a choice when you add an Arcade slice. In your config it's the token pkg-<id>.
The manifest
game.json is a small JSON object - format, id, title and entry are required:
"format": 1 - the manifest version.
"id": "orbit" - 1-32 characters of lowercase a-z, 0-9 and -. The game's identity, and the pkg-<id> token.
"title": "Orbit" - up to 24 characters, shown in the picker.
"entry": "orbit.js" - the script, as a bare file name in the same folder (no paths), up to 256 KB.
"howTo" - optional, up to 5 lines of 80 characters, which become the △ help card. ✕○☐△ in a line are replaced with the player's own button glyphs. No lines, no help card.
Folder limits: at most 32 files, 4 MB per file, 16 MB total.
How a game runs
Your script runs in a locked-down interpreter inside a separate sandboxed process: no files, no network, no clipboard, no other programs - only the functions below exist at all. Memory is capped by Windows at 128 MB.
Define tick(dt), called for every fixed 1/120 second step, and draw(), called once per screen frame. Issue drawing commands only from inside draw().
There's a hard time and instruction budget per drawn frame. A script that overruns is stopped and restarted (your saved data survives); one that keeps overrunning ends in a plain card you can back out of. It can slow itself down - it can't slow the PC down.
Radiata owns ○ and △ - closing the game and the help card - so your script never sees those two buttons.
Drawing: the playfield is a disc
Everything is drawn in polar coordinates: r runs 0 at the center to 1 at the rim, angles are degrees with 0 at 12 o'clock, increasing clockwise. Radiata does the trigonometry and clips to the circle, so a game can't draw outside its window.
Colors are numbers in 0xAARRGGBB form - alpha first, so 0xFFFF0000 is opaque red.
The commands, up to 1024 per frame: arc(r0, r1, a0, a1, color) for a ring segment, ring(r, width, color, edge), dot(r, a, size, color), line(r0, a0, r1, a1, w, color), poly([r,a, r,a, …], color) for 3-16 points, and text(r, a, size, "str", color) for up to 64 characters.
Input
Read-only globals, refreshed every frame: stickX / stickY (-1 to 1, with y positive downward, matching the screen), crossDown / squareDown while held, crossPressed / squarePressed true for one frame per press, and dpadUp / dpadRight / dpadDown / dpadLeft, also one frame per press.
Saving, randomness, and sound
kvSet("key", "value") and kvGet("key") are the only state that survives closing a game - strings only, keys up to 64 characters, values up to 1024, 4 KB per game in total. Everything else resets on dismiss, so design for it.
Write the reserved key hiscore (a whole number as text) to publish a best score to the Arcade picker.
rand() returns 0-1 and is seeded per session, so a replay of the same inputs behaves the same way.
cue("name") plays one of nine built-in sounds: fire, tick, good, denied, kill, zap, hurt, clear, gameover. Any other name is silent, and there's no way to ship your own audio.
If your game doesn't appear
A package loads whole or not at all, and the reason is written to %APPDATA%\Radiata\radiata-trace.log - search that file for [Packages] skipped arcade game.
The usual causes: an entry that isn't a plain .js file name sitting in the same folder, a script over 256 KB, an id with capitals or spaces, or a confirmation that was declined (it only re-asks once the package changes).
A game that loaded but misbehaves shows its card in the window rather than an error - and a package you delete simply stops being offered.
App & launcher slices
Choose the app two ways: Browse for App… picks an .exe from disk, and Installed Apps… lists everything with a Start-menu entry. This will include Microsoft Store apps, which have no .exe to browse to. Either way the icon is pulled in automatically. You can also drag an .exe, a shortcut, or a Start-menu app straight into the slice list.
Behavior - Run launches the app, or focuses it if it's already running. Toggle launches ↔ closes it (handy for background tools). Toggle asks the app to close normally first, the same as clicking its ✕, so anything with unsaved work can put up its "save changes?" prompt; if it ignores that it is forced shut a few seconds later.
Two limits: a Store app can't be detected as already-running, so Run just re-opens it and Toggle won't reliably close it. And an app started through an updater or launcher stub may run under a different name than the file you picked - picking the app's real .exe is the reliable choice.
Storefront (launcher slices) - opens the store's big-picture/fullscreen mode. Only Steam and Playnite have a true one; the Xbox app is maximized; the rest just open. A storefront is offered only when its launcher app is actually installed.
Installed Game slices launch the game directly where possible. A GOG game runs its own exe even without GOG Galaxy installed; only stores that need their client running route through it.
Controller mode (Xbox / DualShock)
Radiata hands your game a virtual controller, and Controller mode decides which kind it is: an Xbox pad or a DualShock pad. Two slices under System ▸ Controller flip it - Toggle Xbox Mode and Toggle DualShock Mode - and they are two sides of the same switch, so put whichever one reads better on your wheel.
What it's for: plenty of games only speak one dialect. A Game Pass or Xbox-app title that shrugs at a DualSense picks it up straight away in Xbox Mode, because what it sees is an Xbox pad. Games that want PlayStation input go the other way.
Button prompts follow the mode. The glyphs a game draws come from the pad it thinks is plugged in, so Xbox Mode gets you A B X Y and DualShock Mode ✕ ○ ☐ △ - handy even when both modes work.
Arming the slice shows On or Off in the hub, so you can check which mode you're in without changing it.
The switch is instant and stays put until you flip it back, but the game sees a controller swap at that moment - flip it before launching, not mid-match.
An Xbox pad stays an Xbox pad. If your physical controller is an Xbox pad on USB or a wireless dongle, the game always gets a virtual Xbox pad and DualShock Mode won't change that. The switch is for Sony pads, and for the Bluetooth pads that present as one.
This needs the isolation drivers - there's no virtual pad to switch without them, and firing the slice puts up an on-screen notice saying so. In Passthru Mode the game reads your real controller, so the mode has nothing to change. See Input isolation.
Switch Audio Output
Switch Audio Output changes the Windows default audio device(s). Both fields match by partial name, case-insensitively - "Speakers" matches "Speakers (Realtek…)". The ▾ button beside each field lists your connected devices, and a new slice starts pre-filled with your current defaults.
Output Device - the playback device to switch to. Blank = cycle through your outputs on each fire (unless a Mic Device is set, which leaves the output alone).
Mic Device - the recording device to switch to. Blank = leave the mic unchanged.
Set both fields to switch output + mic in one slice - e.g. "TV + no mic", "Headset + headset mic". Firing shows the device switched to in the hub.
Open URI
An Open URI slice hands its value to Windows to open with whatever handles that scheme. This supports a lot more than just web links:
Web URLs - https://twitch.tv/yourchannel opens in your default browser.
App deep links - steam://open/bigpicture, discord://discord.com/channels/…, com.epicgames.launcher://apps/…, spotify:playlist:… - anything an installed app registers a protocol for.
Windows pages - ms-settings:display opens that Settings page.
The value must be a complete, absolute URI (a bare twitch.tv/... won't launch. You need to include the https://).
Game-launch URIs (steam://rungameid/…) work here too, but the Installed Game slice type builds them for you, which is easier.
Key Combo (send a keyboard shortcut)
A Key Combo slice (Custom) presses a keyboard shortcut for you. Write it as key names joined with + - Win+D, Ctrl+Alt+Del, Alt+F4 - or a single key like PlayPause. The last name is the key pressed; everything before it is a modifier held around it. Names aren't case-sensitive.
In a combo, the last name is the key that actually gets pressed and everything before it is a modifier held down around it.
Modifiers:Ctrl, Alt, Shift, Win.
Keys: letters and digits; F1-F12; Enter, Esc, Tab, Space, Backspace, Del, Insert; Home, End, PgUp, PgDn; the arrows UpDownLeftRight; PrintScreen, Pause; Backtick and Slash; and the media keysVolUp, VolDown, Mute, PlayPause, Next, Prev, Stop - media keys work on their own, no modifier needed.
The combo is sent as real keystrokes. One thing can block it: an app running as administrator won't accept keystrokes from Radiata (this is a Windows rule).
Discord voice-channel setup
Launch works out of the box. Deafen sends Discord's default keybind Ctrl+Shift+D. That means for it to work while a game has focus, add that combo as a keybind in Discord ▸ Settings ▸ Keybinds (Discord keybinds are global).
Join/Leave Voice Channel needs your own free Discord application credentials. The slice editor shows a Configure Discord Integration button until they exist (the same wizard is in Settings ▸ Advanced); it walks through creating the app on the Discord Developer Portal and validates the Client ID/Secret with a Test → Save flow. Credentials are stored encrypted (Windows DPAPI) and sent only to Discord.
To get the channel link: in Discord, right-click the voice channel → Copy Link, and paste it into the slice's Discord URL field (Radiata normalizes it to the discord:// form).
Steam & Xbox voice chat
The Steam Chat and Xbox Party Chat groups do everything those platforms allow a third-party app to do, which is less than Discord allows. Discord provides a local control channel that Radiata's Join/Leave slice uses; Steam and Xbox provide none. However, you can:
Open Steam Chat - opens Steam's Friends & Chat window. Join a group's voice channel from there; Steam gives another app no way to join, leave, or switch voice channels, and has no mute-incoming-voice control at all.
Open Chat (Xbox) - opens the Game Bar (same as Win+G); party chat lives in its Xbox Social widget. Windows offers no way to open that widget directly, so the first time, click the widget menu, open Xbox Social, and pin it - Game Bar then restores it on every open. Joining, leaving, and deafening are only possible in that widget or the Xbox app.
Mic Mute - in both groups, and the same slice as System ▸ Audio. It mutes your Windows microphone, which is what both platforms transmit from, so the others can't hear you - and every other app loses the mic as well, since neither exposes an app-scoped mute. Live Muted/Unmuted state shows in the hub.
For full voice control from a slice - join, leave, mute, deafen - Discord remains the best-supported option; see Discord voice-channel setup.
OBS Studio
OBS Studio (obsproject.com) is the free, open-source program most people use to stream to Twitch or YouTube and to record their screen. It builds a broadcast out of scenes - named layouts of game capture, camera, mic and overlays - that you switch between while live.
OBS Studio slices - Toggle Streaming, Toggle Recording, Save Replay Buffer, Switch Scene…, Toggle Source Mute… - drive OBS over the obs-websocket protocol.
One-time setup: in OBS, Tools ▸ WebSocket Server Settings ▸ enable the server, then copy its port (default 4455) and password into Settings ▸ Advanced ▸ Integrations ▸ Configure OBS Integration… - it's one shared setting, and Test confirms the connection on the spot. Until it's set up, OBS slices arm as "Configure in Settings", and an OBS slice's editor offers the same setup pane.
Scene and audio-source names on the slice must match OBS exactly.
What's supported:OBS Studio 28 or later (the WebSocket server is built in) and OBS 27 or earlier with the obs-websocket 5.x plugin. Forks that speak the same protocol (e.g. StreamElements OBS.Live) work identically. Streamlabs Desktop does NOT - it's a different app without obs-websocket.
Text Chat (send a message into a game)
A Text Chat slice (Chat & Streaming) types a message into the running game's text chat: it presses the game's chat-open key, waits a moment for the chat box to appear, types your text, and presses Enter.
Chat Button - Try Game Default looks up the chat key for whatever game is running each time the slice fires, from a built-in index of around 1,000 PC games, so the same slice works across games. Custom… lets you enter the key yourself; use it for games with remapped or unusual chat keys, or for a game the index doesn't cover.
Message - the one line of text to send. An empty message (or Custom with no key) arms as "Configure in Settings" and firing opens the slice's editor.
Try Game Default sends nothing unless the focused game is in the index. When the game in front isn't covered, the hub names it and says "No chat key default found. Configure in Settings" - switch that slice to Custom… and set the key.
Sends are limited to one per 15 seconds - fire again sooner and the hub shows the remaining cooldown. No spamming, please!
Limits: the game must be focused and must accept its chat key at that moment - a slice fired in a menu, loading screen, or cutscene types nowhere. If you switch away mid-message, Radiata stops rather than finishing it somewhere else.
Supported controllers
Sony family (DualSense Edge, DualSense, DualShock 4) over Bluetooth or USB - full support with clean input isolation. The Edge's Fn buttons are the reference trigger.
Third-party Xbox-style pads over Bluetooth - most present as a DualShock 4 over BT, so they get the full isolation path too.
Pads with extra paddles or buttons (the 8BitDo Ultimate 2C is the tested one) - over Bluetooth the extra L4/R4 buttons are read directly, so you can pick them in Settings ▸ Customize ▸ Triggers to summon a wheel on their own, or paired with a second button if you also use them in games. They're offered, not assumed: the default stays the standard bumper chord. Over USB the same pad is a plain Xbox pad and the extra buttons are invisible to any app - connect over Bluetooth if you want to use L4/R4.
If you've remapped L4 or R4 on the pad itself (holding L4/R4 + a button + the mapping key), that paddle now sends the button you assigned and Radiata can no longer see it - so it stops opening wheels. Clear the remap on the pad to get it back, or pick a chord in Settings ▸ Customize ▸ Triggers instead.
Xbox pads over USB or wireless dongle (XInput) - isolated with the same cloak, presenting a virtual Xbox 360 pad to the game. If a pad can't be cloaked for any reason, Radiata falls back automatically to shared-input mode - the wheel still works, but the game also sees your input while a wheel is up.
Genuine Xbox pads over Bluetooth - isolated too, with an extra safeguard: before presenting the stand-in pad, Radiata has a separate helper process observe that games really can't see the physical pad any more. If that check can't pass - or can't run - it falls back to shared-input mode instead of guessing, so a hidden pad with no stand-in can never leave you without a working controller.
Two or more Xbox pads plugged in at once - isolation switches off and both pads keep working in shared-input mode, since cloaking would make a second player's controller disappear. Unplug the second pad and isolation comes back on its own.
Isolation needs the drivers (ViGEm + HidHide). Without them every pad runs in shared-input mode - install from Settings ▸ Advanced ▸ Install/Repair Drivers. Not sure which mode you're in? Hover the tray icon - see Input isolation.
Input isolation (what the drivers do)
With the optional isolation drivers installed, Radiata gives games a virtual controller (a DualShock 4 for Sony pads; an Xbox 360 pad for Xbox pads or in Xbox Mode) and cloaks the physical pad (HidHide) so nothing double-inputs. Without the drivers everything still works; games just keep seeing your controller while a wheel is up.
Isolated, the game reads a virtual pad and never sees the physical one; in Passthru Mode or with no drivers installed, the game reads your controller directly and Radiata simply watches alongside it.
Which mode am I actually in? Hover the tray icon. It reads "Radiata - isolated", or names the reason it isn't (no drivers, Passthru Mode, a pad that can't be cloaked). When capture drops to shared-input mode you also get an on-screen notice - once per cause, not a stream.
While isolation is active the virtual pad forwards basic gamepad controls only - sticks, triggers, D-Pad, and buttons. Touchpad input, motion/gyro aiming, the controller speaker/mic, adaptive triggers, and haptics do not pass through; on Sony pads that includes plain rumble, while a captured Xbox pad keeps game rumble. Turn on Passthru Mode or exit Radiata and every native feature returns instantly. (Disabling the wheels doesn't swap controllers: the same virtual pad keeps forwarding your input, so games never see a controller vanish mid-session.)
Input latency
Sony pads and Xbox pads over Bluetooth - imperceptible; reports are passed straight through as they arrive.
Xbox pads over USB or a wireless dongle (XInput) - a few milliseconds at most, because these have to be polled.
Passthru Mode, or no drivers installed - none. The game reads your physical controller directly.
For scale: a 60 fps game draws a frame every 16.7 ms. Radiata never injects into or hooks a game, so it adds nothing to rendering or frame pacing.
While a wheel, Game Grid, or editor is on screen, the game gets no controller input at all - the virtual pad is held neutral on purpose, so the stick you're aiming with doesn't also move your character. If you'd rather have double-input, use Passthru Mode.
Install or repair any time: Settings ▸ Advanced ▸ Install/Repair Drivers.
Set Passthru Mode (Bypass Input Isolation)
Some competitive titles with kernel anticheat (Valorant, Call of Duty, Fortnite, Rainbow Six Siege) could conceivably react to emulated or hidden devices. Passthru Mode bypasses input isolation entirely: no virtual pad, no controller cloak, so the game sees only your real controller. The wheel still works; the trade-off is that input reaches the game while a wheel is open. This is called "bleed-through" or "double input". Not to be confused with disabling the wheels, which keeps the virtual pad in place and only stops summons - Passthru Mode removes the virtual pad altogether.
Global toggle: the tray's checkable Passthru Mode item, or the checkbox on Settings ▸ Passthru Mode. (The tab appears only when the isolation drivers are installed.)
Automatic per-game: add a game to the Always use Passthru Mode for list - from the installed-games dropdown or Add Application… for a specific .exe. Radiata enters Passthru Mode while it runs and restores capture on exit; the tray shows "(auto: <game>)".
Each entry engages While Running (recommended - anticheat watches from launch) or While Frontmost (only while the game's window is focused).
Passthru Mode is best-effort. Per-game detection polls every ~2 seconds, so a just-launched game can briefly see normal capture. For the strictest titles, toggle Passthru Mode on manually *before* launching. The isolation drivers also stay installed system-wide either way.
Turning Passthru Mode off while a game is running finishes when you leave the game. The game is using your real controller, and switching it for the virtual one mid-play would yank its input - so Radiata waits until no game is in front (a toast and the tray item say so), then completes; if you stay in the game, it completes on its own within about two minutes. Toggling Passthru Mode back on cancels the wait. With no game running, the toggle is instant.
D-Pad ← →
While a wheel is open, D-Pad ← → does one of four things - pick in the Settings ▸ Customize ▸ D-Pad ← → section:
Cycles Windows (default) - steps through the Alt-Tab switcher, one window per press. The switcher stays up while the wheel is open and lands on the highlighted window when the wheel closes.
Cycles Desktops - switches Windows virtual desktops (the same as Win+Ctrl+← →).
Skips Songs - the same track-skip keys as the Audio slices; each skip flashes a ⏮ / ⏭ icon in the hub.
Mic Volume - turns your default mic up and down in 5% steps, holding to repeat, and un-mutes it on the way up. The level shows in the hub with a microphone icon.
Tray icon: left-click opens Settings; right-click has the menu (Disable/Enable Wheels, Passthru Mode, Game Grid, Settings, Help, About Radiata, Show in Explorer, Start with Windows, Exit).
Test Wheel - each Wheel tab has a Test Left/Right Wheel button under the slice list that opens that wheel on screen (with the wheels enabled).
Settings tabs: Left Wheel, Right Wheel, Customize (look, feel, sound, triggers, the D-Pad ← → picker and the Show labels on picker), Passthru Mode (Passthru Mode - shown when the isolation drivers are installed), Advanced (a Current Controller readout, Integrations, Game Grid housekeeping, Accessibility, Start with Windows, and System tools incl. backup & reset and Quit Radiata), Help, and About. Settings auto-save; Ctrl+S forces.
Language - Settings ▸ Advanced ▸ Language sets the language for the whole app. Help switches at once; everything else follows at the next start, and Radiata offers to restart right away.
Customize (look, feel & sound)
Settings ▸ Customize sets how the wheels look, feel, and sound. Every pick applies live - bring up a wheel to preview it.
Material - the resting-slice look. Eight, in two groups: Simple holds the solid-color Flat Light and Flat Dark; Deluxe holds the glassy Pearl and Obsidian, plus four styled looks:
Kawaii - milky pastel wedges, each slice a different hue; firing bursts heart-and-star confetti.
Salvage - charcoal slices with a rusted-metal texture and a stamped plate edge.
Mesa - rounded cream wedges on cracked terracotta; the armed slice lifts like a 3D card.
Reactor - dark hollow wedges; the armed slice lights a circuit-board of traces and sparks.
Sound Effects - Themed (the default) plays whatever sound set matches the material picked above - Kawaii, Mesa, Salvage and Reactor each bring their own, and Obsidian takes Digital pitched deeper. Digital and Physical are fixed sets if you'd rather pin one, and Silent turns the sounds off. Picking a material switches the choice back to Themed.
On the Kawaii sound set, arming a slice strikes the next note of a xylophone melody, so scrubbing around the ring plays the song. There are 5 different melodies, which you might recognize :)
Slice Thickness - the radial thickness of the slice ring. Thick only reads well up to 8 slices, so a 9th slice on either wheel switches the setting to Medium - and it switches back on its own once you're at 8 or fewer again.
Button Icons - the symbols in on-screen prompts: Best Guess (the default - follows the connected pad), PlayStation (✕ ○ □ △), or Xbox (A B X Y).
Triggers - which controller gestures summon a wheel. See Triggers.
D-Pad ← → - what left and right on the D-Pad do while a wheel is open. See D-Pad controls.
Show labels on - which slices draw their text label. See Show labels on.
Accessibility - activation, wheel sides, both-stick aiming, the hub, Reduce motion and narration - lives on Settings ▸ Advanced. See Accessibility.
Make your own material - drop a theme package into Radiata's Materials folder and it joins the list. See Custom materials.
A wheel holds up to 12 slices, but 6-8 is the sweet spot.
Custom materials (build your own theme)
Beyond the eight built-in materials you can drop in your own theme. A theme is one folder holding a text file called material.json - colors, gradients, a system font name, and optionally images and sounds sitting beside it. Themes are data only: the format cannot express code, a network address, or a file outside the theme's own folder, so a theme can restyle the wheel and do nothing else.
Where it goes
One folder per theme under %APPDATA%\Radiata\Packages\Materials - for example …\Materials\Lava\material.json. Paste that path into Explorer's address bar; Radiata creates the folder on first run.
That folder also holds a README.txt written by Radiata, carrying a copy-paste example of every field. It's the reference; this topic is the tour.
Restart Radiata after adding or changing a theme. Packages are scanned once, at startup, on purpose.
The first time Radiata sees a new or changed package it asks you to confirm before loading anything. Accept, and the theme appears in Settings ▸ Customize in a third group, Custom, below Simple and Deluxe.
A package is content from whoever wrote it. Only install themes from a source you trust - the same care you'd give any download. The confirmation prompt is deliberate, and it returns whenever any file in the package changes.
The smallest theme that works
A format 1 manifest is a JSON object with the keys below. format, id, name, dark, and a colors object holding at least resting and armed are required; everything else is optional.
"format": 1 - which manifest version you wrote. Radiata reads 1 to 3; the richer blocks further down need the higher number.
"id": "lava" - 2-31 characters of lowercase a-z, 0-9 and -, starting with a letter or digit. This is the theme's identity: it becomes the token custom-lava in your config, so changing it later makes a different theme.
"name": "Lava" - up to 24 characters; the label on the Customize tile. "author" (up to 64) is optional.
"dark": true - whether the slices are dark. It flips labels and the hub to light ink and picks the dark fallbacks, so getting it wrong shows up as unreadable text rather than a wrong color.
"colors" - "resting" and "armed" are required; "confirm" (defaults to the armed color), "label" and "outline" are optional. Each is #RRGGBB or #AARRGGBB, where the leading pair is alpha - "#40FFFFFF" is a 25%-opaque white outline.
"labelFont": "Cascadia Code" - optional, and it must be a font already installed on the PC; an unknown name is ignored rather than treated as an error. Font *files* inside a package are never supported, deliberately.
"soundTheme": "physical" - which sounds the wheel makes on your theme. Name a sound set directly - physical (the default), digital, kawaii, mesa, salvage, reactor or obsidian - or name a built-in material and borrow whatever that one uses, so "pearl" gives you the digital set and "flat-dark" the physical set.
Naming the material is usually the better choice: your theme keeps sounding like the look you styled it after, even if that look's sounds are retuned in a later release. Naming a set pins it exactly.
Custom themes render through Radiata's flat slice paths with your colors substituted, so they can't reach the built-in styled materials' procedural effects (Kawaii's confetti, Reactor's circuit board). That ceiling is deliberate; everything below is how far the format does reach.
Richer looks - format 2
Set "format": 2 and add any of these blocks - all optional. Every number is clamped to a safe range, so an extreme value is pulled back rather than rejected.
"fills" - a gradient per state (resting / armed / confirm) instead of a flat color. "type" is solid, bowed (the glassy Pearl/Obsidian ramp), or linear with an "angle", plus a list of "stops" (each an "at" from 0 to 1 and a "color").
"hueWalk" - gives every slice its own hue around the ring, Kawaii-style, from sat / light / armedSat / armedLight (0-1) and hueOffset. It overrides the resting and armed fills.
"outline" and "armedOutline" - color, width, and an optional dash pattern for the slice edge.
"armed" - how an armed slice moves: liftPx (up to 24), northPx (±12), scale (1.0-1.15). It's a state treatment rather than continuous motion, so it survives Reduce motion.
"glyph" - how slice icons are treated: edge (inner, outer or none) with edgeColor / edgeWidth / edgeShadow; a glow whose color can be the literal "slice" to take each slice's own accent, with strength 0-1; plus castShadow and armedWash.
"label" - case (upper for stamped all-caps labels) and sizeMul (0.8-1.3). "gapPx" (0-14) sets the gap between slices.
"tile" - how the theme's swatch looks on the Customize tab: edgeColor, sheen, lifted, and an optional texture.
Images and sounds - format 3
Set "format": 3 to reference files that live in the theme's own folder, by bare file name - a path isn't expressible in the format.
"textures" - slice and hub paint over the fill; backdrop draws behind the whole wheel. Each takes a "file" and an "opacity", and slice/hub also take "tile": true to repeat the image at its natural size instead of stretching it. PNG or JPG, up to 4 MB; anything wider than 2048px is scaled down as it's decoded.
"sounds" - one file per event: armed, fired, enableWheels, disableWheels. WAV only, up to 1 MB and 3 seconds each; events you leave out keep the paired sound theme's own sound.
A theme that ships sounds is badged on its Customize tile and takes over the Sound Effects picker - the Digital and Physical overrides go inactive, while Themed and Silent stay live.
Folder limits: at most 32 files, 4 MB per file, 16 MB total. Changing *any* file - not just the manifest - re-asks for your confirmation on the next start.
If your theme doesn't appear
A package loads whole or not at all. One bad value rejects the theme rather than half-applying it, and the reason is written to %APPDATA%\Radiata\radiata-trace.log - search that file for [Packages] skipped material.
The usual causes: a missing dark or colors, a color that isn't #RRGGBB / #AARRGGBB, an id with capitals or spaces, or a format number lower than the blocks you used.
A theme you had selected that stops loading - package removed, or a change you declined - falls back to Pearl, quietly. Nothing else in your wheels changes.
Custom themes are never offered during first-run setup, and the theme folder isn't part of a settings backup - copy the folder itself to move a theme to another PC.
Triggers (summon chords)
Settings ▸ Customize ▸ Triggers is the chord builder: which controller gestures summon a wheel. Each row is one live chord: a button (Fn or L4/R4 / Bumper / Trigger / Touchpad) paired with how it's combined (Trigger, Home, L3/R3, Select/Start, D-Pad L/R, or a touchpad edge-swipe). The options adapt to the detected pad: Fn appears for a DualSense Edge, L4/R4 for a pad with extra buttons on Bluetooth, and Touchpad only for pads that have one. Those dedicated buttons need no second button - they open a wheel on their own.
+ Add Another Trigger appends a row; a row's ✕ removes it. Every row stays live at once - up to three - and the set is remembered per controller type, so an Edge and an Xbox pad each keep their own chords.
How each chord behaves (hold + tap, which wheel it opens, Hold vs Toggle) is in Opening a wheel; the both-sides version of a chord toggles the wheels on and off, see While a wheel is open.
Accessibility (Settings ▸ Advanced)
The Accessibility section gathers six checkboxes, in Settings ▸ Advanced. The same set is offered during first-run setup from the Accessibility… button on the Look step:
Two of them are indented under the box that ticks them: turning on Wheels toggle on/off also ticks Swap left/right, and turning on Reduce motion also ticks Always show hub, because each pair works best together. Both children stay yours to tick or clear on their own, and once you set one by hand it stops following its parent.
Wheel ignores opposite stick - normally either thumbstick aims, whichever you tilt further, and either stick's click opens edit mode. Tick this and each wheel listens to one stick only: the free hand's under Hold, the wheel's own side under Toggle. Worth ticking on a pad whose resting drift creeps past the deadzone, because a drifting second stick can arm a slice on its own and turn a centred release from a cancel into a fire.
Wheels toggle on/off and Swap left/right - whether an invoked wheel stays up until you dismiss it, and which wheel each hand opens (see Opening a wheel).
Reduce motion - stops decorative movement everywhere: no confetti or sparks, no parallax, no zooming or drifting; wheels fade in in place, edit-mode rearranging is instant, and every hold-to-confirm effect becomes the same steady progress arc. Progress meters, selection highlights, and state readouts all stay. Windows' own Animation effects switch turns this on too.
Always show hub - off (the default), the wheel's centre hub appears only when it has something to show. On, the hub is always drawn and also shows the controller battery - a steadier centre to read, which is why Reduce motion ticks it for you.
Narration - speaks what you're doing aloud: which wheel opened, the slice you arm and its current state, hold-to-confirm progress, what a fire actually did, volume levels as you scrub, edit-mode moves, and Game Grid browsing. It works alongside a screen reader.
Narration covers the wheel and the Game Grid only - the overlay surfaces a screen reader can't see. Settings, first-run setup, and every other ordinary window are Windows Narrator's job, so run Narrator alongside Radiata if you want those read too. Ticking Narration offers a button to turn Narrator on; and if Narrator is running when you first set Radiata up, Narration starts on by itself.
Show labels on (slice text)
Show labels on - which slices draw their text label on the wheel.
Icons, not Logos (the default) - only slices showing one of Radiata's built-in icons are labelled. A slice carrying artwork (a game logo, cover art, or a PNG you added) goes unlabelled, since the artwork already carries the name.
All Slices - every slice is labelled, artwork ones included.
No Slices - no slice is labelled.
Slices I Choose - each slice's own Show Label checkbox decides, and it's the only mode in which that checkbox appears in the slice editor (see Slice editor tricks). Every slice is created with Show Label unchecked, so switching to this mode starts you from an unlabelled wheel: tick the few slices you want named.
Editing a wheel is exempt: in edit mode and its Add picker, non-logo slices always show their labels whatever this is set to.
The setting lives in Settings ▸ Customize, directly under the D-Pad ← → selector, and applies live - bring up a wheel to see it.
Configure Discord Integration… - sets the Discord credentials (Client ID/Secret) that Join/Leave Voice Channel slices use - the same wizard the slice editor offers. Stored encrypted (Windows DPAPI) and sent only to Discord.
SteamGridDB API key - unlocks portrait cover art and logos for every storefront's games (the Game Grid's Select/Start cycling). Get a free key at steamgriddb.com ▸ Preferences ▸ API. It's checked when you finish entering it, and entering your first key automatically fills in covers skipped while you had none.
OBS Studio - Configure OBS Integration… sets the WebSocket port and password, one connection shared by every OBS slice - see OBS slices. Test checks it against a running OBS. The password is stored encrypted (DPAPI).
With Playnite and a SteamGridDB key both set up, a Prefer Playnite covers toggle appears in the Game Grid section; without Playnite, an Install Playnite… button appears here instead.
Playnite (optional library manager)
Playnite is a free, open-source game-library manager for Windows (playnite.link) that gathers all your games - Steam, Epic, GOG, Xbox, emulators, standalone - with metadata and cover art.
Radiata works fully without it, scanning your storefronts directly. Playnite is an optional enhancement:
More games found - Radiata reads Playnite's library, so emulated and manually-added games a raw storefront scan misses can appear in the Game Grid.
Curated cover art - Playnite's own covers become an art source, with a Prefer Playnite covers toggle (Advanced ▸ Game Grid) to favor them over SteamGridDB.
Radiata only ever reads Playnite's local database, and Playnite needn't be running.
Not installed? Install Playnite… in Advanced ▸ Integrations opens its download page - set up your libraries in Playnite and Radiata picks them up automatically.
System tools & Backup (Settings ▸ Advanced)
Settings ▸ Advanced ▸ System holds the update controls, the Start with Windows toggle, the Troubleshooting dropdown, and Quit Radiata:
Recover Controller - the ↻ button beside the Current Controller name: a soft input reset for a wedged pad, without restarting Radiata.
Battery - beside the Current Controller heading, the same reading the wheel hub shows. PlayStation pads report a percentage (in 10% steps); Xbox-compatible pads only report four coarse levels, so those read as words. Nothing shows until the pad has reported a level.
Quit Radiata - exits completely: the virtual controller is released and the physical controller un-cloaked, so the pad is 100% normal afterwards.
The Troubleshooting dropdown
Run First-Run Setup… - re-runs the setup wizard (controller check, drivers, look, cover art, starter wheels). Your customized wheels are never overwritten without asking.
Install/Repair Drivers… - installs or repairs the isolation drivers (ViGEmBus + HidHide). Fixes most isolation problems; shows a result log.
HID Diagnostics… - a live view of the raw controller reports Radiata reads; useful when support asks what your pad is actually sending.
Controller Setup… - re-runs the controller detection and mapping wizard on its own, without the rest of first-run setup.
Email Log to Developer… - saves a zip of Radiata's diagnostic log to your Desktop and opens a pre-addressed email; you'll need to attach the zip to it. The log records diagnostic events only, so no account data and nothing from your games is sent.
Back Up Settings… and Restore Settings… sit lower in the same dropdown, and the resets below them - all described under Backup & reset.
Backup & reset
Back Up Settings… - saves everything that makes Radiata yours (wheels, colors, settings, and your Game Grid cover/logo picks) to a .zip in Documents\Radiata Backups.
Restore Settings… - loads a backup, replacing your current wheels, settings, and art picks. Radiata restarts.
Reset All Settings… - factory defaults for wheels, colors, and settings; first-run setup runs again on the next launch. Cached art survives.
Wipe App Data and Reset… - deletes EVERYTHING in %APPDATA%\Radiata - like a clean install. Radiata restarts. Your backups are outside that folder and survive.
Uninstall Radiata… - removes the startup entry, the HidHide registration, and Radiata's own files, with OFF-by-default opt-ins for the shared drivers and your settings. Anything else in Radiata's folder is left alone.
Updates
Check for Updates - asks getradiata.app/update for a newer version right now.
Automatic - the checkbox beside the button: when on, the same check runs at startup and once a day. Found updates announce themselves with an on-screen notice (click it to open the update) and a line in this tab; a version you choose to skip stops announcing itself (the line here still shows it).
Resets can't be undone - back up first.
The game-art buttons live in their own Game Grid section - see Game Grid options.
Controller not detected
Replug / re-pair first. Bluetooth stacks occasionally wedge; power-cycling the pad fixes most one-offs.
Bluetooth pad connected but frozen (Windows still lists it, input never moves)? That's a Windows Bluetooth wedge that power-cycling the pad won't fix - toggle the PC's Bluetooth off and on instead. Radiata shows a "toggle Bluetooth" notification when it detects this.
Settings ▸ Advanced ▸ Recover Controller does a soft input reset (drops and reopens the HID stream) without restarting Radiata.
HidHide lockout: if the cloak hides the pad while Radiata isn't on its allow-list, Radiata goes blind - zero input, and the Current Controller readout shows nothing even though Windows sees the pad. Radiata detects this at startup and offers a one-click fix via a clickable on-screen notice; Install/Repair Drivers always cures it.
Peer controller tools (DS4Windows, reWASD, InputMapper) share the same drivers and can double or block input. You'll need to close them (a startup warning names any running).
Wheel not visible over a game
Run games Borderless Windowed (not exclusive fullscreen). Exclusive fullscreen bypasses the compositor Radiata draws through. The setting is in most games' display options; the performance difference on Windows 10/11 is negligible.
Radiata draws on the primary display only - on a multi-monitor rig, make your gaming display the Windows primary (Settings ▸ System ▸ Display).
Windows-secured screens (UAC prompts, the lock screen) can never be drawn over. This is a Windows limitation.
Steam quirks
Buttons behave oddly in Steam games? Steam ▸ Settings ▸ Controller ▸ "PlayStation Controller Support" makes Steam take over Radiata's virtual controller and re-emit its own input. Turn it off, or set Steam Input per-game.
Double input even though the tray says isolated? If Steam was already running when Radiata started, Steam can keep a grip on the physical pad that the cloak can't revoke. Radiata shows an Unlock Controller card with the fixes: power-cycle the pad, switch to Passthru Mode, or relaunch Steam.
Windows Magnifier opens by itself? That's Steam's *Guide Button Chord* layout (Guide + face button), not Radiata - and powering a pad off by holding the PS button can leave that layout latched. One clean Guide press-and-release clears it; disable it under Steam ▸ Settings ▸ Controller ▸ Non-Game Controller Layouts ▸ Guide Button Chord layout.
Controller Turbo / rapid-fire mode
Many third-party pads have a hardware Turbo / rapid-fire mode that auto-repeats a held button. Switched on - often by an accidental button combo - a held button registers as a fast stream of presses, which makes Radiata misbehave in ways that look like a bug:
The wheel flickers open and shut, or dismisses on its own right after opening.
The Game Grid's filters cycle rapidly, or the selection jumps on its own.
Slices fire the instant a wheel opens, or a hold-to-confirm slice never settles.
Turn Turbo off on the controller itself - usually a button combo (often Home/Guide + a face or shoulder button, or a dedicated Turbo button), frequently with its own LED. Check your pad's manual for the exact combo.
HDR shows Unavailable - the display state can't be read in that context, such as in Remote Play or streaming.
Editing config.json by hand (%APPDATA%\Radiata) - supported; the app hot-reloads its own writes reliably, but outside edits are occasionally missed - restart Radiata after manual edits.