This repository exists solely for developers to submit plugins.
Use the built-in Plugin Store (or your store frontend) to download and install plugins.
To submit a plugin to this store, open a pull request adding your plugin as a submodule (see example PR #189 on the official Decky database).
- Don't forget to bump your version number in
package.json. - If you are not sure how to use submodules, see the Git submodules documentation.
-
Have your plugin in its own Git repository (e.g. on GitHub/GitLab). The plugin must be a separate repo, not just a folder in this repo.
-
Fork this repository (if it’s not yours) and clone it:
git clone --recurse-submodules https://github.com/YOUR_USER/store.git cd store -
Add your plugin as a submodule (use the folder name you want under
plugins/, usually the plugin name):git submodule add https://github.com/YOUR_USER/your-plugin-repo.git plugins/your-plugin-name
-
Commit and push, then open a Pull Request:
git add plugins/your-plugin-name .gitmodules git commit -m "Add your-plugin-name to the store" git push origin main
Once your plugin is in the store as a submodule, to publish an update:
git checkout main(sync with upstream:git pull).git checkout -b update/your-plugin(or any branch name).cd plugins/your-plugin-namegit pull(orgit fetch && git checkout <tag>to pin a release).cd ../..git add plugins/your-plugin-namegit commit -m "Update your-plugin-name to latest"git push
The repo includes a GitHub Actions workflow that builds plugin zips the same way as the official Decky plugin database:
-
In CI (this repo): On push or PR that touches
plugins/**, the workflow checks out submodules, then for each plugin runs:pnpm i --frozen-lockfile(orpnpm iif no lockfile)pnpm run build- Creates a zip excluding
src/,node_modules/,__pycache__/(and similar), named fromplugin.json→name(e.g.zipline-uploader.zip). - Uploads the zip as a workflow artifact named after the plugin folder (e.g.
zipline-auto-uploader). - On push to
main: If the secretRELEASE_TOKENis set (a GitHub PAT withreposcope), the workflow also creates a GitHub Release in the plugin’s own repo (the submodule), tagged frompackage.jsonversion (e.g.v1.0.0) and attaches the built zip. AddRELEASE_TOKENunder Settings → Secrets and variables → Actions to enable this.
-
Optional – Docker builder: The
builder/folder contains the same Dockerfile andentrypoint.shas the official database. To build a plugin locally with it:- Mount the plugin dir at
/pluginand a writeable dir at/out. - The container runs
pnpm i --frozen-lockfile,pnpm run build, then rsyncs the built plugin (excluding src, node_modules, pycache) to/out. You can then zip the contents of/outand use the plugin name fromplugin.jsonas the zip filename so the store/loader installs it correctly.
- Mount the plugin dir at
Plugins must have a plugin.json with a name field and a package.json with a build script (e.g. Rollup). Use pnpm and a pnpm-lock.yaml for reliable CI builds.
plugins/— Each entry is a git submodule pointing to a plugin’s repository. Do not add plugin source code directly here; add submodules only.
To match the decky-plugin-database model, each plugin must live in its own Git repository. To convert an existing plugin folder (e.g. plugins/zipline-auto-uploader) into a submodule:
- Create a new repository (e.g. on GitHub) for that plugin.
- Move the plugin code into the new repo (copy the plugin folder contents, init git there, push to the new repo).
- Remove the plugin folder from this repo (don’t delete the folder yet if you need to copy from it):
git rm -r plugins/your-plugin-name # or move/copy first, then remove - Add it back as a submodule pointing at your new repo:
git submodule add https://github.com/YOUR_USER/your-plugin-repo.git plugins/your-plugin-name git add .gitmodules plugins/your-plugin-name git commit -m "Add your-plugin-name as submodule"
This structure follows the same model as the Steam Deck Homebrew Decky Plugin Database: plugins are submitted and updated via pull requests that add or update submodules in the plugins/ directory.