Framey settings sample
This is a small Decky API v2 plugin for authors. Its panel uses the official
@decky/api, @decky/ui, and @decky/rollup packages. A toggle calls a Python
backend method, stores one boolean under decky.decky_SETTINGS_DIR,
and reads it back when the panel opens. The backend rejects other keys and
values. The frontend also shows a local toast after a successful save. A
missing, damaged, or old non-boolean value reads as the caller's default;
the next save atomically replaces the sample's settings file.
Build
From this directory, run:
pnpm install --frozen-lockfile
pnpm build
pnpm exec tsc --noEmit
The committed dist/index.js is the built frontend. For a Decky release ZIP,
put plugin.json, main.py, and dist/index.js inside one top-level plugin
folder. Publish it through the official Decky store if you want Frame Control's
managed installer to offer it. Framey deliberately opens only plugins that the
official store installed and marked as owned; copying this example into the
plugin directory does not enable its VR panel.
Test and adapt
Run python3 -m unittest discover -s tests -p test_framey_sample.py from the
repository root. It checks backend persistence and evaluates the built bundle
against Framey's actual host script. The fake Frame store flow is exercised by
the repository's e2e suite. No worn-headset visibility or controller-input test
has passed for this sample yet.
The plugin needs no root access or system changes. Its settings remain after the managed plugin folder is removed, following Decky's settings behavior. For a production plugin, add explicit migrations for every supported schema, explain how users can reset settings, and test every UI path in a worn headset.