Library syncs can lock the web app. Syncs now occur async by offloading a message to be consumed by sync-library-processor (formerly game-assets-processor). E2E sync tests are now against the processor, to be removed from playnite-web-app. New snapshot mechanism used for local dev and e2e tests; allows a database to be snapshotted and restored.
next/image is used to optimze cover art and platform images.
BREAKING CHANGE: game-assets-processor renamed to sync-library-processor to reflect its new responsibilities; refer to new docker-compose sample for deployment. This will require users to sync their libraries again after updating.
- Deleted rfc.md, we determined this file isn't needed.
- Updated contributor guidelines to include more details and clarity around the various types of contribution.
- Fixed some broken links caused by renaming the directory.
- Added a new Troubleshooting topic for documenting common problems and
their solutions. Included information about what to do if you discover a
security vulnerability.
- Deleted dedicated SECURITY.md file, added note about security to
Getting Started section of main README file.
- Renamed folders in the documentation directory to make it easier to
quickly scan folder names and navigate the repo, i.e. changed “guides”
to “user-guides”.
- Deleted the “design” folder and the README.md file it contained,
because the README was an empty file, making it effectively an empty
folder. Did this to streamline folder structure by eliminating
redundancy.
- Updated the main README file to add punctuation and reword some
content. Updated the Getting Started section to add more details about
where to find information. Added notice about submitting a security item
to the Getting Started section.
- Fixed a small typo (missing word) in the setup guide.
Fixes#858Fixes#857
- Added a new Troubleshooting topic for documenting common problems and their solutions. Included information about what to do if you discover a security vulnerability.
- Deleted dedicated SECURITY.md file, added note about security to Getting Started section of main README file.
- Renamed folders in the documentation directory to make it easier to quickly scan folder names and navigate the repo, i.e. changed “guides” to “user guides”.
- Deleted the “design” folder and the README.md file it contained, because the README was an empty file, making it effectively an empty folder. Did this to streamline folder structure by eliminating redundancy.
- Updated the main README file to add punctuation and reword some content. Updated the Getting Started section to add more details about where to find information. Added notice about submitting a security item to the Getting Started section.
- Fixed a small typo (missing word) in the setup guide.
BREAKING CHANGES:
- 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.
Closes#715Closes#765Closes#772Closes#761Closes#768Closes#763Closes#762Closes#760Closes#769Closes#716Closes#766Closes#764Closes#767Closes#770Closes#775Closes#776
Clsoes #682Closes#588Closes#682Closes#709
BREAKING CHANGES