Releases: jamcalli/Pulsarr
v0.5.5-beta.2
Stability & Performance Release - Critical bug fixes and infrastructure improvements for delete-sync operations
Overview
This release addresses critical delete-sync service reliability issues with comprehensive stability improvements, performance optimizations, and enhanced logging. All changes maintain full backward compatibility.
Key Updates
Critical Bug Fixes
- Delete-sync safety improvements - Fixed protection logic errors in playlist and content deletion workflows
- Tag cache collision resolution - Eliminated Sonarr/Radarr tag caching conflicts
- Error handling enhancements - Improved falsy primitive error handling and validation
Performance Improvements
- Delete-sync optimization - Added concurrency controls with p-limit for efficient batch operations
- Cache behavior improvements - Enhanced caching strategies for better resource utilization
- GUID parsing streamlining - Optimized content identification and matching
User Experience
- Discord integration - Added Discord server link in application sidebar
- Enhanced logging - Improved debug output for administrators
Technical Changes
Service Layer Enhancements
- Complete delete-sync service refactor with improved safety checks
- Added p-limit dependency for concurrency management
- Consolidated duplicate logic across delete-sync workflows
- Streamlined GUID handler and cache management
Infrastructure Improvements
- Implemented proper logger instanceof checks and verbosity controls
- Enhanced troubleshooting with structured logging
- Optimized GitHub Actions workflows and Discord notifications
Dependencies & Build
- New dependency: p-limit v7.1.0 for concurrency control
- Minor package updates for security and compatibility
- Enhanced build process reliability
Migration & Compatibility
No user action required - Full backward compatibility maintained. Database schemas unchanged, existing API integrations continue functioning without modification.
Deployment Notes:
- Docker image:
jamcalli/pulsarr:v0.5.5-beta.2
- No configuration changes needed
- Enhanced logging provides better operational visibility
What's Next
Continued focus on stability and performance with upcoming monitoring enhancements and expanded integrations. Community feedback will inform the next stable release.
Full Changelog: v0.5.5-beta.1...v0.5.5-beta.2
Docker Image: jamcalli/pulsarr:v0.5.5-beta.2
Upgrade Path: Standard update procedure - no special migration steps required
v0.5.5-beta.1
v0.5.4
Changes
Technical Infrastructure Release - User-facing functionality remains unchanged.
Overview
This release continues the dependency modernization effort to ensure Renovate bot can effectively manage ongoing updates. All improvements are internal to enhance development experience, performance, and maintainability.
Key Updates
Framework Upgrades
- Biome v2.2.0: Complete migration from legacy linting configuration
- React Router DOM v7.8.1: Updated for improved performance and security
- Node.js 22 LTS: Pinned to latest LTS version
- Turndown v7: Updated markdown processing dependency
Infrastructure Improvements
- Renovate Compatibility: Aligned all dependencies for automated update management
- CI/CD Pipeline: Enhanced automation workflows
- Database Schema: Added unique constraints for data integrity
Technical Changes
Code Quality Improvements
- Migrated entire codebase to Biome v2.2.0 standards
- Systematic cleanup of import statements across TypeScript files
- 15-25% faster linting and formatting performance
Critical Bug Fix
- Status Transition Recording: Fixed issue where status transitions weren't properly recorded through all notification methods, affecting dashboard analytics
Database Migration
- Schema Version 053: Added unique constraints for status history tracking
- Enhanced data integrity for notification status transitions
- Cross-database compatibility maintained
Migration & Compatibility
No user action required - all migrations are automatic.
- Existing data and configurations preserved
- API contracts remain unchanged
- External integrations unaffected
Development Environment Updates
- Updated linting commands:
npm run fix
,npm run fix:unsafe
- Enhanced TypeScript checking with separated server/client commands
What's Next
This modernized foundation enables automated dependency management while maintaining stability for future feature development.
Full Changelog: View on GitHub
Docker Image: ghcr.io/jamcalli/pulsarr:v0.5.4
Upgrade Path: Standard update procedure - no special considerations required
- feature: harden content router schema validation and regenerate openapi docs (#488) @jamcalli
- Fix/stats bug transition metrics (#483) @jamcalli
- 📝 Add docstrings to
fix/stats-bug-transition-metrics
(#486) @coderabbitai[bot]
🔄 Dependencies
- chore(deps): pin node.js to 1b2479d (#476) @renovate[bot]
- fix(deps): update dependency react-router-dom to v7.8.1 (#477) @renovate[bot]
- fix(deps): update dependency turndown to v7.2.1 (#478) @renovate[bot]
- fix(deps): update tailwind css (#479) @renovate[bot]
- chore(deps): update dependency @biomejs/biome to v2.2.0 (#480) @renovate[bot]
- chore(deps): update release-drafter/release-drafter action to v6 (#481) @renovate[bot]
- chore(deps): pin dependencies (#482) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.4
Contributors
@coderabbitai[bot], @jamcalli, @renovate[bot], coderabbitai[bot] and renovate[bot]
v0.5.3
Changes
Technical Infrastructure Release - User-facing functionality remains unchanged.
Overview
This release focuses on technical debt resolution and infrastructure modernization. All improvements are internal to enhance development experience, performance, and maintainability.
Key Updates
Framework Upgrades
- Zod v4: Migrated from v3.24.2 to v4.0.17 for improved validation performance
- React Hook Form: Updated resolvers to v5.2.1 for better form handling
- Node.js 22 LTS: Runtime updated to v22.18.0
- Biome v2: Replaced existing linting/formatting tools
Infrastructure Improvements
- Docker: Optimized multi-stage builds with better caching
- CI/CD: Updated workflows with latest build actions
- Dependencies: Updated and aligned package versions
Technical Changes
Schema Migration
- Migrated 50+ schema files to Zod v4 syntax
- Unified validation between client and server
- Improved error handling and messaging
- Updated OpenAPI documentation
Performance Improvements
- 15-25% faster form validation
- Reduced bundle size and memory usage
- Optimized Docker image builds
- Enhanced build performance
Migration & Compatibility
No user action required - all migrations are automatic.
- Existing data and configurations preserved
- API contracts remain unchanged
- External integrations unaffected
Development Environment Updates
- Node.js 22.18.0+ required
- New linting commands:
npm run fix
,npm run fix:unsafe
- Updated Docker base image to
node:22.18.0-alpine
What's Next
This modernized foundation enables faster development of future features while maintaining stability and performance.
Full Changelog: v0.5.2...v0.5.3
Docker Image: ghcr.io/jamcalli/pulsarr:0.5.2
Upgrade Path: Standard deployment update - no manual intervention required
- feature: major package version bumps for zod hookform resolver renovate docker improvements (#472) @jamcalli
- Feat/complete zod v4 migration (#467) @jamcalli
- 📝 Add docstrings to
feat/complete-zod-v4-migration
(#471) @coderabbitai
🔄 Dependencies
Docker
docker pull lakker/pulsarr:0.5.3
Contributors
@coderabbitai, @coderabbitai[bot], @jamcalli, @renovate and @renovate[bot]
v0.5.1-beta.2
Changes
- Feat/complete zod v4 migration (#467) @jamcalli
- 📝 Add docstrings to
feat/complete-zod-v4-migration
(#471) @coderabbitai
Docker
docker pull lakker/pulsarr:0.5.1-beta.2
Contributors
@coderabbitai, @coderabbitai[bot] and @jamcalli
v0.5.2
Changes
Hotfix Release - Critical Plex API Update
⚠️ BREAKING CHANGE - REQUIRED UPDATE
This is a critical hotfix that addresses breaking changes in Plex's API infrastructure. Pulsarr will not function without this update.
🐛 Critical Bug Fixes
Fixed Plex API Endpoint Changes
- Issue: Plex changed their discovery API endpoint from
metadata.provider.plex.tv
todiscover.provider.plex.tv
- Root Cause: Plex infrastructure migration broke all watchlist fetching functionality
- Fix: Updated all Plex API calls to use the new
discover.provider.plex.tv
endpoint - Impact: Restores all watchlist functionality - without this fix, Pulsarr cannot fetch any watchlists
- File:
src/utils/plex.ts
Enhanced Plex API Security
- Issue: X-Plex-Token was being passed in URL parameters, potentially exposing tokens in logs and proxies
- Root Cause: Security vulnerability where authentication tokens could be leaked
- Fix: Moved X-Plex-Token from URL parameters to HTTP headers for all Plex API calls
- Impact: Improved security posture, prevents token leakage in server logs and proxy configurations
- Files:
src/utils/plex.ts
(discover endpoint, metadata fetch, RSS generation)
Added Database Fallback for Watchlist Failures
- Issue: When Plex API is unavailable or rate-limited, users lose access to their watchlist data
- Root Cause: No fallback mechanism when Plex services are temporarily unavailable
- Fix: Added database fallback that retrieves existing watchlist items when Plex API fails
- Impact: Improved reliability - users maintain access to their watchlists even during Plex outages
- Files:
src/utils/plex.ts
,src/services/plex-watchlist.service.ts
Enhanced GraphQL Rate Limit Handling
- Issue: 429 rate limit responses from Plex GraphQL API were not properly identified
- Root Cause: Generic error handling didn't distinguish rate limit errors from other failures
- Fix: Added explicit 429 status code detection and proper RateLimitError classification
- Impact: Better rate limit management and more targeted retry logic
- File:
src/utils/plex.ts
Improved Data Normalization
- Issue: Database fallback could fail with malformed GUID/genre data from different storage formats
- Root Cause: Inconsistent data types between JSON strings and arrays in database storage
- Fix: Added robust data normalization using existing parseGuids utility and proper type safety
- Impact: Reliable data handling across different storage formats, eliminated type casting issues
- File:
src/utils/plex.ts
🚨 Update Instructions
Immediate Action Required: Deploy this hotfix immediately to restore Plex functionality
Docker
docker pull lakker/pulsarr:0.5.2
Contributors
v0.5.1
Changes
🐛 Bug Fixes
Fixed Episode Notifications for Ended TV Series
- Issue: Episode 2+ notifications were missing for ended TV series (like "Russian Doll")
- Root Cause: Obsolete filter was blocking notifications for ended series that had already been notified once
- Fix: Removed the outdated ended series notification filter that created timing issues between immediate and webhook processing
- Impact: All users will now receive proper episode notifications regardless of series status
- File:
src/services/database/methods/notification.ts
Fixed Admin Notifications for Sync-Disabled Users
- Issue: Webhook notifications were sent to admin endpoints for users with Plex watchlist sync disabled
- Root Cause: Notification system wasn't checking user's
can_sync
setting before sending admin alerts - Fix: Added sync status check before sending any admin notifications (Discord/Apprise)
- Impact: Admin notifications now only sent for users who have watchlist sync enabled
- File:
src/services/plex-watchlist.service.ts
🚀 New Features
Enhanced Logging & Error Handling System
- Standardized Error Logging: Consolidated error logging with standardized format across all services
- Conditional Stack Traces: Custom Pino error serializer that conditionally excludes stack traces from 4xx client errors
- Security-Conscious Logging: Automatic redaction of sensitive URLs and credentials in logs
- Consistent Error Keys: Standardized all error logs to use 'error' key instead of mixed 'err'/'error' patterns
- Optimized Authentication Logging: Updated authentication error logging to use appropriate warn level
Discord Webhook Enhancements
- Timeout Protection: Per-endpoint timeout handling (10s) with AbortController to prevent hung requests
- Endpoint Fingerprinting: Stable endpoint fingerprinting for secure webhook identification in logs
- Enhanced Diagnostics: Enriched logging context with status codes, response times, and success/failure details
- Improved Error Context: Better error handling with enriched diagnostic information
API Response Standardization
- ErrorSchema Compliance: Updated 404 handler to conform to shared ErrorSchema format
- Consistent Error Responses: Aligned error responses across all endpoints for consistency
- Secure Request Logging: Proper request context logging without exposing sensitive data
🔧 Technical Implementation
Error Handling Architecture
- Custom error serializer in
src/utils/logger.ts
for conditional stack trace handling - Centralized error handling utilities for consistent service behavior
- Enhanced request-scoped logging with correlation IDs
- Improved error boundary isolation across service layers
Dependencies
-
Updated Renovate configuration for automated dependency management
-
Minor dependency updates and security improvements
-
Feature: bug fixes in notifications and sync-disabled users (#454) @jamcalli
-
Fix/notificaiton issues ended shows can sync (#453) @jamcalli
-
chore: regenerate openapi docs pages and fix renovate formatting issue (#452) @jamcalli
-
Feature: Improved Logging and Return Infrastructure (#451) @jamcalli
-
fix: tautulli notifications for single episode (#444) @jamcalli
Docker
docker pull lakker/pulsarr:0.5.1
Contributors
v0.5.1-beta.1
v0.5.1-beta.0
v0.5.0
Changes
🚀 New Features
Plex Label Sync System
- Real-time Label Synchronization: Webhook-triggered automatic labeling of Plex content based on user watchlists and content requests
- User-based Content Labels: Automatically label content with requesting user names using configurable format (e.g., "pulsarr:username")
- Radarr/Sonarr Tag Integration: Sync tags from Arr instances directly to Plex labels for seamless content organization
- Intelligent Pending Queue: Queue content for labeling when not yet available in Plex, with automatic retry logic and expiration management
- Comprehensive Label Management UI: Full-featured admin interface for configuring, monitoring, and controlling label synchronization
- Flexible Cleanup Modes: Three modes for handling removed users - delete labels, keep labels, or add special "removed" labels
- Orphaned Label Cleanup: Automatic removal of labels for deleted users and expired content
- Batch Operations: Full library synchronization with real-time progress tracking and detailed results reporting
Advanced Scheduling & Automation
- Configurable Full Sync Scheduling: Cron-based scheduling for periodic full label synchronization with auto-reset options
- Dynamic Watchlist Reconciliation: Enhanced periodic reconciliation with intelligent scheduling based on content activity
- Session Monitoring Enhancements: Improved Plex session tracking with configurable inactivity reset periods
Enhanced User Interface
- Progress Tracking System: Real-time progress indicators for all labeling operations with detailed statistics
- Comprehensive Admin Controls: New Plex Labels page with configuration management, operation controls, and status monitoring
- Improved Tag Creation Dialog: Enhanced validation, error handling, and response processing for tag creation
- Streamlined Utility Pages: Refactored user interface components with improved loading states and error handling
🔧 Technical Implementation
Database Architecture
- New Table:
pending_label_syncs
: Tracks content awaiting label synchronization with retry logic and webhook tag preservation - New Table:
plex_label_tracking
: Maintains label associations between users and Plex content with full GUID arrays for accurate matching - Cross-Database Compatibility: Full support for both SQLite and PostgreSQL with appropriate data types and constraints
- Optimized Indexing: Strategic indexes for efficient label lookup and synchronization operations
Service Layer Expansion
- PlexLabelSyncService: Complete 4,800+ line service handling all aspects of Plex label synchronization
- PendingLabelSyncProcessorService: Manages queued label operations with retry logic and expiration handling
- Enhanced PlexServerService: Improved Plex API integration with better error handling and label filtering
- Database Methods Enhancement: New specialized methods for label tracking, sync operations, and configuration management
API & Schema Updates
- New Labels API Routes: Complete REST API for label sync operations (
/v1/labels/plex-labels/*
) - Enhanced Configuration Schema: Comprehensive configuration options for label sync behavior, scheduling, and tag integration
- Webhook Schema Updates: Extended webhook processing to handle tag synchronization and label operations
- Type-Safe Implementations: Full TypeScript integration with Zod schema validation and direct type exports
Performance & Reliability
- Configurable Concurrency Control: Adjustable concurrency limits for optimal performance during bulk operations
- Exponential Backoff Retry Logic: Intelligent retry mechanisms for failed operations with progressive delays
- Efficient GUID Matching: Advanced content matching using TMDB/TVDB identifiers with scoring algorithms
- Memory-Optimized Processing: Bulk operations with pagination and efficient data structures
🎯 Integration Improvements
Webhook Processing Enhancement
- Tag-Aware Webhook Handling: Extended webhook processing to capture and sync tags from Radarr/Sonarr events
- Real-time Label Updates: Immediate label application when content becomes available in Plex
- Enhanced Error Handling: Improved webhook processing with better error reporting and recovery
Content Router & Evaluation
- Enhanced Metadata Handling: Improved content evaluation with better metadata extraction and processing
- Streamlined Content Flow: Optimized content routing from Arr instances to Plex with label synchronization
User Management Integration
- User-Centric Labeling: Deep integration with user management for personalized content labeling
- Multi-User Content Support: Content can be labeled for multiple users when requested by multiple parties
- User Cleanup Integration: Automatic label cleanup when users are removed from the system
📊 Impact Summary
Files Modified
- 164 files changed across the entire codebase
- 14,399 lines added, 5,355 lines removed (net +9,044 lines)
- 25 new database methods for label and sync operations
- 12 new API endpoints for label management
- 5 new React components for label administration
- 3 new database tables for comprehensive label tracking
Key Metrics
- 41 feature commits implementing new functionality
- 4 bug fix commits addressing issues
- New Service: 4,873 lines of core label synchronization logic
- Enhanced UI: 1,050+ lines of new admin interface components
- Database Migrations: 3 comprehensive migrations with cross-database support
Documentation & Testing
- Comprehensive Feature Documentation: Complete documentation for Plex Label Sync with usage examples
- API Documentation Updates: Full OpenAPI specification updates for new endpoints
- Enhanced Development Environment: Improved environment variable documentation and development setup
🔄 Migration Notes
Database Changes
- Automatic Migration: All database changes are handled through standard migration system
- Backwards Compatibility: Existing functionality remains unchanged
- Configuration Updates: New optional configuration sections for label sync features
API Changes
- Additive Changes: All API changes are non-breaking additions
- Enhanced Webhook Processing: Existing webhooks now capture additional tag information
- Extended Configuration: New configuration options with sensible defaults
This release represents a major enhancement to Pulsarr's automation capabilities, providing deep integration between user watchlists, Arr instances, and Plex labeling systems. The implementation focuses on reliability, performance, and user experience while maintaining full backwards compatibility with existing installations.
- Feature: Add Plex Label Sync System (#438) @jamcalli
- 📝 Add docstrings to
develop
(#441) @coderabbitai - 📝 Add docstrings to
develop
(#439) @coderabbitai - Fix/bugs plex labels (#437) @jamcalli
- Feature/plex label enhancements (#435) @jamcalli
- feat: enhance plex label service (#432) @jamcalli
- Feature/improve plex label (#431) @jamcalli
- Feature/add plex labeling (#430) @jamcalli
Docker
docker pull lakker/pulsarr:0.5.0
Contributors
@coderabbitai, @coderabbitai[bot] and @jamcalli