Programs

SteamAchieve

A Windows app that puts your Steam achievement progress on one screen. There is no server: the API key you type never leaves the PC. It is the only thing I have built that I actually handed to other people, and what they said came back as the next version.

2026AI-assistedFeatured

Screenshots

2

Why I built it

Steam scatters achievements across games. To see how far along I was overall, or which game was one push away from a perfect run, I had to open games one at a time.

So I built a tool that sweeps the whole library at once and lays it out as four screens: Home, Library, Recommendations and Friends.

No server

There is no server. This PC talks to Steam's public Web API directly.

So the API key never passes through anyone else's machine. It is stored under %APPDATA%\SteamAchieve\, encrypted with Windows DPAPI, and only this Windows account can decrypt it. Copying the file to another PC gets you nothing. Getting that key used to mean copying it from Steam's key page by hand; now the app can open Steam's sign-in page inside its own window and fill the key in for you. Whatever password you type there goes only to Steam; the app never reads or stores it.

The only place the app reaches automatically outside Steam is an update check. It used to be opt-in and off by default, but people kept running old versions without knowing a check existed, so it is now always on and cannot be turned off. It sends one unauthenticated GET to the releases page on every launch, and once a day while the app stays open. No key, no SteamID.

"0%" and "I don't know" are different

If your Steam "game details" are private, the achievement list still loads but whether you unlocked them comes back 403.

Drawing that as 0% reads as "unlocked none of them," which is false. So those entries are counted separately as "unverified." Friend comparisons split "unverified" from "private" for the same reason. Merge them and something the other person has locked forever reads as something that just has not arrived yet, so you sit there hitting refresh.

While you play

Steam's Web API reports a freshly unlocked achievement 1 to 4 minutes late. Now the app also reads a local cache file the Steam client itself keeps updated, so unlocks show up within seconds; that file is only ever read, never written.

So you no longer have to keep this app in front while you play: there is now a small companion window (mini window). It keeps showing achievements for whatever game you are playing, and follows you when you quit or switch games.

What handing it to people taught me

While preparing the public release I was told that screenshots I had already published still carried my Steam handle and a friend's handle and game count. A friend's information does not belong in my release without their say-so.

So the masking moved into one place, and a machine now blocks the release: it checks commit identity, the public-screenshot marker, and even the unpacked archive. Any one of those fails and the release stops. Rules a person has to remember are rules that eventually get skipped.

Most of the feedback after the first release was not "this feature is missing." It was "so did I win?" The per-game results were there; the conclusion was not. Now the comparison heading says it in one line: "You're ahead (+12)". Someone else said their mouse's back button did nothing, so button 4 and Alt+← now go back a step.

Things worth saying plainly

There is no code-signing certificate, so SmartScreen warns. Buying one for a free personal tool seemed excessive, so every release ships a SHA256SUMS.txt instead, which is enough to check that the file you got is the file I built.

It is an unofficial tool with no connection to Valve, and it uses only Steam's public Web API.

Make-up

Python and tkinter, packed into a single exe with PyInstaller. About 39,700 lines across 114 source files, plus about 34,300 lines across 120 test files.

The UI ships in Korean and English. The repository started 2026-09-03, the first public release went out 09-05, and it is at v0.5.23 now.