Skip to content

feat: Steam account integration (link account, sync achievements & library)#2225

Open
LED-N wants to merge 4 commits into
hydralauncher:mainfrom
LED-N:main
Open

feat: Steam account integration (link account, sync achievements & library)#2225
LED-N wants to merge 4 commits into
hydralauncher:mainfrom
LED-N:main

Conversation

@LED-N
Copy link
Copy Markdown

@LED-N LED-N commented May 9, 2026

What this PR does

Adds full Steam account integration to Hydra, allowing users to:

  • Link their Steam account via Steam OpenID 2.0 (ownership verified, not just SteamID lookup)
  • Import achievements for individual Steam games from the game's achievement page
  • Batch sync all achievements across the entire Hydra library, with smart rate-limit retry (no fixed delay — only pauses on HTTP 429)
  • Sync Steam library — imports all owned Steam games with correct playtime (takes the highest value between Steam and Hydra) and icons from the Steam CDN
  • Library source filter — filter your library by All / Steam imported / Hydra only
  • Non-blocking UX — progress modals are closeable while sync continues in background, with a cancel button
  • Steam display name + avatar shown in settings instead of raw SteamID64
  • Auto-sync on startup — optional checkbox in settings
  • EN + FR translations included

Technical notes

  • Rate limiting: requests fire as fast as possible; on HTTP 429, exponential backoff (5s → 10s → 15s, up to 3 retries) instead of a fixed per-request delay.
  • Playtime sync uses the absolute /playtime endpoint so the profile page reflects the correct value.
  • A Steam Web API key is required per user (free at steamcommunity.com/dev/apikey) — no shared key is possible due to Valve ToS and per-key rate limits.

Notes on Steam authentication

Steam login uses the OpenID 2.0 flow with a temporary local HTTP server
as the callback endpoint (openid.realm = http://127.0.0.1:<random_port>).
This is the standard approach for desktop applications — Valve explicitly
supports 127.0.0.1 as a valid realm. As a result, Steam's login page
displays "Sign in through 127.0.0.1" to the user, which is expected
behavior for native apps.

If the team would prefer to show a branded domain (e.g. hydralauncher.gg),
this would require routing the OpenID callback through a backend endpoint
and returning the SteamID to the app via a custom protocol link
(hydra://steam-auth?steamid=...). Happy to explore this if preferred,
but kept the self-contained local server approach for simplicity.

Checklist (from PR template)

  • I have read the Hydra documentation
  • I have checked that there are no duplicate pull requests related to this request
  • I have considered, and confirm that this submission is valuable to others
  • I accept that this submission may not be used and the pull request may be closed at the discretion of the maintainers

Screenshots

Settings — Steam integration (Not yet linked)

Settings Steam Not yet linked

Settings — Steam integration (Linking)

Settings Steam Linking

Settings — Steam integration (Linked)

Settings Steam Linked

Library source filter

Library filter

Sync progress modal

Sync progress

Sync from Steam button (achievements)

Sync from Steam

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 9, 2026

@DevOxofdev
Copy link
Copy Markdown
Contributor

Ca a l air vraiment pas mal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants