Skip to content

Releases: Nastas95/PrefixHQ

v3.0.2

Choose a tag to compare

@Nastas95 Nastas95 released this 16 May 12:04
acb4d7d

Minor Update

  • Implemented #8 a toggle to disable the automatic check for updates, courtesy of @numerfolt

v3.0.1

Choose a tag to compare

@Nastas95 Nastas95 released this 14 Apr 21:20
1b0b2e7

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 data variables to prefix_data in 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)

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
  • Added a new request state (REQ_TYPE_APPDETAILS). When a fallback match is found, the app queries the Steam AppDetails API to fetch the official header_image or `capsule_image
  • Optimized loading for non-Steam games: load_image now 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

Choose a tag to compare

@Nastas95 Nastas95 released this 12 Apr 12:46
afc06a4

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

Choose a tag to compare

@Nastas95 Nastas95 released this 05 Apr 08:19
5f77f3b

Minor Update

  • this should finally address #3 (Non-Steam games don't have any titles)

v2.1

Choose a tag to compare

@Nastas95 Nastas95 released this 09 Feb 19:56
573edef

🚀 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.vdf Parsing – 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 (compatdata folders) 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

Choose a tag to compare

@Nastas95 Nastas95 released this 08 Feb 19:05
8d963a4

🚀 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.vdf to 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 QThreadzero 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

  1. First Launch: Allow 10-30 seconds for initial cover art downloads (cached permanently after first fetch)
  2. Missing Covers? Right-click card → Search on SteamGridDB for community artwork
  3. Wrong Status? Right-click card → Mark as Installed/Uninstalled to override detection
  4. Custom Covers: Use Load Cover from File... for local images or Load Cover from URL... for web sources
  5. 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

Choose a tag to compare

@Nastas95 Nastas95 released this 29 Dec 08:18
369b224

Fixed #2, now steamclip handles multiple install directories, it should now correctly detect games installed on the SD Card

Fixed (Again) Open Directory not working

v1.5

Choose a tag to compare

@Nastas95 Nastas95 released this 17 Dec 19:57
84f151e

Fix #1 , now "Open Directory" Should work on any linux Distro

v1.0

Choose a tag to compare

@Nastas95 Nastas95 released this 19 Oct 10:53
2cf8be6

🚀 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:

⚠️ Deleting prefixes is irreversible. Always double-check before removing any important game or non-Steam application data.

Thanks to everyone who contributed and reported issues.
Enjoy managing your Proton prefixes with PrefixHQ! 🎮