The Depressurizer alternative for Linux. Organize your Steam library, auto-categorize games, edit metadata, and take control of your collection - with features Steam doesn't have.
Steam has dynamic collections - but they've been AND-only since launch, with a handful of basic filters. Want games that are either "Platinum on ProtonDB" or "Native Linux"? Impossible in Steam. You can only narrow down, never combine alternatives.
Our Smart Collections are a full-blown rule engine with capabilities Steam will never match:
- AND / OR / NOT operators with nested rule groups - build complex logic like (Genre = RPG AND ProtonDB = Platinum) OR (Genre = Strategy AND Deck = Verified). Groups let you combine conditions however you want - no limits, no workarounds
- 21 filter fields across every dimension of your library: playtime, review scores, Steam Deck status, ProtonDB ratings, achievement completion, HowLongToBeat times, tags, genres, release year, developer, publisher, platforms, languages, app type, and more
- 12 operators including range queries - filter games between 10-50 hours playtime, or review scores above 90%, or tags matching a regex pattern
- Language-independent tag matching - switch your Steam tags from English to German (or any language), and your rules keep working. We match by Steam's internal Tag IDs, not by localized names
- 12 ready-made templates to get started: "Unplayed gems", "100h+ club", "Deck verified", "Quick play (<5h)", "Almost done (75%+ achievements)", and more
- Live preview - see matching games update in real-time as you build your rules
- Import & Export as JSON - share your setups with friends or back them up
The clever part: In the Steam client, our Smart Collections appear as regular static collections - Steam doesn't even know the difference. But in SLM, they're fully dynamic and infinitely more powerful than anything Steam offers.
Example: "Show me all RPGs rated 'Platinum' on ProtonDB with more than 20 hours playtime that I haven't 100%'d yet - OR any Strategy game verified for Steam Deck - but exclude anything tagged 'Visual Novel'." One collection. Two rule groups. Automatic. Always up to date. Impossible in Steam.
If SLM saves you time organizing your library, consider supporting its development. Every contribution - no matter how small - helps keep this project alive and growing.
Thank you to everyone who has already contributed - you're amazing! 🙏
Automatically organize your entire library into meaningful collections with 17 different AutoCat rule types:
Tags | Genres | Publishers | Developers | Franchises | Flags | User Score | HowLongToBeat | Year | VR Support | Language | Curator | Platform | Hours Played | Deck Status | Achievements | PEGI Rating
Each rule type has its own configuration - set thresholds, define ignore lists, choose prefix/suffix patterns, and combine multiple rules into powerful categorization profiles. Smart ignore lists filter out generic tags like "Singleplayer" so your categories stay meaningful.
Got 500+ games? Hit "Auto-Categorize" and watch them sort themselves into clean, logical collections in seconds.
Edit game names, sort titles, developers, publishers, and release dates - all stored locally. What makes this special:
- Overlay System: Your modifications are stored separately from Steam's data in
custom_metadata.json. When Steam overwritesappinfo.vdf(which it does on login when the server change-number bumps), your edits are automatically re-applied on the next SLM start - and live, while SLM is running, via a file watcher. Like Git rebasing for metadata: Steam provides "upstream", your edits are "patches". - Bulk Edit: Select hundreds of games, change a field, apply. Done.
- Custom Sort Titles: Make "The Witcher 3" sort under "W", not "T". Edits land in the path Steam actually reads (
appinfo.common), with internally-consistent SHA-1 hashes so Steam accepts the file instead of wiping the cache.
No other Steam library tool does this. Depressurizer loses your changes when Steam updates. We don't.
Browse and download covers, heroes, logos, and icons from SteamGridDB - the largest community-driven game artwork database.
- Visual browser with thumbnail previews - see what you're picking before you apply it
- Filter by type: static, animated (GIF/APNG/WebM), NSFW, humor, epilepsy warning
- Badge system with animated slide-down indicators - colored stripes show content tags at a glance
- One click to apply - artwork is downloaded and set as your game's cover instantly
Batch-enrich your entire library with data from multiple sources - all cached locally in SQLite for instant access:
| Source | Data | API Key Required? |
|---|---|---|
| HowLongToBeat | Main story, completionist, and all playstyles times | No |
| ProtonDB | Linux compatibility tier (Platinum/Gold/Silver/Bronze/Borked) | No |
| Steam Achievements | Completion percentage per game | No (with OAuth2) |
| Steam Tags | Community-voted tags imported directly from Steam | No (with OAuth2) |
| Steam Store | Descriptions, DLC info, age ratings | No |
Hit "Enrich All" and grab a coffee. When you come back, every game in your library has full metadata.
- QR code login or password login via Steam's official OAuth2 (
IAuthenticationService) - Tokens stored encrypted (AES-GCM) with machine-derived keys, or in your system keyring
- Automatic token refresh - no re-login on every app start
- The Steam Web API Key is optional thanks to OAuth2 - but adding it is highly recommended for full functionality. You can configure it directly in the app under Settings.
No sketchy browser session tokens. No API keys in plain text config files. Just scan, login, done.
Full English 🇬🇧 and German 🇩🇪 interface with complete i18n - zero hardcoded strings in the entire codebase.
- Separate settings for UI language and tag language - use English UI with German Steam categories, or any combination
- Localized dates - "07. Dez 2024" in German, "07 Dec 2024" in English
- Community translations welcome - download the template files, translate, and submit a PR (details below)
Developed with PyQt6 for seamless desktop integration. This is not a Windows app with a Linux port bolted on - it's built on Linux, for Linux, from day one.
- Steam Deck compatible - works in Desktop Mode
- Wayland & X11 supported
- AppImage, AUR, .deb, .rpm & tar.gz packaging available
- Windows support is planned - but Linux always comes first
Got games scattered across Epic, GOG, Amazon, Lutris, Bottles, itch.io, Flatpak, and emulators? SLM finds them all - and adds them to Steam as Non-Steam shortcuts in one go. Imported shortcuts are also pulled into SLM's main library, so you can drag them into Smart Collections like any Steam game.
Launcher parsers (9): Heroic (Epic/GOG/Amazon/Sideload), Lutris, Bottles, itch.io, Flatpak, plus existing entries from shortcuts.vdf. Heroic Sideload picks up manually added apps in Heroic (e.g. WarCraft 2 remastered, Adobe Photoshop) and launches them via Heroic so your existing Wine prefix and save states are preserved.
Smart Emulator Detection (9 parsers, no hardcoded ROM paths) - SLM reads game directories straight from each emulator's own config file, so it always finds your ROMs wherever you keep them:
| Emulator | System(s) | Reads from |
|---|---|---|
| Eden, Citron, Ryujinx | Nintendo Switch | qt-config / Config.json |
| Cemu | Nintendo Wii U | settings.xml |
| Dolphin | GameCube / Wii | Dolphin.ini ISOPaths |
| Azahar | Nintendo 3DS | qt-config |
| RetroArch | 21 systems | playlist .lpl files |
| PPSSPP | PlayStation Portable | ppsspp.ini RecentISOs |
| melonDS, DOSBox | NDS / DOS | (no library config - user-added dirs) |
EmuDeck is a fallback hint provider for emulators that don't have their own library config. AppImages are auto-discovered in ~/Applications, ~/AppImages and other standard Linux user paths. No more hardcoded /mnt/volume/Emulation/roms style paths - everything comes from the emulator itself or your settings.
Settings tab "Emulators" - per emulator: status badge (Flatpak / System / AppImage / Config-only), custom game directories, executable override, and a per-system default-emulator picker for when multiple emulators support the same system (e.g. choose between Eden/Ryujinx for Switch).
Bidirectional shortcut sync - non-Steam shortcuts from shortcuts.vdf show up in SLM's main library with their tags as categories. Drag them between collections in SLM and the change is written back to both shortcuts.vdf and Steam's cloud-storage, so the collection populates in Steam's sidebar after the next restart.
Duplicate protection - games already in Steam are detected and skipped. Nintendo title updates (e.g. Game [v0].nsp + Game [v327680].nsp) collapse into a single Steam shortcut so you don't end up with broken update-only entries.
Platform collections - imported games are automatically sorted into Steam collections by platform. In SLM's sidebar, each collection gets a visual emoji indicator for instant recognition:
| Collection | Indicator |
|---|---|
| Epic Games 🟦 | Blue (Epic brand color) |
| GOG Galaxy 🟣 | Purple (GOG brand color) |
| Amazon Games 🟠 | Orange (Amazon brand color) |
| Lutris 🎮 | Controller |
| Bottles 🍾 | Bottle |
| itch.io 🎲 | Dice |
| Flatpak 📦 | Package |
| Emulation (Nintendo Switch) 🔴 | Red |
| Emulation (other systems) | per-system colors |
Manual SteamGridDB search - the cover picker now has a free-text search field. Essential for non-Steam shortcuts whose hash-based AppIDs are unknown to SteamGridDB (the search runs automatically when the picker opens for a shortcut).
External Games dialog QoL - resizable columns, deselect-all / select-all toggle so you don't have to uncheck 200 games one by one when you only want 2.
Binary VDF parser - reads and writes Steam's shortcuts.vdf format with byte-for-byte accuracy. Batch import - scan all platforms at once, pick what you want, add them all with progress tracking.
Steam's own "Add a Non-Steam Game" dialog can select multiple apps - but it only sees what's in your PATH, not your actual game libraries. SLM scans Heroic, Lutris, Bottles, every installed emulator and your existing shortcuts directly, knows exactly what's installed, and organizes everything into clean collections automatically.
AppImage users get seamless in-app updates - no manual downloads, no terminal commands. SLM checks GitHub Releases automatically (configurable: daily, weekly, monthly, or never), shows full release notes with changelog, downloads in the background with progress tracking, and restarts into the new version with one click. If anything goes wrong, the previous version is automatically restored.
- Atomic replace with rollback - update can't leave you with a broken install
- "Skip Version" button - dismiss updates you don't want without being nagged
- Configurable - set your preferred check interval in Settings, or check manually anytime
AUR and Flatpak users update through their package manager as usual.
Click to expand - Additional Views
| Screenshot | Description |
|---|---|
![]() |
Right-click context menu - quick access to all actions |
![]() |
Export dialog - CSV, JSON, VDF, Database Backup |
![]() |
About dialog with version & system info |
| Format | Download | Notes |
|---|---|---|
| 🐧 AppImage | Download latest | Works on any distro - download, chmod +x, run |
| 📦 Flatpak | Planned - new Flathub PR pending | Sandboxed, auto-updates |
| 🏗️ AUR | yay -S steam-library-manager |
Arch / Manjaro / CachyOS / EndeavourOS |
| 🎩 .rpm | Download latest | Fedora / openSUSE |
| 🍥 .deb | Download latest | Debian / Ubuntu / Linux Mint |
| 📁 tar.gz | Download latest | Portable with install script |
Runs great on Steam Deck - tested on both LCD and OLED models.
The interface automatically adapts to smaller displays.
🔧 Build from source (for developers)
# Clone
git clone https://github.com/Switch-Bros/SteamLibraryManager.git
cd SteamLibraryManager
# Virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Dependencies
pip install -r requirements.txt
# Run
python steam_library_manager/main.pyRequires Python 3.10+ and a running Steam client (not Big Picture).
This project uses the following services:
- **Purpose:** Log in with your Steam account to access your library and display your profile name. - **How it works:** - Uses Steam's official **OAuth2** via `IAuthenticationService` (QR code or password login). - Tokens are stored **encrypted** (AES-GCM) or in your system keyring. - **Steam Web API Key** is **optional** thanks to OAuth2 - but **highly recommended** for full functionality (metadata enrichment, achievement sync, etc.). - You can add your API key directly in the app under **Settings -> Steam Web API Key**. - Get your key here: [Steam Web API Key](https://steamcommunity.com/dev/apikey) - **Required for:** Customizing game covers, heroes, logos, and icons. - **How to get the API key:** - The app **automatically prompts** for the SteamGridDB API key when you click on a game cover for the first time. - A window will open where you can: 1. **Get your API key** from [SteamGridDB](https://www.steamgriddb.com/api). 2. **Paste the key** into the app's input field. 3. Click **OK** - the key is saved locally, and covers are ready to use! - **Note:** Users must comply with [SteamGridDB's Terms of Service](https://www.steamgriddb.com/terms). - **Included for:** Displaying game completion times and auto-categorization by playtime ranges. - **No API key required.** Data is fetched automatically and cached locally. - **Note:** HLTB does not officially provide a public API. Integration respects their [terms](https://howlongtobeat.com/). - **Included for:** Checking Linux/Proton compatibility ratings for games. - **No API key required.** Read-only access, cached locally with 7-day TTL.| Milestone | Status |
|---|---|
| Core engine, database, cloud sync, auth | ✅ Complete |
| Architecture refactoring, menu redesign | ✅ Complete |
| Depressurizer feature parity (17 AutoCat types) | ✅ Complete |
| Smart Collections, Steam Deck Optimizer, HLTB | ✅ Complete |
| External Games launcher parsers (8 sources), ProtonDB, Curators | ✅ Complete |
| UI polish, keyboard shortcuts, documentation | ✅ Complete |
| v1.1.1 - First public release | ✅ Released |
| v1.2.0 - Module rename, AUR package | ✅ Released |
| Steam Deck responsive UI | ✅ Complete |
| Library Auto-Sync | ✅ Complete |
| Multi-format packaging (.deb, .rpm, tar.gz) | ✅ Complete |
| v1.2.4 - Steam Deck + packaging release | ✅ Released |
| v1.2.5 - AppImage update fix | ✅ Released |
| v1.2.6 - Dock integration fix | ✅ Released |
| v1.2.7 - Security hardening | ✅ Released |
| v1.3.5 - First-run crash fix | ✅ Released |
| v1.3.6 - Refactoring regression fix | ✅ Released |
| v1.3.9 - i18n cleanup, security, DRY | ✅ Released |
| v1.4.0 - Statistics Dashboard (7 tabs) | ✅ Released |
| v1.4.2 - Statistics i18n + screenshots | ✅ Released |
| v1.4.3 - AppImage libxcb-cursor0 fix (Mint 21.3 / Ubuntu 22.04) | ✅ Released |
| Smart Emulator Detection (9 parsers, no hardcoded paths) | ✅ Complete |
| Settings tab "Emulators" (custom dirs, default-emulator picker) | ✅ Complete |
| Bidirectional shortcut sync (shortcuts.vdf <-> SLM <-> cloud-storage) | ✅ Complete |
| Manual SteamGridDB search in cover picker | ✅ Complete |
| v1.4.4 - Complete External Games Overhaul | ✅ Released |
| Critical fix: metadata edits now actually visible to Steam | ✅ Complete |
Auto-Reapply on startup + live file watcher for appinfo.vdf |
✅ Complete |
| v1.4.5 - Critical appinfo.vdf metadata fix | ✅ Released |
Heroic Sideload parser (manually added apps) + cover fallback via cover_url_hint |
✅ Complete |
| v1.5.0 - Heroic Sideload Parser | ✅ Released |
| Flatpak (Flathub submission) | 📋 PR pending |
| Windows support | 📋 Planned |
Steam Library Manager ships with English and German. Want to see it in your language?
Contributing a translation is easy - no coding required!
- Download the translation template or copy files from
steam_library_manager/resources/i18n/en/ - Translate the values (never change the keys!)
- Keep placeholders like
{count}and{name}untouched - Add your language to
steam_library_manager/resources/i18n/languages.json:"fr": "🇫🇷 Français"
- Submit a Pull Request
The language name must always be in its own native script - "Français", not "French".
- No telemetry. Steam Library Manager does not phone home.
- No data collection. Your library, your data, your machine.
- Token encryption. Steam credentials stored using AES-GCM or system keyring.
- API keys stored locally. Never transmitted to third parties.
- Automatic backups. Before any write to Steam files, a backup is created.
- 🐛 Found a bug? -> Open an Issue
- 💡 Have an idea? -> Start a Discussion
- 🌍 Speak another language? -> Help translate!
- 🔧 Want to code? -> Fork the repo, check the issues, and submit a PR
- SteamGridDB - Game artwork
- HowLongToBeat - Playtime data
- ProtonDB - Linux compatibility ratings
- SteamKit2 / ValvePython/steam - Steam protocol research
- steamapi.xpaw.me - Steam Web API documentation
This software is provided "AS IS", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement.
In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.
- You must comply with the terms of service of each API provider (Steam, SteamGridDB, HLTB, ProtonDB).
- The developer (Switch Bros) is not responsible for misuse of API keys or violations of third-party terms.
- API keys are stored locally and never transmitted to third parties.
- Steam Library Manager is not affiliated with, endorsed by, or associated with Valve Corporation or any other third-party service.
MIT License - Copyright © 2026 Switch Bros.
Made with ❤️ on Linux by Switch Bros

















