Skip to content

fix(decky): render plugin on SteamOS 3.7.x#33

Merged
lobinuxsoft merged 1 commit into
mainfrom
32-fixdecky-plugin-fails-to-render-on-steamos-3722-steam-react-internals-changed
May 1, 2026
Merged

fix(decky): render plugin on SteamOS 3.7.x#33
lobinuxsoft merged 1 commit into
mainfrom
32-fixdecky-plugin-fails-to-render-on-steamos-3722-steam-react-internals-changed

Conversation

@lobinuxsoft

Copy link
Copy Markdown
Owner

Summary

CapyDeploy v1.2.0 stopped rendering on SteamOS 3.7.22 + Decky v3.2.3. The plugin loaded backend-side but the QAM showed nothing — the frontend silently fell into Decky's TheError fallback.

Root cause

getLibraryContextMenu() in src/patches/contextMenuPatch.tsx filtered LibraryContextMenu siblings by both createElement AND navigator:. Steam rebuilt React internals; the literal React.createElement is gone (now jsx/jsxs runtime). .find() returned undefined, fakeRenderComponent(undefined) threw TypeError: fun is not a function, the definePlugin callback aborted, and the loader inserted its error fallback {name, version, content: <TheError/>, icon, loadType}. Without a titleView, that shape is invisible in the sidebar.

Fix

  • Drop the createElement filter — leaves only navigator:, mirroring decky-steamgriddb (the original source of this pattern, per the comment on line 3) which kept working through the Steam UI update.
  • Migrate title: <div/>titleView: <div/> to match Decky's official Plugin interface for v3.2.x. The legacy title field is no longer in the TS type; it survived only by spread.

Verification

Built locally and deployed to a Steam Deck (SteamOS 3.7.22, Decky v3.2.3). Confirmed via CDP probe of SharedJSContext:

contentTypeName: "CapyDeployPanel"   (was "TheError")
iconTypeName:    "CapyIcon"          (was "FaExclamationCircle")
keys:            ["titleView","content","icon","onDismount"]

Test plan

  • User opens QAM on Steam Deck — CapyDeploy panel visible with title and capybara icon
  • User opens QAM on OneXFly — same behavior
  • Game library context menu still patched (CapyDeploy entry appears on right-click)

Closes #32

Steam's React internals were rebuilt and the literal `React.createElement`
no longer appears in the LibraryContextMenu module's siblings (now uses the
jsx/jsxs runtime). The double-filter selector in `getLibraryContextMenu()`
returned undefined, `fakeRenderComponent(undefined)` threw "fun is not a
function", the `definePlugin` callback aborted, and Decky inserted its
TheError fallback shape — invisible in the QAM without a `titleView`.

- Drop the createElement filter in the LibraryContextMenu sibling lookup
  (mirrors decky-steamgriddb, the original source of this pattern).
- Migrate `title:` → `titleView:` to match Decky's official Plugin
  interface for v3.2.x (`title` is not in the type).

Closes #32
@lobinuxsoft
lobinuxsoft merged commit bced7b4 into main May 1, 2026
2 checks passed
lobinuxsoft added a commit to lobinuxsoft/decky-plugin-database that referenced this pull request May 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(decky): plugin fails to render on SteamOS 3.7.22 (Steam React internals changed)

1 participant