Changes
🚀 Feature Release - Adaptive RSS/ETag mode switching, deferred routing, Docker health checks
Overview
Major improvements to watchlist workflow reliability and performance. Automatic mode switching adapts to Plex RSS CDN cache duration, RSS friend attribution works directly without GUID matching, Docker deployments get native health checks, and external API calls include descriptive User-Agent headers for better monitoring.
Key Updates
Watchlist Workflow Improvements (closes #795)
- Automatic mode switching: Detects RSS CDN cache duration and switches to ETag mode when needed
- Checks Cache-Control headers (s-maxage) on startup and during reconciliation
- Falls back to ETag polling if CDN cache exceeds 5 minutes
- Automatically switches back to RSS mode when cache settings improve
- Direct RSS attribution: RSS feeds now include friend UUIDs in author field - no more GUID matching required after sync
- Deferred routing queue: Handles Radarr/Sonarr downtime gracefully - items queued and processed when services recover
- Faster friend syncs: UUID-based caching eliminates duplicate database queries during polling
- ETag caching: Avoids re-downloading unchanged RSS feeds, reducing bandwidth
- Staggered polling: Non-RSS users get 5-minute staggered ETag polling instead of GraphQL-only
- Better startup: Reduced log verbosity and improved error handling during initialization
Docker Health Check
- Native support:
/healthendpoint works with Docker HEALTHCHECK directive - Reverse proxy compatible: Handles base path configurations correctly
API Improvements (closes #794)
- User-Agent headers: External API calls (Plex, TMDB) now include
Pulsarr/<version>for better monitoring and debugging
Bug Fixes
- Log rotation (closes #799): Compressed logs now correctly named
.log.gzinstead of.log(migration 067) - Pino upgrade: Logger upgraded to v10 with standardized patterns across all services
- RSS parsing: Genres now normalized to match database format
Migration & Compatibility
Docker users:
docker pull lakker/pulsarr:latest
# or specific version
docker pull lakker/pulsarr:0.8.0Manual installation:
git pull origin master
npm install
npm run migrate
npm run build
npm run start:prodDatabase migrations - Automatic on startup:
- Migration 067: Renames rotated log files from
.logto.log.gz - Migration 068: Removes deprecated
temp_rss_itemstable
Full Changelog: v0.7.6...v0.8.0
Docker Image: lakker/pulsarr:0.8.0
- Feature: Watchlist Workflow & RSS Improvements (#806) @jamcalli
- Feature/watchlist workflow modularization (#805) @jamcalli
- Feature/rss friend attribution refactor (#804) @jamcalli
- Feature/add dynamic user agent headers (#797) @jamcalli
- Refactor/delete sync refactor (#788) @jamcalli
- chore(logger): upgrade pino to v10 and standardize service logger pattern (#787) @jamcalli
- Fix/add gz extension to log files (#786) @jamcalli
- feat: add docker health check (#785) @jamcalli
🔄 Dependencies
- fix(deps): update dependency lucide-react to ^0.556.0 (#803) @renovate[bot]
- chore(deps): update node.js to 682368d (#800) @renovate[bot]
- chore(deps): update dev dependencies (non-critical) (#802) @renovate[bot]
- chore(deps): update dependency @scalar/fastify-api-reference to v1.40.1 (#801) @renovate[bot]
- chore(deps): update softprops/action-gh-release digest to a06a81a (#790) @renovate[bot]
- chore(deps): update actions/setup-node digest to 395ad32 (#789) @renovate[bot]
- chore(deps): update react (#793) @renovate[bot]
- chore(deps): update all other dependencies (#792) @renovate[bot]
- chore(deps): update dependency @fastify/sensible to v6.0.4 (#791) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.8.0
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]