github santojon/Deck-Shelves v3.0.0
Deck Shelves v3.0.0

3 hours ago

Added

  • Statistics and Suggestions are now two separate tabs, with real charts. Suggestions live in their own tab (grouped into "Creation" and "Cleanup"). The Statistics tab gains trend cards (this week vs last, with an up/down arrow), a daily-activity chart with trend lines, stacked and cumulative charts, and pie charts for your card and shelf breakdowns. A #/% button flips every chart between exact counts and percentages, and your choice is remembered. Every chart is gamepad-focusable.

  • See what your shelves are made of. New breakdowns show your cards by type (games, non-Steam, store, wishlist — counted even when they live inside a multi-source shelf and you've never opened them), by state (normal, featured, decorative, hidden), and your shelves by kind (normal vs smart) and by source (collection, filter, store, wishlist, composite, …) — where a composite shelf also counts each of its parts. The Usage section now lists everything, uncapped.

  • Remap the sidecar open/close shortcuts. "Open Sidecar" (default dpad-right ×2) and "Close Sidecar" (default dpad-left) are now in the Shortcuts tab and can be remapped to any combo. The Shortcuts tab is split into "Card actions" and "Navigation", each with its own reset button, and every shortcut now shows its default on screen even if you've never changed it.

  • "Show all logs" switch (Advanced → Logs). Turn it on to route every log — including developer-only ones — into the on-device log list, so you can inspect what the plugin is doing without a PC console. Off by default.

  • New Statistics tab in Settings. See your library at a glance — total/Steam/non-Steam/installed/favorite games, playtime totals and averages, Steam Deck compatibility breakdown — plus shelf metrics: how many shelves you have by type (filter, tab, collection, wishlist, store, composite, smart), how many cards are decorative, and averages tracked over time. The page is fully gamepad-navigable and translated into all 19 languages. Up to five contextual suggestions (e.g. "you have N never-played games") appear as cards you can select to add a matching shelf in one press. Other plugins can add their own statistics areas to this page.

  • Two new shelf templates: "Never Played" and "Deck Playable". Quickly build a backlog shelf of games you own but never launched, or a shelf of everything rated Deck Playable.

  • Integrations page shows every provider type. The Settings → Integrations card now lists side-menu providers, context providers, widgets, shelf renderers, metadata providers, statistics providers and recommendation providers in addition to the existing shelf sources / smart sources / filters / sorts / importers / search providers — each with its own group heading. Translations land in all 19 locales.

  • About → How to: closing paragraph. Added a focusable closing step after the existing tip and note so the page ends on plain text instead of two stacked callouts.

  • Quick Search / Side Nav close ambient menus before opening. When you trigger either combo on the home, Deck Shelves now closes the QAM, the Steam main menu and any open context menu first, then opens the overlay. You no longer have to manually dismiss those before triggering the combo.

  • Remap (or disable) the gamepad buttons that trigger shelf actions. New Shortcuts card in Settings lets you change which buttons fire: hide/remove a card, toggle highlight, quick-launch (Install / Play / Resume / Uninstall / Pause), open Quick Search, open Side Navigation. Defaults match today's layout (X, Y, View, L1+R1, L1+L1). Pick a row → "Capture", press your new combination (single button, two-button chord, or double-tap of the same button), and it persists. Card-level shortcuts can be disabled entirely if you don't want them at all. Navigation shortcuts can be remapped but not disabled (they're the only entry point to those features). A, B, Menu, Steam and the screenshot button are reserved by the system and rejected — even in combinations.

  • Drag-and-drop reorder for the unified shelf list. With "Unified list" on, each row in Settings → Shelves now has a ⋮⋮ handle on the left. Grab it and drop the row anywhere in the list — the order persists across restarts. The ↑ / ↓ buttons stay put so gamepad-only users keep a fast path.

  • External launcher game discovery. If you've installed EmuDeck, RetroDECK, Heroic, Lutris, Moonlight, or Chiaki, Deck Shelves now reads their game lists in the background (read-only — no writes, no telemetry) and surfaces them through the matching shelf sources (e.g. "Heroic library", "EmuDeck collections"). Games that you've already added as non-Steam shortcuts show up; the rest stay cached for a future "import as shortcut" surface. The probe never blocks plugin boot, and a launcher you install mid-session is picked up within 15 minutes without restarting Steam.

  • 76 new built-in filters + sorts + shelf sources. Filter games by genres, categories, franchise, VR support, multiplayer type, family sharing, DLC ownership, soundtrack ownership, launch count, average session length, never completed, recently abandoned, installed but never played, played only once, achievement percentage range, storage device (SSD vs SD), installed size, compat data quality, EmuDeck/RetroDECK/Heroic/Lutris/Chiaki/Moonlight launchers, executable type, launch option tags, custom tags, parser categories, hidden launcher shortcuts. Sort by most/least launched, longest/shortest session, most ignored, rediscovered recently, completion %, closest to completion, rarest achievements, newest/oldest installed, oldest unplayed, newest purchased, largest/smallest install, SSD/SD priority, friends playing now, most friends owning, trending among friends, plus 5 randomisation variants. Use new shelf sources: dynamic Steam collections, followed games, ignored games, DLC, soundtracks, pinned games, history, session queues, recently updated games, games with events, games with workshop updates, controller-specific. (External launcher sources show up but need the next backend release to populate their game lists.)

  • Composite filter modes. New "Weighted filter" (sum-of-weights ≥ threshold), "Priority filter" (first-match wins), "Exclusion group" (any match excludes). Each wraps multiple child filters with a different combination policy than the existing AND/OR groups.

  • Built-in chip on every Deck Shelves first-party integration. Open Settings → Integrations and you'll see a green BUILT-IN tag on every entry shipped by Deck Shelves itself, distinguishing them from third-party plugins.

  • Profiles export to file + import from file. Move profiles between Steam Decks or back them up before reinstalling. Files land in your Downloads folder by default (deck-shelves-profiles.json for the whole list, or profile-<name>.json for a single export). Importing a file you already have on the same device de-duplicates names automatically.

  • "Default" profile at the top of the list. Always-present read-only entry that resets every setting to factory defaults when you Apply it. Your saved profiles stay intact (nothing is wiped). Marked with a built-in chip so you can tell it apart from your own.

  • Scannable Ko-fi QR on the Support page. A 128×128 QR code now sits next to the Ko-fi button in the About → Support tab. Point your phone camera at it to open the donation page without leaving the Deck.

  • Integrations panel toggles every plugin on or off. The Integrations card now lists every registered descriptor (built-in OR third-party) with a toggle. Flip an integration off and any contributions it makes (search hits, custom shelf sources, etc.) drop out of the runtime until you flip it back on. A green "BUILT-IN" chip marks Deck Shelves' own entries.

  • "Add shelf" picker has Standard + Smart tabs when unified is on. With "Unified shelf list" enabled, picking "Add shelf" opens a single modal with two tabs covering every template at once. Off, it's the original separate flows.

  • Reorder shelves directly from the Settings page. Each row in the Shelves detail panel (in unified mode) shows ↑ / ↓ buttons that reorder the shelf on the spot. Saves immediately; reflects on the home next time you open it.

  • "Features" section in the QAM hides whole surfaces. New section with 5 toggles: Regular shelves, Smart shelves, Filters, Synthetic cards, Plugin API integrations. Each is on by default; turning one off hides every related UI surface (data is preserved — re-enabling restores everything).

  • "Network features" section consolidates the online toggles. All four network-gated toggles (online features master + wishlist + price sort + hide-owned) now live in one labeled block instead of being scattered.

  • Light mode hides more advanced surfaces now. With "Light mode" on, the QAM/sidecar additionally hides: smart-shelves at bottom, surprise-me, the four global visual sliders (logo size, logo top offset, description height, description-logo gap). Eight advanced controls vanish; values stay persisted.

  • Profiles in the QAM. New collapsible "Profiles" section sits above Behavior. Shows up once you have at least one shelf. Save your current setup with one tap (➕), or pick a saved profile from the dropdown to apply it instantly. "None" detaches the active marker without changing anything.

  • About page redesigned to match the new Settings page. Same back arrow, same title typography, same trailing icon slot — they read as a pair now.

  • Unified shelf list actually renders on the home. With "Unified shelf list" on, the home merges regular + smart shelves using the order you set in the Shelves detail panel. New shelves you create fall to the end until you place them.

  • Light mode hides the first advanced toggle. With "Light mode" on, the "Force CSS Loader themes" advanced toggle disappears from the QAM/sidecar. More advanced sections gain Light Mode treatment in upcoming releases.

  • Usage profiles. Save your entire setup (every toggle, every shelf, every saved filter) as a named profile from the Settings page → Profiles card. Apply switches your live setup to the saved snapshot in one tap (with a "this will replace everything" confirm). Duplicate forks a profile, Rename relabels, Delete removes the snapshot. An "Active" badge marks whichever profile is currently applied; Detach unties without losing anything.

  • Shelves detail does full CRUD now. Add / Edit / Delete buttons inline on every shelf (the same modals the QAM list opens). Regular and smart shelves side by side, with a small Normal / Smart chip on each row so the type is obvious at a glance.

  • Unified shelf list toggle (preview). New toggle under Smart shelves: "Unified shelf list". Off by default. Flipping it on for now changes the Shelves detail to a single merged column ordered by allShelvesOrder — the home itself stays split until the next release ships the merged render path.

  • Light mode toggle (preview). New toggle under Smart shelves: "Light mode". Flipping it on persists, but doesn't hide anything in the QAM yet — the per-section visibility gates ship in the next release.

  • Settings page detail panels. Picking a card now opens a detail panel from the right edge instead of the "Coming soon" placeholder. The four newly-wired panels are:

    • Quick settings — a focused checklist that lets you flip "show in QAM" for every toggle and section. Values stay on; this is just visibility management.
    • Shelves — list of every shelf with title + source description.
    • Backup — three rows (regular shelves / smart shelves / full settings) with Export + Import buttons each. Files land in your Downloads folder by default.
    • Advanced tools — diagnostic log viewer (last 50 plugin events with timestamps, levels, and clear button) plus the three factory-reset shortcuts (shelves only / smart only / everything). Reset still asks for confirmation.
  • Settings page is on by default now. The gear icon next to the docs icon in the QAM opens the new page out of the box on first install / upgrade. If you'd previously turned the feature off explicitly, that choice is preserved.

  • Dedicated Settings page (two-pane shell). Gear icon in the QAM opens a new Settings page laid out as a two-pane view: the left side mirrors every toggle from the sidecar (flipping one mirrors instantly in QAM / sidecar), and the right side adds a 2×3 card grid with deep destinations — Quick settings, Shelves, Profiles, Integrations, Backup, and Advanced tools. Picking a card slides in a detail panel from the right; B closes it back to the grid. Shelves and Integrations ship with their existing content right away; the other four cards land in the next release.

  • Two new Quick Search options. "Open virtual keyboard" (on by default) keeps the auto-popup behaviour you already had. Turn it off if you type on a physical keyboard and don't want the on-screen one in the way. "Search only on Enter" (off by default) replaces the wait-and-search timer with an Enter-only trigger — type as long as you want, the search only fires when you press Enter. Both toggles appear under the Quick Search section and respect the hide-from-QAM eye button just like every other setting.

  • Quick Search finds more games. The search now scans every game across every shelf you have on screen — including cards below the fold or still loading their metadata. Names like "Pokémon" match "Pokemon" (and vice-versa) automatically. If you hit a game whose card isn't mounted yet, the activator scrolls the owning shelf into view and waits for the card to appear before focusing it.

  • Search keyboard exits cleanly. Closing the search (via R1+L1, B, finding a match, or no-match timeout) now also dismisses the on-screen keyboard. The shelf you came from gets focus back.

  • Side Nav opens on your current shelf. Pressing L1 twice now lands the panel's focus on the row matching the shelf you were on, not the first one. Three retries cover the brief window where Steam's nav tree is still indexing the new panel.

  • Side Nav goes dark. The backdrop is a deeper black-tinted wash with stronger blur. The focused row uses a black gradient with a theme-coloured left edge bar (Steam's --gpSystemLighter accent) so it stands out without shouting white over your wallpaper.

  • Logo / description / icon banner on every shelf. Turn on "Show logo" and the focused game's clear-logo art appears prominently above the cards (per shelf, or globally for every shelf). Pair it with "Show description" and the Steam store snippet sits right under the logo. A second "Description below logo" toggle decides whether description follows the logo or stays under the playtime row of each card. Width is capped to roughly four normal cards so long snippets ellipsis cleanly instead of pushing other rows around.

  • Position + sizing controls for everything visual. New left / center / right dropdowns for: logo position, description position, shelf title position, game name position, and the playtime row. Plus sliders for logo size (50-200%), top offset, and (when description is under the logo) how many lines tall the description block is (1-6). Set a default globally, override per shelf — globals win when configured.

  • Small game icon next to the card label. "Show icon" overlays the game icon to the left of the name + playtime block. A new "Icon vertical align" dropdown picks top / center / bottom alignment for it.

  • "Full-page shelf" toggle. Promotes any shelf to the same full-screen hero layout the first shelf gets when "Hide recents" is on. Available per shelf, with a global override. Sits last in the QAM Visual section and as the penultimate item in the Edit Shelf modal (right before the per-card highlights).

  • Slider values now show next to their labels. Every slider in the plugin (QAM, sidecar, edit modal, smart-shelf modal, filters) renders the live value flush-right above the bar. The redundant (value) we used to embed in some slider labels is gone — the value is shown automatically and is no longer cut off on narrower surfaces.

  • Logo, icon, and description caching. Logo and icon URLs now go through the shared image-blob cache, so once you focus a card the assets land in memory and the next focus on the same card is instant. Descriptions are saved to local storage too — reopening the plugin keeps the snippets you already saw rather than re-fetching them from Steam.

  • Full-page Settings route. Turn on settingsPageEnabled and the gear icon in the QAM opens a dedicated page with five tabs: General (mirrors every side-panel toggle), Shelves (list with edit / delete + add-shelf entry), Filters (saved filters list), Templates (browse the full library and open the editor pre-populated), and Integrations (snapshot of every plugin that registered shelf sources, smart sources, filter types, sort options, or importers via the public API).

  • Context Search overlay. Anywhere on the home, start typing and a centered overlay appears with the typed buffer highlighted. When you stop typing, the plugin searches the games currently rendered in your shelves and shows ranked matches. Picking a match focuses the exact card in its shelf (scrolling it into view). Enter activates the top result; Esc / B closes.

  • Side navigation on dpad-left. Press left on the first card of any shelf and a side panel slides in listing every visible shelf (regular + smart) — pick one to jump straight to its first card.

  • pnpm pnpm:upgrade / pnpm pnpm:upgrade:api scripts. Pin Corepack to the latest pnpm in one command, for the plugin repo and the standalone API package.

  • Crash protection for the side panel. A render error inside the quick-settings panel no longer kills the whole panel; an inline error box appears instead while the rest of the QAM keeps working.

Changed

  • CSS Loader themes can now restyle every text colour in the plugin UI. The about pages, settings details, error / warning banners and filter helpers used to hard-code shades of white and grey; they now read from the --ds-text / --ds-text-dim / --ds-text-faint / --ds-danger / --ds-warn / --ds-link CSS variables. Default appearance is unchanged unless a theme overrides those tokens.
  • External plugins built against @deck-shelves/api now receive correctly-shaped game data. The published contract promised a clean PublicAppMeta (with isSteam, playtimeMinutes, …) but the runtime was handing plugins Steam's raw object (is_non_steam, playtime_forever, …). Filter predicates and sort functions from external plugins effectively ran on the wrong shape. Fixed at the runtime boundary; first-party Deck Shelves filters keep working unchanged. No action needed from you — anyone shipping a plugin against the api package will see correct values starting in this build.
  • Devkit lives in its own folder. The development-only tooling (CDP probes, screenshot pipeline, perf bench) moved out of scripts/devtools/deck/ into deckprobe/, with its own README / CHANGELOG / package.json / Python package layout. End-user impact: nothing — your installed plugin doesn't ship the deckprobe. Contributors using pnpm devtools:cli, pnpm screenshots, pnpm perf:bench, pnpm uitests use the new paths transparently (the npm scripts were updated).
  • Side panel title leads with the gear icon so the panel reads as a settings surface at a glance. The behavior section icon was swapped to a sliders pictogram so the gear is reserved for the full-page Settings entry.
  • Side panel background matches the QAM theme. Previously the side panel forced a fixed dark colour even when the QAM around it was themed; now it lets whatever theme the QAM is using show through.
  • Visual fields grouped by their owner. In the Edit Shelf modal, the QAM Visual section, and the side panel, each parent toggle is immediately followed by its dependent controls and they only appear once the parent is turned on. No more hunting for the "logo position" dropdown three rows below the "Show logo" toggle.
  • Sliders in narrow surfaces never trip the side panel. Holding right on a slider while adjusting its value no longer pops the side panel open.

Fixed

  • The View-button hint said "Pause" on games with a queued update. When a game (or a tool like Proton Experimental) had an update waiting but not actively downloading, the hint read "Pause" instead of "Update". It now reads "Update" until the download is genuinely in progress.
  • Hero art jittered up and down as you moved between cards. With per-shelf hero art on, the background image alternated between two slightly different vertical framings card-to-card. Both cross-fade layers now use the same framing, so the hero stays steady while you browse.
  • Focus could get stuck in the native recents row when trying to come back down to Deck Shelves. After pressing UP into the system search bar / native recents, pressing DOWN three times would occasionally hop between hidden shells above the shelves instead of landing on a Deck Shelves card. The focus bridge now detects this case and routes you straight into the first DS card.
  • Quick Search wasn't navigating to the game it found. The overlay was restoring focus to the card you opened the search from right after the activator moved focus to the hit — so the visible result was "search closed, nothing happened". Reordered so the overlay closes first, then the activator runs after a short pause.
  • R1+L1 stopped closing the search overlay once you'd typed something. While the input held the navigation focus the home button bus didn't fire, so the chord was silently ignored. The pill now also subscribes directly to the controller bus so R1, L1, or B always close it.
  • Side Nav toggle didn't actually disable it. Flipping the toggle off used to leave the panel responsive to its L1-twice trigger until a reload. Now it stops listening immediately and snaps the panel closed if one is open.
  • Shelves vanishing after enabling logos. Some shelves disappeared from the home until the QAM was re-opened because the new position fields rejected the null returned by the settings sanitizer. The schema now accepts the missing case cleanly.
  • Side panel could be pushed below the visible area with logo + description on. Promoted (full-page) shelves no longer add extra padding for the logo zone — the logo composes inside the existing hero area instead of pushing the card row off the screen.
  • Accidental side panel open when moving onto the rightmost button in a row. Pressing right twice on the same focused element is now required to expand the panel; the first press just lands the focus there.

Plugin API changes (registerSearchProvider, registerSideMenuProvider, new descriptor types, public registry getters) are tracked in api/RELEASE_NOTES.md. CDP deckprobe additions are tracked in deckprobe/RELEASE_NOTES.md.

Don't miss a new Deck-Shelves release

NewReleases is sending notifications on new releases.