Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Run a single backend test: `python -m unittest tests.test_plugin_status.PluginSt

## Release

Release steps (version bump, `v*` tag) are in [CONTRIBUTING.md](CONTRIBUTING.md#releases). The tag triggers `.github/workflows/release.yml`. Its `build` job (read-only token) checks the tag matches `package.json`'s version, installs, typechecks, builds, runs the frontend, backend and browser E2E tests, and zips `plugin.json` + `main.py` + `dist/index.js` (no source map) + `package.json` + `LICENSE.md`, and hands `DeckyHub-vX.Y.Z.zip` to the `publish` job, the only one with `contents: write`, which attaches it to a GitHub release.
Release steps (version bump, `v*` tag, and the back-merge of `main` into `develop` with a merge commit after each stable release) are in [CONTRIBUTING.md](CONTRIBUTING.md#releases). The tag triggers `.github/workflows/release.yml`. Its `build` job (read-only token) checks the tag matches `package.json`'s version, installs, typechecks, builds, runs the frontend, backend and browser E2E tests, and zips `plugin.json` + `main.py` + `dist/index.js` (no source map) + `package.json` + `LICENSE.md`, and hands `DeckyHub-vX.Y.Z.zip` to the `publish` job, the only one with `contents: write`, which attaches it to a GitHub release.

**Every release (pre-releases too) gets human-friendly release notes.** The workflow's `--generate-notes` only lists raw commit/PR titles, so once the release exists, replace its body with `gh release edit vX.Y.Z --notes-file <file>`:

Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ Users can point DeckyHub at their own registries too (**Repositories** → **Cus

Merge feature pull requests into `develop` with **Squash and merge** so it keeps one commit per PR; keep each PR to a single topic and use its title as the commit message.

After each stable release lands on `main`, open a pull request from `main` into `develop` titled `chore: merge main back into develop (X.Y.Z)` and merge it with **Create a merge commit**, the one PR that isn't squashed. A squash into `main` makes a commit `develop` never has, so without this back-merge the next `develop` → `main` PR conflicts even when the files are identical.

The repository's `.githooks/pre-commit` hook blocks commits on `develop` and `main`. Activate it once per checkout with `git config core.hooksPath .githooks`; protected branches on GitHub should enforce the same rule remotely.

To release, bump `version` in `package.json` (the backend reads it at runtime; there is no second copy), then push a `v*` Git tag. The tag starts the GitHub Actions release workflow. It fails unless the tag is `v` plus the `package.json` version. It installs the locked packages, typechecks, builds, runs the frontend and backend tests and the browser E2E suite in `devtools/decky-mock/`, and packages the Decky plugin with a read-only token; a separate publish job then attaches `DeckyHub-v*.zip` to the GitHub release. Release-notes conventions are in the Release section of [AGENTS.md](AGENTS.md).
Expand Down
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,17 @@ No setup, no configuration — the curated list shows up in Discover the moment

## Using DeckyHub

### Controller buttons

DeckyHub uses the standard Steam Deck controls, plus two extra shortcuts on every **Install** / **Update** button (on Discover and Updates cards, in the [Manage](#manage) window, and for DeckyHub's own update):

| Button | What it does |
| --- | --- |
| **X** | Download that release's ZIP to `/home/deck/Downloads/deckyhub` instead of installing it. Not shown when **Download ZIP** is hidden in Settings. |
| **Y** | Show the release notes (what that release changes) without installing anything. |

Steam's footer shows the X and Y actions for whichever button is focused.

### Discover

Browse the curated list or search it by name, repository, category or description, and filter by **Status** (All, Installed, or Not Installed) and **Category**, and **Sort** A to Z, Z to A, or Recently added (newest additions to the list first; plugins with an update always come first). Each card is color-coded (green once it's up to date, yellow when an update is available, red on an error) so you can spot what needs attention at a glance, and says **Checking…** while its latest release is still being looked up. A card set to the pre-release **Channel** says so; stable is the default and isn't labelled. Tap **Manage** on any card to pick a channel and version, then download the release asset you want.
Expand Down
4 changes: 2 additions & 2 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ <h2>Why you'll like it</h2>
<div class="grid">
<div class="card"><div class="ico" aria-hidden="true">🔔</div><h3>Never miss an update</h3><p>DeckyHub checks your installed plugins against their latest GitHub releases and pings you with a toast the moment something new drops.</p></div>
<div class="card"><div class="ico" aria-hidden="true">🧭</div><h3>Discover new tools</h3><p>A curated catalog of Steam Deck plugins, filterable by status and color-coded so you spot what needs attention at a glance.</p></div>
<div class="card"><div class="ico" aria-hidden="true">🎮</div><h3>Controller first</h3><p>Full gamepad navigation and one-tap actions designed for Gaming Mode, not a desktop page squeezed onto a small screen.</p></div>
<div class="card"><div class="ico" aria-hidden="true">🎮</div><h3>Controller first</h3><p>Full gamepad navigation and one-tap actions designed for Gaming Mode, not a desktop page squeezed onto a small screen. On any Install or Update button, Y shows the release notes and X downloads the ZIP instead.</p></div>
<div class="card"><div class="ico" aria-hidden="true">🛡️</div><h3>You stay in control</h3><p>Installs go through Decky Loader's own installer and confirmation dialog, with SHA-256 checksums verified whenever GitHub publishes one. Nothing runs on its own.</p></div>
<div class="card"><div class="ico" aria-hidden="true">📦</div><h3>Track any repo</h3><p>Search GitHub, add any repository, pick stable or pre-release channels per app, and export your list to share or back up.</p></div>
<div class="card"><div class="ico" aria-hidden="true">🔄</div><h3>Updates itself</h3><p>The Quick Access Menu tells you when a new DeckyHub release is out and updates it in place. You can also reinstall or downgrade to any recent version.</p></div>
Expand All @@ -91,7 +91,7 @@ <h2>Why you'll like it</h2>
<h2>Take the tour</h2>
<p class="sub">Four screens, all reachable from the Quick Access Menu.</p>
<div class="grid" style="grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr))">
<figure><div class="shot"><img src="img/menu.webp" srcset="img/menu-640.webp 640w, img/menu.webp 1280w" sizes="(max-width:900px) 100vw, 540px" width="1280" height="800" alt="DeckyHub Menu screen" loading="lazy" decoding="async"></div><figcaption><strong>Menu</strong> — jump to Discover, Updates, Repositories or Settings from the Quick Access Menu.</figcaption></figure>
<figure><div class="shot"><img src="img/menu.webp" srcset="img/menu-640.webp 640w, img/menu.webp 1280w" sizes="(max-width:900px) 100vw, 540px" width="1280" height="800" alt="DeckyHub Menu screen" loading="lazy" decoding="async"></div><figcaption><strong>Menu</strong> — jump to Discover, Updates or Settings from the Quick Access Menu, and keep DeckyHub itself up to date.</figcaption></figure>
<figure><div class="shot"><img src="img/discover.webp" srcset="img/discover-640.webp 640w, img/discover.webp 1280w" sizes="(max-width:900px) 100vw, 540px" width="1280" height="800" alt="DeckyHub Discover screen" loading="lazy" decoding="async"></div><figcaption><strong>Discover</strong> — browse the catalog, filter by install status, open Manage to pick a channel and version.</figcaption></figure>
<figure><div class="shot"><img src="img/updates.webp" srcset="img/updates-640.webp 640w, img/updates.webp 1280w" sizes="(max-width:900px) 100vw, 540px" width="1280" height="800" alt="DeckyHub Updates screen" loading="lazy" decoding="async"></div><figcaption><strong>Updates</strong> — every installed tool with a newer release, next to the version you have.</figcaption></figure>
<figure><div class="shot"><img src="img/manage.webp" srcset="img/manage-640.webp 640w, img/manage.webp 1280w" sizes="(max-width:900px) 100vw, 540px" width="1280" height="800" alt="DeckyHub Manage screen" loading="lazy" decoding="async"></div><figcaption><strong>Manage</strong> — download the ZIP, or install and update through Decky Loader.</figcaption></figure>
Expand Down
Binary file modified screenshots/discover.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified screenshots/manage.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified screenshots/menu.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified screenshots/updates.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading