Problem
CapyDeploy v1.2.0 fails to render in the Quick Access Menu on SteamOS 3.7.22 with Decky Loader v3.2.3. The plugin loads (backend Python emits CapyDeploy plugin loaded) but the frontend silently inserts Decky's <TheError/> fallback instead of <CapyDeployPanel/>. Without a titleView, the fallback panel is also invisible in the sidebar.
Root cause
src/patches/contextMenuPatch.tsx:323-333 — getLibraryContextMenu() calls fakeRenderComponent with the result of a findModuleByExport query whose sibling filter requires both createElement AND navigator: literals in the export's .toString().
Steam updated its internal React build and stripped the literal React.createElement (now uses jsx/jsxs runtime). The .find() returns undefined, fakeRenderComponent(undefined) throws TypeError: fun is not a function, the definePlugin callback aborts, and Decky's plugin-loader catch-block pushes the TheError fallback shape {name, version, content: <TheError/>, icon: <FaExclamationCircle/>, loadType}.
Empirical evidence (from CDP probe on the Steam Deck)
TypeError: fun is not a function
at Module.fakeRenderComponent (chunk-BdVM2jqd.js:245:17)
at getLibraryContextMenu (CapyDeploy/dist/index.js:1262:35)
decky-steamgriddb (the original source of this pattern, per the comment on line 3) uses a simpler selector with only navigator: and continues to work on the same SteamOS version.
Fix
Drop the createElement filter. Bonus: migrate title: <div/> to titleView: <div/> to align with Decky's official Plugin interface (v3.2.x — title is not in the type, only titleView).
Affected
- SteamOS 3.7.22, Decky Loader v3.2.3
- decky-capydeploy v1.2.0
Problem
CapyDeploy v1.2.0 fails to render in the Quick Access Menu on SteamOS 3.7.22 with Decky Loader v3.2.3. The plugin loads (backend Python emits
CapyDeploy plugin loaded) but the frontend silently inserts Decky's<TheError/>fallback instead of<CapyDeployPanel/>. Without atitleView, the fallback panel is also invisible in the sidebar.Root cause
src/patches/contextMenuPatch.tsx:323-333—getLibraryContextMenu()callsfakeRenderComponentwith the result of afindModuleByExportquery whose sibling filter requires bothcreateElementANDnavigator:literals in the export's.toString().Steam updated its internal React build and stripped the literal
React.createElement(now usesjsx/jsxsruntime). The.find()returnsundefined,fakeRenderComponent(undefined)throwsTypeError: fun is not a function, thedefinePlugincallback aborts, and Decky's plugin-loader catch-block pushes theTheErrorfallback shape{name, version, content: <TheError/>, icon: <FaExclamationCircle/>, loadType}.Empirical evidence (from CDP probe on the Steam Deck)
decky-steamgriddb(the original source of this pattern, per the comment on line 3) uses a simpler selector with onlynavigator:and continues to work on the same SteamOS version.Fix
Drop the
createElementfilter. Bonus: migratetitle: <div/>totitleView: <div/>to align with Decky's officialPlugininterface (v3.2.x —titleis not in the type, onlytitleView).Affected