A desktop Steam achievement manager built with Go, Svelte 5, and Wails. Browse your game library, view achievement rarity, and unlock or lock achievements with a clean Steam-themed UI.
Disclaimer: SteamForge modifies achievement data through the Steamworks SDK. Use at your own risk — modifying achievements may violate Steam's terms of service. This project is provided for educational and personal use.
| Platform | Link |
|---|---|
| Windows | steamforge.exe |
| Linux | steamforge |
Browse your Steam library in grid view with achievement progress
Fullscreen achievement view
/ to focus search, Escape to close| Layer | Technology |
|---|---|
| Backend | Go 1.23 |
| Frontend | Svelte 5, TypeScript 5.7 |
| Desktop | Wails v2 |
| Styling | Tailwind CSS 4 |
| Build | Vite 6 |
WebKit2GTK is required:
# Ubuntu/Debian
sudo apt install libwebkit2gtk-4.1-dev
wails dev -tags webkit2_41
This starts a Vite dev server with hot reload for the frontend and live reloads the Go backend.
# Linux
wails build -tags webkit2_41 -ldflags="-s -w"
# Windows
GOOS=windows wails build -ldflags="-s -w"
The compiled binary is output to build/bin/.
steamforge/
├── app.go # Main Go API surface
├── main.go # Wails entry point
├── internal/
│ ├── models/ # Achievement & Game data models
│ ├── services/ # GameService, AchievementService, WebAPI
│ ├── steam/ # Steamworks SDK wrapper, local stats parsing
│ ├── settings/ # Persistent settings & achievement cache
│ └── cache/ # Image caching
├── frontend/
│ ├── src/lib/
│ │ ├── pages/ # GamePicker, GameManager
│ │ ├── components/ # GameCard, AchievementRow, AchievementToolbar, etc.
│ │ ├── stores/ # Svelte stores (games, achievements, settings, app)
│ │ └── utils/ # Steam image URLs, rarity tiers, date formatting
│ └── wailsjs/ # Auto-generated Go bindings
├── wails.json # Wails configuration
└── Makefile # Build scripts
SteamForge connects to Steam through the Steamworks SDK to read and modify achievement state. When your Steam profile is public, it can also fetch achievement data from the Steam Community without requiring a game connection. Global unlock percentages are fetched from the Steam Web API with rate limiting and retry logic.
Achievement changes are written back through the Steamworks SDK, which requires the target game to be connected via Steam. The app handles connection management automatically when needed.
If you find SteamForge useful, consider buying me a coffee.
This project is licensed under the MIT License.