A Steam Achievement Manager for Linux, Windows, and macOS. Browse, unlock, and lock Steam achievements for any game in your library. Edit numeric statistics.
Fork of jsnli/Samira — rebuilt with the Project Colony design language, ported to Svelte 5, fixed several upstream Rust bugs that prevented achievements from loading on games with > 32 achievements, and made cross-platform.
The easiest path. Install Colony, then find SAM - Colony Edition in the app grid and click Install. Updates happen in-app.
Grab the single-file executable for your platform from the latest release:
| Platform | Asset |
|---|---|
| Linux (x86_64) | sam-colony-edition-linux |
| Windows (x86_64) | sam-colony-edition-windows.exe |
| macOS (Apple Silicon) | sam-colony-edition-macos |
| macOS (Intel) | sam-colony-edition-macos-x86 |
No installer. Single self-contained executable per platform.
Linux — chmod +x sam-colony-edition-linux && ./sam-colony-edition-linux. The Steam runtime .so is embedded and unpacked to ~/.local/share/SAM-Colony-Edition/ on first launch.
Windows — Double-click the .exe. The Steam runtime DLL is embedded and unpacked to %LOCALAPPDATA%\SAM-Colony-Edition\ on first launch (visible there afterward).
macOS — chmod +x sam-colony-edition-macos. On first launch macOS Gatekeeper will block because the binary is not signed by an Apple Developer account — bypass with xattr -d com.apple.quarantine sam-colony-edition-macos or right-click → Open → "Open Anyway" in Finder.
Steam must be running, you must be signed in, and you must own the game whose achievements you want to manage.
Steam installed via Flatpak is not supported — SAM reads from the Steam install dir on disk and Flatpak's sandboxing breaks that. Use your distro's native Steam package or the official installer from steampowered.com.
- CallbackHandle leak —
client.register_callback(...)was discarded immediately, unregistering the callback before Steam could fireUserStatsReceived. Fix: bind the handle to a named local for the duration of the wait loop. Without this fix, achievements load empty for most games. break;after first ACHIEVEMENTS block — Steam splits >32 achievements across multiple bitfield blocks; the loop only read the first. Fix: iterate all blocks. Without this, big games (Elden Ring, Skyrim, etc.) lose half their achievement icons..unwrap()panic-on-failure — any transient Steam API hiccup crashed the load withcatch_unwindreturningVec::new()and the UI showing "0/0". Fix:.unwrap_or(false)/.unwrap_or_default()for graceful degradation.- Crash on zero-achievement games —
get_achievement_names()panics inside steamworks-rs when the game has no achievements. Fix: early-return onget_num_achievements() == 0. - Cross-platform paths —
steam_root()resolves Windows registry / macOS Application Support / Linux~/.steam/steaminstead of hardcoded Linux path.
- React → Svelte 5 — smaller bundle, less re-render churn, runes for cleaner reactivity.
- H&E parchment theme — replaces the dark Steam-style chrome with the Project Colony design language (parchment + burgundy + JetBrainsMono Nerd Font).
- CSS containment + lazy images — smooth scrolling on long achievement lists.
- Single-file portable per platform (no installer wizards, no archives).
- Steam runtime library embedded in the binary via
include_bytes!and extracted on first launch (seesrc-tauri/src/bootstrap.rs). Lets us match Colony's single-asset download convention. - GitHub Actions matrix builds + automatic VirusTotal scan + SHA256SUMS per platform.
git clone https://github.com/Project-Colony/SAM-Colony-Edition.git
cd SAM-Colony-Edition
npm install
npm run tauri buildRequires Rust 1.80+, Node 20+, and the Tauri prerequisites for your OS.
On Arch Linux a strip workaround is needed:
NO_STRIP=true npm run tauri build- jsnli/Samira — original implementation, the heavy lifting on VDF parsing and Steamworks integration.
- Valve — Steamworks SDK (redistributed per SDK License).
- Project Colony — design language and distribution ecosystem.
MIT, matching upstream. See LICENSE.