12.0.0 (2025-10-13)
Features
- landing page shows library in single user instances (61cb42d), closes #803
- migrate to GraphQL API with Postgres, multi-tenant architecture (feb9f4a), closes #715 #765 #772 #761 #768 #763 #762 #760 #769 #716 #766 #764 #767 #770 #775 #776 #682 #588 #682 #709
- single user instance rewrites of landing pages (#807) (c0fa16d), closes #803
BREAKING CHANGES
-
- IMPORTANT: remove extension settings
config.json
file prior to
upgrading. This file may be found:
%USER%\AppData\Roaming\Playnite\ExtensionData\ec3439e3-51ee-43cb-9a8a-5d82cf45edac\config.json
.
- IMPORTANT: remove extension settings
- Retired MQTT messaging in favor of GraphQL API with WebSocket
subscriptions- MQTT messages are used solely to handle cover art
- Requires Postgres database via DATABASE_URL environment variable
- Requires SECRET environment variable for JWT-based authentication
- Playnite plugin now uses GraphQL for all communication with web app
Major Features:
Database & Multi-Tenancy:
- Implemented Prisma/Postgres relational schema with User, Library,
Release, Platform, Feature, Tag, CompletionStatus, Playlist, Asset,
SiteSettings, and UserSetting models - Enabled multi-tenant support allowing multiple users with multiple
Playnite libraries per application instance- Added database migrations support for schema evolution
GraphQL API & Real-time Subscriptions:
- Replaced MQTT with GraphQL as primary programmatic interface
- Implemented WebSocket-based GraphQL subscriptions for real-time
updates - Playnite plugin now authenticates via GraphQL, publishes library
updates, and subscribes to web app changes - Added mutations for remote control: start, restart, and stop releases
Authentication & Authorization:
- Implemented JWT-based authentication with secure cookie and header
support- Added protected routes middleware for auth-gated pages
- Improved sign-in/out flows with proper navigation handling
- Added CSRF protection with Helmet CSP and configurable allowed origins
- Site admin and user settings pages with role-based access
UI/UX Improvements:
- Restored and enhanced game filtering and navigation
- Fixed layout issues including double scrollbars and grid sizing
- Improved SSR error handling with better error UI components
- Reduced layout shift and initial API calls for better performance
- Updated help page styles and minor UI tweaks throughout
- Automatic game cover art retrieval from IGN (requires matching game
names)
Library Sync & Real-time Updates:
- Improved library sync reliability with proper ordering and conditional
publishing - Immediate reflection of changes between Playnite desktop app and web
interface- Better handling of entity collection changes and updates
- Fixed game asset path resolution and image slug generation
Testing & CI Infrastructure:
- Comprehensive Cypress test suite updates (e2e, component, visual
regression)- Added code coverage reporting with GitHub Actions integration
- Dockerized e2e test flow with proper sharp/vips dependencies
- Fixed flaky test timing and removed obsolete tests
- Enabled SWC for faster builds and test execution
- Added Lighthouse audits for performance monitoring
Docker & Deployment:
- Optimized multi-stage Dockerfile for web app with alpine base
- Improved Docker build times for development
- Packaged Prisma client with correct binary targets
- Proper asset copying and environment variable handling
Performance & SSR:
- Fixed server-side rendering errors across multiple routes
- Proper use of compression middleware
- Optimized MUI component rendering and interaction timing
- Reduced unnecessary data fetching on initial page load
- Improved database connection management in development
Developer Experience:
- Updated Nx workspace configuration and cleanup
- Better Prisma connection handling in dev environment
- Fixed linting errors and removed dead code
- Improved CI workflow reliability
This release represents a fundamental architectural shift from
MQTT-based messaging to a modern GraphQL API with PostgreSQL
persistence, enabling multi-tenant support, improved real-time
synchronization, and a more maintainable codebase.