| name | decky-preview |
| description | Drive the Decky Plugin Studio in-IDE preview for fast iteration. Use when developing UI/focus behavior, testing hardware simulator scenarios, or verifying state preservation across HMR. Covers preview.start/stop/status/health, preview.injectFocusEvent, preview.setHardware, preview.runSequence, preview.callRpc, preview.callTestHook, preview.snapshotDom, preview.captureScreenshot, preview.setHttpAllow, preview.setPermissions, and preview.readLog MCP tools. |
Decky preview (Decky Plugin Studio)
Very much beta — fast UI/RPC iteration only. Focus, layout, and Steam Input need deck.deploy + on-device QA.
When to use
- Iterating on
@decky/ui components without full build/deploy/Steam loop
- Verifying D-pad focus paths after refactors
- Testing plugins that read hardware telemetry or call local Ollama
- Scripted regression via
preview.runSequence or scripts/run-preview-suite.mjs
Input paths
- Keyboard — arrows, Enter (A), Escape (B) while preview panel focused
- Virtual gamepad — on-screen buttons in the preview panel
- Physical controller — W3C Gamepad API when preview panel focused
Workflow
- Start preview —
preview.start or Decky: Open Preview
- Preflight —
preview.health (or suite runner checks IPC)
- Simulate hardware —
preview.setHardware({ cpuTemp: 85, preset: "Hot Game" })
- Drive focus —
preview.injectFocusEvent("Right") or preview.runSequence({ inputs: ["Right","A"], delayMs: 80 })
- Backend RPC —
preview.callRpc("method_name", [args]) (discovered from main.py)
- Test hooks —
preview.callTestHook("setTab", ["settings"]) via window.__deckyPreviewTestHooks
- Inspect —
preview.snapshotDom({ selector }), preview.captureScreenshot({ selector })
- Permissions —
preview.setPermissions({ hardware_control: false })
- HTTP —
preview.setHttpAllow("host:port,...")
- Logs —
preview.readLog({ lines: 50 })
Config
Workspace .decky/preview.json: rpcMode, ipcTimeoutMs, permissions, preDeployCommand.
Limitations
See PREVIEW_LIMITATIONS.md. On-device QA: deck.deploy + decky-debugger.