Changes
🚀 Feature Release - Plex API Compliance & RSS ETag Polling
Overview
Critical update addressing Plex developer feedback on API usage patterns. Implements gentler polling with jittered intervals and reduced concurrency. Includes watchlist service refactoring and race condition fixes.
Key Updates
Gentler Plex API Usage
Per Plex developer feedback, this release reduces API load to be more considerate of Plex backend servers:
- Jittered polling intervals: 30-60s randomized intervals prevent synchronized requests
- Reduced container size: 300 → 100 items per request
- Bounded friend concurrency: 4 → 2 parallel friend operations
- Pagination delays: 5-15s jitter between paginated requests
- Batch delays: 500ms → 1-5s jitter between batch operations
All users should update to ensure continued compatibility with Plex services.
RSS ETag Polling
- Efficient change detection: Uses HEAD requests with If-None-Match headers to detect feed changes
- 30-60s polling intervals: Fast watchlist change detection with less server impact
- Removed syncIntervalSeconds: Config field obsolete with new polling approach
Bug Fixes
- New friend immediate routing: New friends' watchlist items now route immediately instead of waiting for next full reconciliation
- Reconciliation race condition: Added lock preventing concurrent full and ETag syncs from corrupting state
Technical Changes
- Refactored plex watchlist service for easier maintenance
- ETag-based change detection for both RSS feeds and per-user watchlists
Migration & Compatibility
Docker users - Pull latest image, no action required
Manual installation users - Standard update process
Database migration - Automatic on startup:
- Drops
sync_interval_secondscolumn (obsolete with new polling)
Full Changelog: v0.7.5...v0.7.6
Docker Image: lakker/pulsarr:0.7.6
- Fix: Plex API Compliance & RSS ETag Polling (#784) @jamcalli
- Fix/new friend immediate sync (#783) @jamcalli
- fix(workflow): prevent concurrent reconciliation race conditions (#782) @jamcalli
- Feature/rss etag polling (#781) @jamcalli
- Feature/watchlist workflow refactor (#780) @jamcalli
🔄 Dependencies
- chore(deps): update react (#775) @renovate[bot]
- chore(deps): update docker/metadata-action digest to c299e40 (#772) @renovate[bot]
- chore(deps): update dependency better-sqlite3 to v12.5.0 (#776) @renovate[bot]
- chore(deps): update dev dependencies (non-critical) to v4.0.14 (#774) @renovate[bot]
- chore(deps): update dependency @fastify/auth to v5.0.4 (#773) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.7.6
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]