Skip to content

Releases: jamcalli/Pulsarr

v0.5.13

12 Sep 20:10
Compare
Choose a tag to compare

Changes

🚀 New Features & Dependencies Release - Client log viewer and streaming improvements

Overview

Enhanced logging infrastructure with a new client-side log viewer and optimized streaming performance for real-time log monitoring.

Key Updates

New Client Log Viewer

  • Real-time streaming: Server-sent events for live log updates
  • Advanced filtering: Search text, log level filtering, and real-time toggles
  • Export functionality: Download filtered logs with custom filename support
  • Performance optimized: Virtualized display for handling large log volumes
  • Responsive design: Mobile-friendly interface with loading states

Enhanced Streaming Performance

  • Optimized file reading: Enhanced buffer management for efficient log processing
  • Memory efficiency: Proper bytesRead handling for clean data parsing
  • Polling optimization: Non-overlapping file change detection with guard mechanisms
  • Robust error handling: Comprehensive TOCTOU prevention and loop protection

Technical Changes

Client-Side Architecture

  • New log viewer page: Complete UI with filtering, search, and export capabilities
  • Custom hooks: useLogStream for SSE connection management
  • Skeleton loading: Dedicated loading states for improved UX
  • Responsive components: Mobile-optimized layout and controls

Backend Enhancements

  • Log streaming service: New service for efficient log file monitoring
  • SSE endpoint: Real-time log streaming via Server-Sent Events
  • Buffer optimizations: Fixed buffer handling and prevented uninitialized byte corruption
  • Race condition fixes: Eliminated TOCTOU issues in file operations

Infrastructure Updates

  • Plugin integration: Custom log streaming plugin
  • Schema definitions: Complete TypeScript schemas for log entries
  • Performance monitoring: Guard against overlapping polling operations
  • Dependency updates: Node.js 22.19.0 and various package updates

Migration & Compatibility

No user action required - new log viewer is automatically available in the utilities section.


Full Changelog: v0.5.12...v0.5.13
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update

🔄 Dependencies

Docker

docker pull lakker/pulsarr:0.5.13

Contributors

@actions-user, @coderabbitai[bot], @jamcalli, @renovate[bot], coderabbitai[bot] and renovate[bot]

v0.5.12

08 Sep 07:04
Compare
Choose a tag to compare

Changes

Technical Infrastructure Release - IMDB dataset optimization and streaming improvements

Overview

Infrastructure improvements for IMDB data processing with pre-filtered datasets and optimized streaming utilities.

Key Updates

IMDB Dataset Optimization

  • Pre-filtered ratings dataset: 52% size reduction by targeting types
  • Automated daily updates: GitHub Actions workflow generates fresh datasets daily
  • Self-hosted delivery: Switch to pre-processed datasets hosted in repository

Performance Improvements

  • Memory optimization: Reduced streaming memory usage by ~50% through direct response streaming
  • Enhanced error handling: Fixed abort cancellation and added fail-fast validation
  • Data integrity: Preserved TSV field whitespace and improved error detection

Technical Changes

Streaming Utilities

  • Direct response.body streaming instead of double-buffering
  • Proper AbortError handling bypassing retry logic
  • Enhanced validation for corrupted datasets

Infrastructure

  • Daily dataset generation workflow with conflict prevention
  • Improved PostgreSQL migration script
  • Documentation reorganization and updates

Migration & Compatibility

No user action required - internal optimizations only.


Full Changelog: v0.5.11...v0.5.12
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update

Docker

docker pull lakker/pulsarr:0.5.12

Contributors

@jamcalli

v0.5.11

04 Sep 08:31
Compare
Choose a tag to compare

Changes

🚀 New Features

IMDB Ratings Integration System

  • Complete IMDB Ratings Database: Automated daily synchronization with official IMDB datasets from datasets.imdbws.com
  • Advanced Content Router: New IMDB-based routing evaluator supporting sophisticated rating and vote count criteria
  • Compound IMDB Filtering: Support for filtering content based on both rating thresholds and minimum vote requirements
  • Intelligent Rating Evaluation: Comprehensive operator support including equals, greater than, between ranges, and array matching
  • Streaming Data Processing: Efficient parsing of compressed IMDB datasets with retry logic and exponential backoff
  • Background Database Updates: Non-blocking IMDB data population with scheduled daily refreshes at 2:30 AM

