Skip to content

Switch-Bros/SteamLibraryManager

Repository files navigation

🎮 Steam Library Manager

Python 3.10+ Platform License Tests Steam API SteamGridDB i18n Downloads

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.

Auf Deutsch lesen

Steam Library Manager - Main Window

✨ Features

🧠 Smart Collections - A Full Rule Engine That Steam Will Never 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.

Smart Collections Editor

💛 Support This Project

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.

Support us on PayPal       Support us on Ko-fi

Thank you to everyone who has already contributed - you're amazing! 🙏

🏷️ Auto-Categorization - 17 Rule Types, Infinite Possibilities

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.

Auto-Categorization Dialog

Auto-Categorization - Before/After

✏️ Metadata Editor - Your Changes Survive Steam Updates

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 overwrites appinfo.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.

Metadata Editor

Bulk Edit - Multiple Games Selected

🖼️ Artwork Manager - SteamGridDB at Your Fingertips

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

Artwork Browser - SteamGridDB Covers

Artwork Badges - NSFW, Animated, Humor Indicators

📊 Data Enrichment - Know Everything About Your Games

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.

Batch Enrichment - Progress Dialog

Game Detail Panel - All Enriched Data

🔒 Secure by Design - No Copy-Paste, No Plain Text

  • 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.

Steam QR Code Login

🌍 Multilingual - Your Language, Your Way

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)

Language Settings - UI and Tag Language

🐧 Linux Native - Built Here, For Here

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

🎮 External Games - One Library to Rule Them All

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.

External Games Manager - Scan and Import

🔄 Built-in Auto-Updates - Always Up to Date, Zero Effort

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.

Built-in AppImage Auto-Update with Release Notes

📸 More Screenshots

Click to expand - Additional Views
Screenshot Description
Context Menu Right-click context menu - quick access to all actions
Export Export dialog - CSV, JSON, VDF, Database Backup
About About dialog with version & system info

📦 Download & Install

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.

Steam Library Manager running on Steam Deck

🔧 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.py

Requires Python 3.10+ and a running Steam client (not Big Picture).

🔧 API & Authentication Requirements

This project uses the following services:

1. Steam Authentication (OAuth2)

- **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)

2. SteamGridDB

- **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).

3. HowLongToBeat (HLTB)

- **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/).

4. ProtonDB

- **Included for:** Checking Linux/Proton compatibility ratings for games. - **No API key required.** Read-only access, cached locally with 7-day TTL.

🗺️ Roadmap

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

🌍 Translations

Steam Library Manager ships with English and German. Want to see it in your language?

Contributing a translation is easy - no coding required!

  1. Download the translation template or copy files from steam_library_manager/resources/i18n/en/
  2. Translate the values (never change the keys!)
  3. Keep placeholders like {count} and {name} untouched
  4. Add your language to steam_library_manager/resources/i18n/languages.json:
    "fr": "🇫🇷  Français"
  5. Submit a Pull Request

The language name must always be in its own native script - "Français", not "French".

🛡️ Privacy & Security

  • 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.

🤝 Contributing

🙏 Acknowledgments

⚖️ Legal Notice

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.

📜 License

MIT License - Copyright © 2026 Switch Bros.

Made with ❤️ on Linux by Switch Bros

About

SteamLibraryManager is the Linux alternative for Depressurizer, just better!

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors