A Steam achievement manager with rarity insights and library statistics.
SteamLens is built for achievement collectors, completionists, and replayers — players who care about the journey, want to track their progress in detail, and occasionally need to clean up after Steam itself.
- Inspect at depth. Browse your library through the lens of rarity tiers, see how rare each unlock really is, and find the titles you're closest to completing.
- Recover stuck achievements. Sometimes you meet every requirement for an achievement and Steam still doesn't grant it — a known bug in many games. SteamLens lets you unlock those manually so your collection reflects what you actually accomplished.
- Reset and replay. Want to play a favourite game fresh, with the satisfaction of earning every achievement again? Lock them and start over — the perfect tool for an "I'll do another run, properly this time" mood.
SteamLens is not a cheat utility. It doesn't touch competitive leaderboards or server-validated multiplayer stats — those are owned by the game server, not by your local Steam client. The Unlock feature is a recovery and personal-completion tool, not a shortcut around earning a title.
- Unlock or re-lock any achievement with a dirty-state Apply flow and bulk operations — unlock all, lock all, invert selection.
- Typed
confirmedgate before changes hit Steam, so a partial edit never lands by reflex. - Local stats editor — view and modify the local copy of per-game stats (counters, progression trackers, in-game currencies) that the title exposes through its Steam schema. Bulk Max-all / Reset-all or per-stat controls; increment-only stats are detected and validated. Competitive leaderboards and server-validated multiplayer ranks are out of scope — SteamLens can't reach those.
- Five rarity tiers (Common, Uncommon, Rare, Mythical, Legendary) computed from Steam's live global unlock percentages, with a consistent color palette across every view.
- Interactive rarity breakdown on every library card — see at a glance how your unlocked achievements split across tiers, and hover any segment for exact counts.
- Profile-wide summary in the library header — aggregate progress totals, rarity-card breakdown, and a "closest to 100%" tile spotlighting titles you're a few unlocks away from completing.
- Read-only Game View without Steam running — open any previously-scanned game from disk cache and inspect its achievements, icons, and stats schema. Editing locks until Steam reconnects.
- Failed-scan recovery — when individual games fail during library scan, a one-click Retry in the status footer re-queues only what failed, not the whole library.
- Schema-versioned cache with
change_number-driven invalidation, so reopens are instant and stale data is detected the moment a game ships an update.
- Dark and Light themes — toggle from the app header; choice persists across restarts. Every widget (library cards, game view, modals, status bar, toasts) resolves colors through the active palette — no hardcoded constants leaking through.
- Update checker — on startup, SteamLens checks GitHub for a newer release and surfaces an info banner with a one-click Download link.
- Game cover art at three preset sizes, smooth animations and skeleton placeholders during hydration, search and filter across library and achievements — the basics, kept fast and out of your way.
A few things worth knowing before you start:
- Built for collectors, not cheaters. SteamLens is intended for completionists, replayers, and anyone who's hit the "all conditions met but Steam didn't grant the achievement" bug. It works on single-player titles in your own library — not as a shortcut around earning achievements you didn't play for.
- Not for VAC or server-side anti-cheat games. Multiplayer titles protected by VAC or server-side validation are out of scope. The server has the final say there, and your changes may simply be ignored.
- Steam Cloud can overwrite your changes. If the game was running or Cloud is syncing, the cloud copy can win. Quit the game first, give Cloud a moment to settle, then edit.
- Some games store progression in stats. Editing stats can affect quest progress, item unlocks, or save state. The consent checkbox before a stats edit is there for that reason.
- No warranty. SteamLens is provided as-is. The author and contributors aren't liable for lost progress, data corruption, or other consequences of running the tool.
- Not affiliated with Valve. SteamLens is an independent open-source project — no endorsement by Valve Corporation or Steam.
- Application data is stored in
~/.steamlens/on Linux, macOS, and Windows alike — same path across platforms by design. On Unix the cache and settings files are written with mode0600(owner read/write only). Delete the folder to start fresh.
Pre-built binaries are published with each release. Grab the right artifact for your OS from the latest release page.
Three formats are published — pick the one that fits your distro:
Debian / Ubuntu (.deb)
sudo apt install ./steamlens-app-*-linux-x64.debFedora / openSUSE (.rpm)
sudo dnf install ./steamlens-app-*-linux-x64.rpmPortable (.AppImage — works on any distro)
chmod +x steamlens-app-*-linux-x64.AppImage
./steamlens-app-*-linux-x64.AppImageAppImage requires no install. Optionally integrate with your desktop using AppImageLauncher.
If launch fails due to missing system libs:
# Ubuntu / Debian
sudo apt install libwayland-client0 libxkbcommon0 libgl1 libfontconfig1
# Fedora
sudo dnf install wayland libxkbcommon mesa-libGL fontconfig
# Arch
sudo pacman -S wayland libxkbcommon mesa fontconfig- Download
steamlens-app-*-macos-universal.dmg(works on both Apple Silicon and Intel). - Open the
.dmgand drag SteamLens into Applications. - The first launch is blocked by Gatekeeper because the app is not yet notarized. Workaround:
- Right-click SteamLens → Open → confirm in the dialog. macOS remembers the choice for future launches.
- Or run once from Terminal:
xattr -dr com.apple.quarantine /Applications/SteamLens.app
Two formats are published — pick whichever fits your workflow:
Installer (.msi — recommended)
- Download
steamlens-app-*-windows-x64.msiand double-click. - SmartScreen may warn that the publisher is unknown — click More info → Run anyway.
- Installer creates a Start Menu shortcut and registers the app in Add/Remove Programs.
Portable (.exe)
- Download
steamlens-app-*-windows-x64.exeand place it anywhere convenient (e.g.%LOCALAPPDATA%\Programs\SteamLens\). - SmartScreen may warn — click More info → Run anyway.
- Double-click to launch. No installer; no Start Menu shortcut.
git clone https://github.com/IceSqueez/steamlens.git
cd steamlens
cargo build --release
./target/release/steamlens-appSystem dependencies on Linux:
# Ubuntu / Debian
sudo apt install libwayland-dev libxkbcommon-dev libgl1-mesa-dev libx11-dev pkg-config
# Fedora
sudo dnf install wayland-devel libxkbcommon-devel mesa-libGL-devel libX11-devel pkg-config
# Arch
sudo pacman -S wayland libxkbcommon mesa libx11 pkg-configmacOS needs Xcode Command Line Tools; Homebrew is optional. Windows uses the MSVC toolchain — no extra system dependencies.
- Start SteamLens. Launch the binary; it splashes and connects to your running Steam client. Without Steam, the library still opens in read-only mode from disk cache.
- Browse your library. Filter by status or genre, change sort order, switch capsule sizes — or just scroll.
- Open a game. Click a card to enter the game view. Cached achievements and icons appear instantly; live data refreshes the moment Steam responds.
- Edit achievements. Click any achievement to toggle it. Changes are tracked locally until you Apply.
- Edit stats. Use the in-game statistics panel to max, reset, or set values directly. Increment-only stats reject decreases.
- Apply or discard. When there are dirty changes, a typed
confirmedgate guards the Apply button — type the word, click Apply, changes are written to Steam. Cancel drops the changes. - Go back. The back arrow returns you to the library; the game-view state is cached for next time.
Ctrl + F(⌘Fon macOS) — focus the search box (library or achievements, depending on current view).Esc— close the open modal, or clear the current search query if the search box is non-empty.Ctrl + S(all platforms, including macOS) — Apply staged changes when on Game View with pending edits and no stat errors. Equivalent to clicking Apply through the confirm gate.
Logs. All output is written to ~/.steamlens/steamlens.log (truncated on every restart). Attach this file to bug reports.
Verbose logs for crash reports. If you hit a hard-to-reproduce bug, re-run with trace-level logs:
STEAMLENS_LOG=trace ./steamlens-app # Linux / macOS$env:STEAMLENS_LOG = "trace"; .\steamlens-app.exe # Windows PowerShellThe log will now contain per-FFI-step markers (vtable calls, Steam-callback poll ticks, cache writes, etc.) — useful when filing a GitHub issue. Default level is INFO; valid values: error, warn, info, debug, trace.
Reset application data. Delete ~/.steamlens/ (Linux/macOS) or %USERPROFILE%\.steamlens\ (Windows) to start fresh. Cached games, settings, and login profile are stored there.
SteamLens is a single-binary desktop app built with Rust 2024 edition and the iced GUI framework.
The codebase is split into three crates:
steamlens-core— Low-level Steam interop (FFI tosteamclient.so/.dll, callback dispatch, schema parsing). No external types leak into its public API.steamlens-vdf— Binary KeyValue parser for Steam's cache format (achievements, stats schema, game metadata). Standalone — can be reused elsewhere.steamlens-app— iced GUI, app state machine, async tasks and subscriptions, theming, and animations.
The runtime uses tokio for async work under the hood, driven by iced's task system. Steam interop runs in a worker subprocess (--worker $APP_ID) so the main process never has to outlive a Steam pipe handshake.
Found a bug? Have an idea for a feature? Open an issue or PR at github.com/IceSqueez/steamlens.
Commit format. We use Conventional Commits. Format your commit message as type(scope): short description. Example:
feat(ui): add keyboard shortcut for Apply
fix(core): handle missing stat values in schema
docs(readme): update README with troubleshooting section
Commits are processed by git-cliff to generate the CHANGELOG automatically.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
