All notable changes to Proton Pulse should be recorded here.
- Compat tool auto-update now runs at startup for both Proton-GE and CachyOS Proton, throttled to once per 24h
- Advanced Settings shows compat tool auto-update status with full timestamps and next check time
- Per-report analysis modal: score pill and What's this button are now horizontally aligned; EXCELLENT tier label sits below
- Reset Filters button added to the report filter row
- GPU architecture shown under GPU tier in report details
- Log viewer inline preview fills the full available space
- Filters modal has a single Close button
- Confidence badge in Manage This Game header now matches the Analysis tab
- Replace filter dropdowns with Filters modal button
- Fix "vDeveloper" label on Settings > Updates page across all locales
- Move version-prefix formatting to call sites so translators stay dumb
- Add vDeveloperGuard test that fails if any locale re-prefixes raw labels
- Use full /proton-pulse/ route paths in sidebar (1.7.4)
- Hidden focusable in loading state so gamepad input stays captured
- I18n: enforce strict 100% coverage; localize 2 remaining brand strings
- I18n: translate 61 new extras keys across all 28 languages (>= 99.7%)
- Sync README + translation coverage metrics for 90% floor
- Check-translations: lower MIN_COVERAGE 95 -> 90 (tracked in #83)
- I18n: wire 71 hardcoded UI strings to extras tree, seed 9 enforced langs
- Release: -pre-release tag suffix + edit notes before any commits
- Sync release-derived files for 1.7.3
- fix(updater): pre-release channel now finds the newest actual pre-release entry instead of the newest release overall, preventing false "downgrade" suggestions when the latest overall release is a stable build
- fix(game-page-badge): useLayoutEffect dedup eliminates duplicate hero badges from secondary React fiber instances
- fix(library-grid-badges): skip tile scan when game details page is open (appDetailsClasses.InnerContainer detection) -- prevents lib badges bleeding onto game page
- fix(library-grid-badges): filter library_hero and library_header URLs from tile scan
- fix(library-grid-badges): minimal badge sized to match Steam Deck Verified badge circles (15px SVG + 4px padding)
- feat(i18n): full translations for badge style settings across all 19 locales
- feat: show ProtonDB tier badges on library grid tiles (home page and installed/all games views)
- feat: game page and library grid badges each have a three-way style selector -- Full (PLATINUM/GOLD/...), Compact (PLAT/GOLD/...), Minimal (atom icon in tier color only), or Off
- feat: game page badge uses 3-ring atom icon matching the Proton Pulse brand mark
- feat: Native Linux badge shown on game page when platform_list includes Linux (EAppPlatform 16)
- feat: non-Steam shortcuts show source badge (Heroic, Epic, GOG, Lutris, Bottles, itch.io) and resolve ProtonDB tier from matched Steam store ID
- feat: QAM menu icon updated to 3-ring atom variant
- fix: persist ProtonDB summary to localStorage cache after network fetch so badges survive restarts and offline sessions
- fix(game-page-badge): useLayoutEffect dedup hides secondary React fiber badge instances before paint -- keeps lowest-on-screen badge as primary
- fix(library-grid-badges): skip scan when game details page is open (detected via appDetailsClasses.InnerContainer in BPM DOM) -- prevents tile scanner from stamping lib badges onto game page capsule images
- fix(library-grid-badges): filter library_hero and library_header image URLs from tile scan to prevent hero artwork matching grid tile selectors
- fix(updater): use sudo -n to restart plugin_loader service (root flag does not grant passwordless systemctl)
- fix(updater): use sudo -n to restart plugin_loader service (root flag does not grant passwordless systemctl)
- fix(updater): restart plugin_loader service after update so backend picks up new version
- fix(updater): triggerReload now calls restart_plugin_loader callable before falling back to Steam restart
- fix: force sidebar focus on plugin open so D-pad can navigate tabs in SJC (quick-access) context
- fix: show clearer error when self-update callable is unavailable on old installs
- fix(updater): progress bar in Settings tab instead of toast during update install
- feat(about): built-in self-updater with progress bar for non-store installs
- Check for Updates button on About tab queries GitHub Releases API
- Downloads release ZIP in a background thread via curl with live progress (bytes, %, ETA) matching the Proton-GE installer style
- Extraction overwrites the plugin directory in place
- Reload Plugin button attempts Decky hot-reload first, falls back to Steam restart
- Full translations for all 19 supported locales
- docs: README Updating the Plugin section
- Release notes were autogenerated during release preparation.
- Decky Loader release submission.
- feat(settings): configurable cloud sync refresh rate (default 1 min)
- fix(manage): offline toast never shown -- refreshCloud swallowed error
- fix(manage): improve offline toast to say "Device offline -- sync unavailable"
- fix(manage): fix refresh button width
- fix(manage): show "Local only" badge instead of "Not synced" when cloud is unreachable
- fix(manage): refresh sync status every 30s while on Manage Configurations tab
- fix(manage): add manual refresh button with toast feedback
- fix(schema): add Proton 10.0-1 through 10.0-4 to knownProtonVersions
- Release notes were autogenerated during release preparation.
- Decky Loader release submission.
- NativePulseReportModal: fullscreen layout, auto-scroll with focus advance through all questions
- NativePulseReportModal: live rating badge pinned in header, summary field removed
- NativePulseReportModal: proton type/version prefill from tracked config and Steam compat tool property
- ManageTab: duplicate report guard with ConfirmModal before overwriting
- ManageTab: fetch Steam forced compat tool via getCompatToolForApp for proton version prefill
- EditReportModal: scroll timeout fix (200ms -> 300ms)
- ScoringGuideModal: new modal explaining how compatibility scores are calculated
- i18n: new translation keys for all added UI strings
- feat(playtime): event-based game detection via RegisterForAppLifetimeNotifications with poll fallback
- feat(playtime): config-specific playtime weighted 1.25x in getEffectivePlaytimeMinutes
- feat(manage): Active (yes/no) row in config info modal, color-coded green/amber
- feat(manage): Playtime (this config) row in info modal
- feat(manage): Apply option in context menu for quick config reapply
- fix(playtime): getTrackedConfigs import missing caused poll fallback errors
- fix(playtime): poll no longer falsely ends session when event listener is active
- feat(scoring): playtime confidence bonus -- reports with >= 2h playtime rank higher (underOneHour=+3, oneToFourHours=+6, fourToTenHours=+9, overTenHours=+12)
- fix(log): correct WARN to WARNING log level in NativePulseReportModal
- fix(i18n): translate common.confirm and configManager.cloudRestoreConfirm for all 18 languages
- fix(playtime): async getSteamPlaytimeForeverMinutes with RegisterForAppDetails fallback and GetAppOverviewByGameID source
- chore(deploy): y/n prompt for PR push, detect existing PR title/author, clean fork sync
- Bump to 1.7.2 -- updater pre-release channel fix
- Pre-release channel finds newest actual pre-release, not newest overall release
- Set VERSION to 1.7.1
- Bump to 1.7.1 for pre-release -- badge dedup and lib grid fixes
- Game page and library grid ProtonDB tier badges (v1.7.0)
- Use image URL to detect portrait vs wide tiles
- Add library grid ProtonDB tier badges with persistent cache
- Sync release-derived files for 1.6.8
- Sync version metadata
- Bump version to 1.6.8 for pre-release
- Restart plugin_loader service so backend reloads after update
- Sync release-derived files for 1.6.6
- Restart plugin button: clickable reload after update installed
- Reset check result when switching update channel
- Updater: show restart message instead of force-reloading
- Enable root flag for self-update, use backend apply_update
- Restore toaster import in AboutTab, remove mise hardcoding from Makefile
- Sync release-derived files for 1.6.1
- Release notes were autogenerated during release preparation.
- Decky Loader release submission.
- Add Demo to translation skip values (universal gaming term)
- Demo detection, double-B exit opt-in, B routing fix, and 1.0.0 polish
- Derive plugin dir from DECK_USER instead of hardcoding /home/deck
- Release notes were autogenerated during release preparation.
- Decky Loader release submission.
- Improve Python coverage 94% -> 98%
- Version bump
- Add Termux and Windows OS version badges to coverage-badges workflow
- Rename Autobuild workflow to Ubuntu Build
- Remove redundant platform name column from build table
- Achieve 100% translation coverage across all 19 languages
- I18n: fill translation gaps for all 34 missing keys across 18 languages
- Suppress @decky/ui DialogButton and TextField prop type gaps
- Remove store page badge, shrink not-in-library to inline pill
- Fix VDF parser nested map desync and show dual badges
- Wire store page badge and search hint into plugin lifecycle
- Disable all report action buttons for non-library games
- Add Y-button hint on search results and store page badge
- Add top-level image field to plugin.json for Decky store submission
- Add OS version badges and update coverage metrics
- Resolve non-Steam shortcuts to Steam store app ID for reports
- Replace Bazzite workflow with fedora:latest to auto-track stable releases
- Use standalone pnpm and uv installers to avoid OSTree /usr/local symlink issue
- Use crane export to import Bazzite as single-layer image
- Free runner disk space before vfs pull to avoid ENOSPC
- Pull and squash real Bazzite image to bypass layer limit
- Switch to fedora:41 to fix max depth exceeded layer error
- Add published/draft badge, info modal, and restore-overwrite behavior
- Add game filter and consolidate action buttons on one row
- Add right-side focus highlight and left-align hint text
- Increase live log height
- Use eType:40 to silence toast sound when setting is off
- Update tests for toast sound toggle and backfill translation coverage
- Add toast sound toggle to general settings
- Update test to match _get_library_info fallback free-space behavior
- Restore: recover full repo after accidental filter-repo wipe
- Release notes were autogenerated during release preparation.
- Decky Loader release submission.
- Remove unused template backend and defaults folders
- Decky Loader release submission.
- Changelog gen fixes
- Adjust release/pre-release mechanisms
- Decky Loader release submission.
- Toast already linked when generating link code
- Fix hardware upload and add CEF debug toggle
- Document optional Proton Pulse account linking
- Document Node 24 dev workflow
- Decky Loader pre-release submission.
- Fix settings action row navigation
- Run plugin CI on Node 24
- Regenerate changelog from release commit history
- Upload hardware through linked install function
- Delete cloud configs with plugin reports
- Sync cloud-owned reports and close upload modal
- Document CEF screenshot limits for external pages
- Avoid reopening link request when already linked
- Tighten settings account and hardware actions
- Add CEF capture tooling and debugging docs
- Fix Deck remote dev bootstrap and CEF debug setup
- Move remote dev bootstrap into a script
- Bootstrap remote Deck dev helpers over SSH
- Bust Deck browser cache for plugin linking page
- Open the dedicated plugin linking page from Decky
- Add installation proof to plugin linking
- Migrate hardware uploads to Proton Pulse ownership
- Add Proton Pulse account linking flow to Decky
- Polish report source details and config filters
- Stop deriving plugin identity from Steam account names
- Translations and tests backfill
- One last fallback issue for local install
- Local fallback on reload
- Local fallback for reload
- Generate smarter default label for uploaded systems
- Refresh README and metrics snapshots
- Wire cloud-push subscriber + surface sync state everywhere
- Tighten protondb_systeminfo GPU and OS detection
- Add three-stage clipboard fallback with logging
- Prefill config editor from current Steam launch options
- Relax Pulse report modal validation
- Resolve Steam ID from multiple client sources
- Accept named Proton branches in validator regex
- Auto-fill duration bucket from steam lifetime playtime
- Pre-fill launch options and auto-duration from Manage tab report modal
- Point CDN and profile links at www.proton-pulse.com
- Add Publish to Pulse button with auto-duration and 40-char notes gate
- Log my hardware upload clicks and outcomes
- Update gitignore
- Translate my hardware strings for all 9 locales
- Task7: add My Hardware section with view, upload, and profile buttons
- Task6: add i18n strings for My Hardware settings and modal
- Task5: add MyHardwareModal for viewing and copying system info
- Task4: add uploadSystem with two-step upsert to preserve web edits
- Task3: generate label from os and gpu in sysinfo blob
- Task2: add device id and steam id helpers for hardware sync
- Task1: add user_systems table migration and apply helper
- Windows build work
- Windows toolchain build
- Add Windows hardware detection via PowerShell and WMIC fallback
- Preserve original source when saving edited config so ProtonDB (edited) label shows correctly
- Toggle vote off on re-click (delete row from Supabase)
- Add Pulse native compatibility tier badge
- Show report ID top-right in detail modal header for Supabase reports
- Add Pulse report count badge from proton-pulse-data
- Pushed code doe release ok
- feat: add scoring-info.json and form-schema.json as shared build artifacts
- feat: add knownProtonVersions to shared form-schema.json
- feat: add owner-delete for Supabase reports via x-client-id RLS policy
- feat: add 'web' as valid source for website report submissions
- feat: capture and store isNonSteam flag on config apply
- fix: hardware capture not syncing to site
- refactor: use distro prefix patterns for validOs instead of exact versions
- i18n: add translations for upload preview UI strings across all locales
- ci: upgrade to Node.js 24 for GitHub Actions runners
- feat: polish report detail and install progress UX
- autogen changelog
- update makefile
- update tag
- test: tighten coverage gates and local dev flows
- handle local service reloads
- fix: handle decky dir root folders
- fix: avoid timestamp for metrics when there are no changes
- fix: ensure decky loader is installed, handle bazzite install
- feat: add other distro autobuilds
- ci: add reusable distro builds and coverage reporting
- test coverage
-
Add coverage badges and refine custom toggle workflow
-
Improve config editing, backups, and contributor docs
-
translation updates
-
Create CODE_OF_CONDUCT.md
-
Align makefile help
-
fix: Fix Wukong report fallback, complete translations, and preserve modal screenshots
-
simplify makefile
-
Update README.md
-
Add tool disclaimer to readme
-
fix: screenshot flow, compat tools reinstall, and nav regressions
-
fix: Fix Wukong report fallback, complete translations, and preserve modal screenshots
-
simplify makefile
-
Update README.md
-
Add tool disclaimer to readme
-
fix: screenshot flow, compat tools reinstall, and nav regressions
- Added a dedicated log viewer modal with compact actions and cleaner full-screen layout.
- Fixed the Proton Pulse exit flow so it no longer gets stuck in a blank-screen loop.
- Added user controls to disable Proton Pulse toast notifications and sounds.
- Improved settings and cache-area controller navigation so the footer is reachable without visual filler.
- Moved release versioning to a single
VERSIONsource of truth that syncs into build metadata. - Tightened plugin docs and wiki setup notes, including Supabase voting documentation and release workflow updates.
- Initial public pre-release.