Releases: Nastas95/PrefixHQ
Release list
v3.0.2
v3.0.1
Fix for the "Update Avaiable" bug
This release fixes a small problem with the "Update Avaiable" Bug #7
OLD CHANGELOG
Major Update
A quick Note from Me:
I Got a lot of attention thanks to the Reddit Post, and received a lot of love from the OpenSource and Linux Community: THANK YOU! I really appreciate all the comments, requests and advices to fix and improve PrefixHQ. This is what pushes me to keep working on my projects.
But...
I also received a lot of hate from some (few) people because of AI used in this project. I Get it: AI has been trained on people's work, STOLEN work by a fact. AI has damaged me personally, so I get why people gets mad.
I know AI is a sensitive topic for some. While I respect differing opinions, it remains a key tool that allowed me to bring this project to life. PrefixHQ was built to solve a personal need and is shared for free with anyone who might face the same hurdles. If it helps your workflow, then it’s a win.
And whit that said: Here is the changelog:
What's Changed
Codebase Structure
- Simplified the architecture by removing static utility classes (
DataManager,NonSteamManager,SystemUtils). Their methods are now standalone functions at module level - Renamed generic
datavariables toprefix_datain network callbacks and UI components to prevent variable shadowing and improve clarity
File System & Standards
- Adopted the XDG Base Directory Specification:
- Configuration files now use
$XDG_CONFIG_HOME(defaults to~/.config/PrefixHQ) - The image cache has been moved out of the config folder and now respects
$XDG_CACHE_HOME(defaults to~/.cache/PrefixHQ)
- Configuration files now use
Network & Image Fetching
- Improved fallback logic for missing cover art (This also fixes #6):
- Search queries are sanitized and properly URL-encoded with
urllib.parse.quote_plus - The network callback no longer accepts the first search result blindly. It now iterates through returned items and compares sanitized strings to ensure an exact match with the target game
- Search queries are sanitized and properly URL-encoded with
- Added a new request state (
REQ_TYPE_APPDETAILS). When a fallback match is found, the app queries the Steam AppDetails API to fetch the officialheader_imageor `capsule_image - Optimized loading for non-Steam games:
load_imagenow checks if an AppID is outside the standard Steam range (0 - 2,000,000,000) or contains non-numeric characters. These cases now skip the CDN request and go directly to the fallback search
v2.5
Themes, Quick Actions & Integrated Update System
New Features
Theme engine — PrefixHQ now ships with 5 built-in themes: Steam Dark, Catppuccin Mocha, Dracula, Nord, and Gruvbox. Themes apply live across the entire UI without restarting, and your choice is saved automatically.
Copy AppID — right-click any game card or list entry to copy its AppID to the clipboard. Useful for modding, SteamDB lookups, Proton logs, etc. (#3)
Update checker — the app silently checks for new releases 3 seconds after startup. There's also a manual "Check Updates" button in the footer. If an update is available, you'll get a changelog preview and a link to the download page.
Fixes & improvements
- Image loading now has a retry limit (max 5 attempts) to avoid infinite network loops
- Right-click actions are now consistent between grid and list view
- Better error handling for offline scenarios and update checks
- User prompt added when closing the app during an active scan or download
- Minor UI rendering improvements during theme switches and view toggles
Technical changes
- QSS template engine for runtime theme switching (
THEME_TEMPLATE.format(**palette)) - Image fetching and update checks migrated to
QNetworkAccessManager(non-blocking) - Environment variable sanitization improved to avoid Qt/Python path conflicts when opening external URLs
- Context menu logic centralized in
GameCardMixin
v2.2
v2.1
🚀 PrefixHQ v2.1 Changelog
Non-Steam Game Support & List View Integration
This release expands PrefixHQ's capabilities beyond official Steam titles, adding native support for Non-Steam shortcuts and introducing a flexible List View for users who prefer a compact interface over the visual grid.
(See #3 )
✨ New Features
🎮 Non-Steam Game Recognition
PrefixHQ now intelligently parses your local Steam configuration to identify non-Steam shortcuts (games added via "Add a Non-Steam Game").
shortcuts.vdfParsing – Reads the binary VDF file to extract user-added application names.- CRC32 AppID Calculation – Implements Valve's specific hashing algorithm (
CRC32 | 0x80000000) to correctly match Proton prefixes (compatdatafolders) with Non-Steam executables. - No More "Unknown" – Prefixes for manually added games now display their actual names instead of generic AppIDs.
📝 Toggleable List View
For users with massive libraries, a grid isn't always efficient.
- Grid/List Toggle – Switch between the Cover Art Grid and a new compact List View.
- Compact Rows – The list view maintains functionality (Context Menus, Status, Buttons) but takes up significantly less screen space.
- Persistent Preference – The app remembers your preferred view mode between restarts.
🔧 Technical Improvements
| Area | Changes |
|---|---|
| VDF Parsing | Added a binary VDF parser to read userdata/config/shortcuts.vdf using struct and zlib. |
| Code Refactoring | Introduced GameCardMixin to share context menu logic and button events between Grid Cards and List Items, reducing code duplication. |
| Environment | Further refinement of environment variable stripping (QT_PLUGIN_PATH, PYTHONPATH) to prevent conflicts when launching external apps. |
🐛 Fixed Issues
- ✅ Non-Steam Identification – Fixed issue where Non-Steam prefixes were ignored or labeled as simple numbers (See #3 )
- ✅ Context Menu Consistency – Right-click actions (SteamGridDB, Cover management) are now identical in both view modes.
- ✅ Layout Glitches – Fixed spacing issues when resizing the window in Flow Layout mode.
💡 Usage Tips
- Toggle View: Click the icon next to the "Open Config" button to switch between Grid and List modes (see #3 ).
- Resizable UI: You can resize the UI to see more content
- Quick Actions: In List View, the buttons (Open, Rename, Delete) are always visible on the right side of the row.
v2.0
🚀 PrefixHQ v2.0 Changelog
Complete UI Overhaul & Multi-Library Steam Support
This release represents a ground-up rewrite of PrefixHQ, transforming it from a simple prefix manager into a modern, visual Steam library companion with full multi-library awareness and beautiful cover art integration.
✨ Major Features
🖼️ Visual Game Library with Cover Art
- Card-based Grid Interface – Replaced text table with responsive visual cards showing game covers
- Automatic Cover Downloads – Fetches official Steam header images for all prefixes
- Smart Fallback System – Searches Steam Store API when direct image fetch fails
- Local Image Caching – Saves covers to
~/.config/PrefixHQ/cache/for instant reloads - Custom Cover Support – Right-click to upload local images or paste custom URLs
📚 Full Multi-Library Steam Awareness
- Automatic Library Detection – Parses
libraryfolders.vdfto discover all Steam libraries (primary + secondary drives) - Cross-Library Naming – Correctly identifies game names even when prefix resides in a different library than the game files
- Installation Status Tracking – Distinguishes between "Installed" and "Uninstalled" prefixes with visual indicators
- Flatpak/Snap Support – Detects Steam installations from Flatpak and Snap
⚡ Performance & Reliability
- Background Scanning – Full prefix detection runs in
QThread– zero UI freezing even with 100+ prefixes - Permission-Aware Scanning – Skips unreadable directories gracefully instead of crashing
- Deduplication Logic – Handles edge cases where same AppID appears across multiple libraries
- Persistent Custom Status – Manually toggle "Installed/Uninstalled" status – saved between sessions
🎨 Modern Steam-Inspired UI
- Custom Dark Theme – Deep blue/grey palette matching Steam client aesthetics
- Flow Layout Engine – Responsive grid that reflows cards as window resizes
- Context Menus – Right-click actions: SteamGridDB search, cover management, status toggle
- Search Filtering – Real-time filtering by game name or AppID
- Themed Scrollbars & Controls – Fully customized QSS stylesheet
🔧 Technical Improvements
| Area | Changes |
|---|---|
| Framework | Complete migration from PyQt5 → PyQt6 (modern signal/slot syntax, updated enums) |
| Architecture | Modular design: DataManager, SystemUtils, ScanWorker, GameCard, FlowLayout |
| Networking | QNetworkAccessManager for non-blocking image downloads with proper cleanup |
| File Management | Robust environment sanitization before launching file managers (strips LD_LIBRARY_PATH, Qt paths) |
| Error Handling | Graceful degradation for missing libraries, unreadable paths, and API failures |
🐛 Fixed Issues
- ❌ SSL Certificate Errors – Enforced system CA bundle path for Linux distributions
- ❌ File Manager Crashes – Stripped conflicting environment variables before launching
xdg-open/file managers - ❌ Permission Crashes – Added
os.access()checks before scanning/deleting prefixes - ❌ Corrupted .acf Parsing – Improved regex resilience for malformed Steam manifests
- ❌ Duplicate Prefixes – Deduplication logic prevents same AppID appearing multiple times
💡 Usage Tips
- First Launch: Allow 10-30 seconds for initial cover art downloads (cached permanently after first fetch)
- Missing Covers? Right-click card → Search on SteamGridDB for community artwork
- Wrong Status? Right-click card → Mark as Installed/Uninstalled to override detection
- Custom Covers: Use Load Cover from File... for local images or Load Cover from URL... for web sources
- Multi-Library Setup: No configuration needed – app auto-detects all libraries from Steam's config
🙏 Special Thanks
- SteamDB for reliable API endpoints
- SteamGridDB for community artwork ecosystem
- Qt Project for robust cross-platform framework
v1.7
v1.5
v1.0
🚀 Welcome to the first stable release of PrefixHQ!
What PrefixHQ does:
- Manages Steam Proton prefixes (compatdata) on Linux systems.
- Automatically detects installed Steam games.
- Shows “orphaned” prefixes (not associated with any installed game).
- Allows you to open, rename, or delete prefixes.
- Saves custom game names for better organization.
Key features in version 1.0:
- Fully-featured PyQt5 GUI.
- Management of installed games and orphaned prefixes.
- Built-in log with color-coded messages for tracking actions.
- Saves custom configurations in
~/.config/PrefixHQ/games.json. - Buttons for Delete, Open, Rename, and Refresh List actions.
Note:
Thanks to everyone who contributed and reported issues.
Enjoy managing your Proton prefixes with PrefixHQ! 🎮