Enhanced Content Routing

  • IMDB Router Evaluator: Priority 80 evaluator for routing decisions based on IMDB ratings and vote counts
  • Compound Value Support: Advanced filtering allowing combinations like "rating >= 8.0 AND votes >= 10,000"
  • Range-Based Matching: Support for between operations with configurable min/max thresholds
  • Array Membership Testing: "in" and "notIn" operators for matching against lists of acceptable ratings

Advanced UI Components

  • IMDB Rating Input Component: Specialized input with vote count toggle and validation
  • Compound Value Handling: UI support for complex rating + vote count combinations
  • Range Input Controls: Min/max input pairs for between operations with proper validation
  • Real-time Validation: Form validation for compound IMDB objects and range comparisons

🔧 Technical Implementation

Database Architecture

  • New Table: imdb_ratings: Stores tconst, average_rating, and num_votes with proper indexing
  • Cross-Database Compatibility: Full support for both SQLite and PostgreSQL with optimized chunk sizes
  • Bulk Operations: Efficient insert/replace methods with conflict resolution and transaction management
  • Performance Optimization: Chunked processing (5000 records for PostgreSQL, 100 for SQLite)

Service Layer Expansion

  • ImdbService: Complete service handling ratings lookup, database updates, and statistics
  • Enhanced Streaming Utilities: New streamLines utility with retry logic and Retry-After header support
  • Database Methods: Specialized methods for IMDB operations including bulk replace and statistics
  • Plugin Integration: IMDB plugin with automated scheduling and background processing

API & Schema Updates

  • Enhanced Router Schemas: Extended condition schemas to support compound IMDB values
  • Validation Improvements: Enhanced isNonEmptyValue function for complex object validation
  • Type Safety: Complete TypeScript integration with proper type inference and validation
  • OpenAPI Updates: Regenerated API documentation reflecting new IMDB integration capabilities

🛠️ Critical Bug Fixes

  • Form Validation: Fixed "All conditions must be completely filled out" error when enabling IMDB vote count filtering
  • Delete Sync Validation: Resolved maxDeletionPrevention field validation to properly accept values between 1-100
  • API Timeout Enhancement: Increased Sonarr and Radarr API timeouts from 60 to 120 seconds to prevent failures during bulk operations

🔄 Migration Notes

Database Changes

  • Automatic Migration: New imdb_ratings table created automatically during startup
  • Initial Population: First-time IMDB dataset download and processing (several minutes)
  • Backwards Compatibility: All existing functionality remains unchanged

No user action required for existing installations - all changes are backward compatible.


