Skip to content

Releases: jamcalli/Pulsarr

v0.5.5-beta.2

20 Aug 08:36
Compare
Choose a tag to compare
v0.5.5-beta.2 Pre-release
Pre-release

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

19 Aug 08:15
Compare
Choose a tag to compare
v0.5.5-beta.1 Pre-release
Pre-release

Changes

Docker

docker pull lakker/pulsarr:0.5.5-beta.1

Contributors

@jamcalli

v0.5.4

18 Aug 18:57
Compare
Choose a tag to compare

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

🔄 Dependencies

Docker

docker pull lakker/pulsarr:0.5.4

Contributors

@coderabbitai[bot], @jamcalli, @renovate[bot], coderabbitai[bot] and renovate[bot]

v0.5.3

16 Aug 20:10
Compare
Choose a tag to compare

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

⚠️ Important Notice: This release includes major dependency version upgrades (Zod v4, React Hook Form v5, Node.js 22, Biome v2). While extensively tested, please monitor your deployment for any unexpected behavior and report issues if encountered.

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

16 Aug 08:05
Compare
Choose a tag to compare
v0.5.1-beta.2 Pre-release
Pre-release

Changes

Docker

docker pull lakker/pulsarr:0.5.1-beta.2

Contributors

@coderabbitai, @coderabbitai[bot] and @jamcalli

v0.5.2

15 Aug 00:05
Compare
Choose a tag to compare

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 to discover.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

  • fix: hotfix plex api url change and db fallback for watchlist fetch failures (#468) @jamcalli

Docker

docker pull lakker/pulsarr:0.5.2

Contributors

@jamcalli

v0.5.1

12 Aug 20:36
Compare
Choose a tag to compare

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

  • feat: add renovate config for actions (#448) @jamcalli

  • fix: error logger serializer issues (#445) @jamcalli

  • fix: tautulli notifications for single episode (#444) @jamcalli

Docker

docker pull lakker/pulsarr:0.5.1

Contributors

@jamcalli

v0.5.1-beta.1

11 Aug 22:42
Compare
Choose a tag to compare
v0.5.1-beta.1 Pre-release
Pre-release

Changes

Docker

docker pull lakker/pulsarr:0.5.1-beta.1

Contributors

@jamcalli

v0.5.1-beta.0

10 Aug 08:53
Compare
Choose a tag to compare
v0.5.1-beta.0 Pre-release
Pre-release

Changes

  • fix: tautulli notifications for single episode (#444) @jamcalli

Docker

docker pull lakker/pulsarr:0.5.1-beta.0

Contributors

@jamcalli

v0.5.0

09 Aug 16:40
Compare
Choose a tag to compare

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.

Docker

docker pull lakker/pulsarr:0.5.0

Contributors

@coderabbitai, @coderabbitai[bot] and @jamcalli