Full Changelog: v0.5.10...v0.5.11
Docker Image: ghcr.io/jamcalli/pulsarr:v0.5.11
Upgrade Path: Standard update process - database migrations run automatically

  • IMDB Ratings Integration and Advanced Content Routing (#545) @jamcalli
  • feat: update anime and IMDB plugins to populate databases in the back… (#542) @jamcalli
  • Feature/imdb ratings router (#541) @jamcalli

Docker

docker pull lakker/pulsarr:0.5.11

Contributors

@jamcalli

v0.5.10

02 Sep 21:26
Compare
Choose a tag to compare

Changes

Technical Infrastructure Release - Enhanced service logging with prefixed identification

Overview

Infrastructure release focused on improving service observability through structured logging with service prefixes. All services now have clearly identifiable log output with service-specific prefixes, making debugging and monitoring significantly easier.

Technical Changes

Enhanced Service Logging

  • Added service logger factory: Introduced createServiceLogger utility to create child loggers with service prefixes
  • Service-prefixed logs: All services now output logs with clear identifiers like [SCHEDULER], [RADARR_MANAGER], [SONARR_MANAGER] etc.
  • Dynamic logger creation: Services use getter pattern to create fresh loggers that inherit current log level changes
  • Enhanced file output: Added pretty formatting to file logs for improved readability while maintaining structured data

Improved Observability

  • Better service identification: Easy to trace which service generated specific log entries
  • Cleaner log organization: Service prefixes make filtering and searching logs more efficient
  • Maintained log levels: Child loggers inherit parent log level changes dynamically
  • Dual-stream formatting: Terminal gets colored output, files get clean formatted output

Minor Bug Fixes

  • Discord field truncation: Fixed potential notification failures when content descriptions exceed Discord's 1024-character limit
  • Enhanced error context: Improved structured error logging with service identification

Migration & Compatibility

No user action required - logging enhancements are internal improvements that make logs easier to read and debug.

What's Next

With improved service observability in place, debugging and monitoring will be significantly easier for future development and troubleshooting.


Full Changelog: v0.5.9...v0.5.10
Docker Image: ghcr.io/jamcalli/pulsarr:latest
Upgrade Path: Pull latest image and restart container - improvements apply automatically

Docker

docker pull lakker/pulsarr:0.5.10

Contributors

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

v0.5.9

30 Aug 09:10
Compare
Choose a tag to compare

Changes

Patch Release - Plex label sync and frontend certification fixes

Overview

Bug fix release addressing critical issues in Plex label synchronization that could cause exponential label growth. Fixes frontend certification dropdown reset issues where region-prefixed values weren't handled correctly in content router conditions.

Bug Fixes

  • Fixed exponential label growth: Resolved critical bug where Plex labels would multiply exponentially during sync operations in multi-user scenarios
  • Fixed certification dropdown reset: Content router certification dropdowns now properly handle region-prefixed values like "US-PG-13" and "UK-15" without resetting
  • Fixed user label cleanup: Multi-user content now correctly preserves labels when only some users remove items from watchlists
  • Fixed removal tag persistence: Removal tags are now properly cleaned up when content is re-added, preventing inconsistent tag states

Technical Changes

  • Enhanced label tracking: Improved database operations to prevent orphaned tracking entries that caused exponential growth
  • Optimized sync performance: Added parallelization to Sonarr/Radarr instance fetching with configurable concurrency limits
  • Improved frontend validation: Enhanced certification value parsing and region prefix detection for better dropdown stability
  • Refactored cleanup logic: Streamlined removal tag cleanup to always remove stale markers when users re-add content

Migration & Compatibility

No user action required - all fixes are backward compatible and resolve automatically on next sync operation.


Full Changelog: v0.5.8...v0.5.9
Docker Image: ghcr.io/jamcalli/pulsarr:latest
Upgrade Path: Pull latest image and restart container - fixes apply automatically

Docker

docker pull lakker/pulsarr:0.5.9

Contributors

@jamcalli

v0.5.8

29 Aug 00:13
Compare
Choose a tag to compare

Changes

Patch Release - API key user association and dependency updates

Overview

Bug fix release addressing API key user association for audit tracking. Fixes issue where approval endpoints requiring user IDs for audit tracking would fail when accessed via API key authentication due to missing user context in session data.

Bug Fixes

  • Fixed API key user association: API keys now properly associated with admin users for audit tracking
  • Resolved session user context: API key authentication now populates session with user data for downstream operations
  • Fixed approval endpoint failures: Approval routes requiring user IDs now work correctly with API key authentication

Technical Changes

  • Migration 056: Added user_id column to api_keys table with automatic user assignment
  • Enhanced API key service: Improved cache management and error resilience during refresh operations
  • Updated authentication flow: API key verification now provides full user session context
  • Improved type safety: Added user_id to API key schemas and response types

Dependencies

  • React: Updated to v19.1.11 for latest stability improvements
  • Vite React Plugin: Updated to v5.0.2 for improved build performance
  • p-limit: Updated to v7.1.1 for enhanced concurrency control
  • Lock file maintenance: Updated package-lock.json for security and compatibility

Migration & Compatibility

No user action required - migration runs automatically on startup.

Database Migration: Migration 056 handles both fresh installations and existing systems. For existing installations, all API keys are automatically associated with the primary admin user.

API Compatibility: No breaking changes to existing API endpoints. All functionality remains the same with improved audit tracking support.


Full Changelog: v0.5.7...v0.5.8
Docker Image: ghcr.io/jamcalli/pulsarr:latest
Upgrade Path: Pull latest image and restart container - migration runs automatically

🔄 Dependencies

Docker

docker pull lakker/pulsarr:0.5.8

Contributors

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

v0.5.7

27 Aug 16:53
Compare
Choose a tag to compare

Changes

Patch Release - Plex label tracking bug fixes

Overview

Bug fix release addressing Plex label tracking issues and database foreign key constraints. 7 files changed with focus on system-generated removal label handling.

Bug Fixes

  • Fixed removal label tracking: System-generated pulsarr:removed labels now properly tracked in database
  • Resolved foreign key constraints: Made user_id nullable in plex_label_tracking table for system operations
  • Improved cleanup logic: Enhanced removal tag filtering to prevent stale markers
  • Eliminated duplicate logging: Removed redundant error handling in tag operations

Technical Changes

  • Migration 055: Database schema update for nullable user_id (runs automatically)
  • Service layer: Updated Plex label sync and user tag services for better null handling
  • Type definitions: Enhanced interfaces to support system operations with nullable user IDs

Migration & Compatibility

Database Migration: Required - runs automatically on startup
User Impact: No action required - behind-the-scenes reliability improvements


Full Changelog: v0.5.6...v0.5.7
Docker Image: jamcalli/pulsarr:v0.5.7
Upgrade Path: Standard update - migration runs automatically

Docker

docker pull lakker/pulsarr:0.5.7

Contributors

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

v0.5.6

26 Aug 20:47
Compare
Choose a tag to compare

Changes

Stability & Performance Release - Critical bug fixes, dashboard optimization, new media viewer, and infrastructure improvements with logging configuration changes

Overview

This release focuses on stability improvements with critical session monitoring fixes, dashboard performance optimization, and dependency updates. Key improvements include fixing session monitoring bugs that were wrongfully deleting future seasons, centralizing dashboard statistics fetching to prevent duplicate API calls, adding a new media viewer for detailed content information, and updating Discord.js to resolve deprecated API usage. Important: This release includes breaking changes to logging configuration that require user attention.

Breaking Changes

Logging Configuration Changes

  • Breaking: Removed NODE_ARGS Docker logging system (deprecated)
  • Breaking: Migration from command-line argument-based logging to environment variable-based configuration
  • Two new environment variables control logging behavior:
    • enableConsoleOutput: Controls terminal/console log output (default: true)
    • enableRequestLogging: Controls HTTP request logging (default: true)
  • File logging is now ALWAYS enabled and writes to ./data/logs/ directory
  • Rotating logs with 10MB size limit, 7 max files, gzipped
  • Log format: pulsarr-YYYY-MM-DD.log with pulsarr-current.log for active file

Key Updates

Critical Bug Fixes

  • Fixed session monitoring service wrongfully deleting future seasons when not watched
  • Fixed bug where master records were treated as inactive shows in session monitoring
  • Resolved progressive cleanup issues in session monitoring
  • Fixed duplicate dashboard statistics requests causing performance issues
  • Corrected content router approval priority from highest weight settings

New Features

  • Media Viewer: New components ContentDetailModal and TmdbContentViewer for enhanced content details
  • Clickable eye icon on media cards (when GUIDs available) opens detailed content information
  • Responsive modal/drawer using Credenza component for different screen sizes
  • TMDB integration with ratings, streaming providers, and cast information
  • TVDB GUID prioritization for TV shows to avoid TMDB ID conflicts

Dashboard & UI Improvements

  • Centralized all dashboard stats fetching to prevent race conditions and duplicate API calls
  • Enhanced content detail modals with improved TMDB metadata integration
  • Implemented loading state improvements to reduce UI flicker
  • Enhanced stats refresh functionality with proper error handling
  • Added abort controller implementation for better request lifecycle management

Service Layer Enhancements

  • Improved error handling throughout session monitoring service
  • Added unique constraint migration for rolling monitored shows to prevent duplicate entries
  • Major logging system overhaul: Migrated from command-line argument-based to environment variable configuration
  • Removed deprecated NODE_ARGS Docker logging system
  • Implemented always-on file logging with rotating log files (10MB limit, 7 max files, gzipped)
  • Enhanced logger configuration with granular control over console and request logging
  • Streamlined database methods by removing duplicates

Technical Changes

Database Schema Migration

  • Migration 054: Added unique constraint to rolling_monitored_shows table preventing duplicate per-user entries
  • Implemented cross-database compatible cleanup logic for both SQLite and PostgreSQL
  • Enhanced data integrity with race-safe rolling monitoring record creation

Performance Improvements

  • Dashboard statistics now use intelligent caching with 5-second duration to prevent duplicate API calls
  • Implemented parameter-aware caching that respects different limit/days combinations
  • Added race condition prevention during manual dashboard refresh operations
  • Optimized SSE (Server-Sent Events) cleanup with proper abort controller implementation

Dependency Updates

  • Discord.js: Updated to v14.22.1 with migration from deprecated ready event to clientReady
  • React: Updated to v19.1.1 for latest performance improvements
  • Zustand: Updated to v5.0.8 with improved state management patterns
  • Node Types: Updated to v22.18.0 for latest TypeScript definitions
  • Biome: Schema updated to align with package version for consistent linting
  • Multiple minor dependency updates for security and stability

API & Schema Enhancements

  • Aligned approval API specifications with actual route returns
  • Updated OpenAPI documentation with 975+ lines of improvements
  • Enhanced error schemas to match Fastify Sensible standards
  • Improved TMDB metadata fetching with better error handling
  • Added consistent session user ID extraction across all approval routes

Migration & Compatibility

Action Required for Logging Configuration - This release includes breaking changes to logging configuration:

  1. Environment Variables: If you previously customized logging behavior, you must now use environment variables:

    • enableConsoleOutput=false to disable terminal/console log output
    • enableRequestLogging=false to disable HTTP request logging
  2. File Logging: Now ALWAYS enabled and cannot be disabled. Logs write to ./data/logs/ directory with rotating files (10MB limit, 7 max files, gzipped).

  3. Docker Users: Remove any NODE_ARGS logging configuration and update your docker-compose or deployment configuration to include the new environment variables if you want non-default console/request logging behavior.

Database Migration: The new migration (054) is compatible with both SQLite and PostgreSQL installations and will automatically clean up any existing duplicate records before adding the new unique constraint. No user action required for database changes.

What's Next

This release establishes a solid foundation for upcoming features with improved stability and performance. Future releases will focus on new functionality building upon these infrastructure improvements, including enhanced content management features and expanded integration capabilities.

Community

Join our Discord community! Get support, share feedback, and stay updated on development progress:

🔗 Join Discord Server

Whether you're troubleshooting, requesting features, or just want to chat about media automation, our community is here to help!


Full Changelog: v0.5.5...v0.5.6
Docker Image: ghcr.io/jamcalli/pulsarr:0.5.6
Upgrade Path: Pull latest image and restart container - migration runs automatically

  • chore: docstrings (#519) @jamcalli
  • 📝 Add docstrings to develop (#518) @coderabbitai[bot]
  • v0.5.6: Fix session monitoring bugs, add media viewer, optimize dashboard (#517) @jamcalli
  • Fix/dashboard multiple stats requests (#516) @jamcalli
  • fix: progressive cleanup in session monitoring wrongfully deleting future seasons when not watched (#511) @jamcalli
  • fix: approvals settings from highest weight takes priority (#510) @jamcalli
  • feat: refactor logger to always log file with some env config and removed duplicate db methods (#508) @jamcalli
  • Bug/fix sse events cleanup (#505) @jamcalli
  • Feature/content info dashboard (#503) @jamcalli

🔄 Dependencies

Docker

docker pull lakker/pulsarr:0.5.6

Contributors

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

v0.5.6-beta.0

25 Aug 23:44
Compare
Choose a tag to compare
v0.5.6-beta.0 Pre-release
Pre-release

Changes

  • fix: approvals settings from highest weight takes priority (#510) @jamcalli
  • feat: refactor logger to always log file with some env config and removed duplicate db methods (#508) @jamcalli
  • Bug/fix sse events cleanup (#505) @jamcalli
  • Feature/content info dashboard (#503) @jamcalli

Docker

docker pull lakker/pulsarr:0.5.6-beta.0

Contributors

@jamcalli

v0.5.5

20 Aug 22:43
Compare
Choose a tag to compare

Changes

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
  • Dashboard chart data correction - Fixed StatusTransitionsChart displaying duplicate movie graphs instead of separate movie and show statistics

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
  • Dashboard improvements - Corrected status transition charts to properly display movie and show data separately

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

Frontend Improvements

  • Fixed dashboard chart data source mapping to use correct status transition endpoints
  • Enhanced chart component type safety and error handling
  • Improved SSR compatibility for chart components

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
  • 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.4...v0.5.5

Docker Image: jamcalli/pulsarr:v0.5.5

Upgrade Path: Standard update procedure - no special migration steps required

Docker

docker pull lakker/pulsarr:0.5.5

Contributors

@jamcalli