Releases: jamcalli/Pulsarr
v0.6.3
Changes
🛠️ Bug Fix Release - BasePath support fixes
Overview
Bug fix release addressing critical issues with basePath configuration. This release fixes authentication failures, infinite redirect loops, and incorrect URL handling when using a custom basePath.
Key Updates
Critical Bug Fixes
- Authentication with basePath: Fixed authentication hook to correctly identify public paths when basePath is configured
- Login redirect loop: Resolved infinite redirect issue when accessing root URL with basePath set
- Client-side navigation: Fixed double basePath in URLs after login and other navigation events
- Path matching precision: Improved public path matching to prevent false positives
Technical Changes
Server-Side
- Updated authentication hook to properly handle basePath prefix in request URLs
- Added precise path matching with query string support to prevent unintended route matches
- Fixed login route to return paths without basePath (client-side router handles it automatically)
- Improved URL matching logic in app initialization for create-user and login pages
Client-Side
- Removed
navPath()
utility function as React Router handles basename automatically - Updated all
navigate()
calls across components to use plain paths - Simplified navigation logic in login, create-user, logout, approvals, and utilities
Code Quality
- Simplified IMDb service logging to remove implementation details
- Removed unnecessary transaction status messages from logs
Migration & Compatibility
No user action required - fixes are applied automatically. Users with basePath configured will now experience proper authentication and navigation behavior.
Full Changelog: v0.6.2...v0.6.3
Docker Image: lakker/pulsarr:0.6.3
- BasePath support fixes (#643) @jamcalli
- refactor: remove navPath utility and update navigation logic across c… (#642) @jamcalli
Docker
docker pull lakker/pulsarr:0.6.3
Contributors
v0.6.2
Changes
🛠️ Bug Fix Release - Delete sync safety check respects tracked-only setting
Overview
Bug fix release addressing safety check false positives when tracked-only deletion is enabled. The safety check now accurately counts only items that would actually be deleted.
Key Updates
Critical Bug Fix
- Safety check accuracy:
performSafetyCheck()
now respectsdeleteSyncTrackedOnly
setting when counting potential deletions - Prevents false aborts: Safety mechanism no longer triggers incorrectly when most content is untracked
Technical Changes
Delete Sync Service
- Added tracked content validation to safety check for both movies and shows
- Safety check now matches actual deletion behavior by filtering non-tracked items
Migration & Compatibility
No user action required - fixes are applied automatically.
Full Changelog: v0.6.1...v0.6.2
Docker Image: lakker/pulsarr:0.6.2
Docker
docker pull lakker/pulsarr:0.6.2
Contributors
v0.6.1
Changes
🛠️ Bug Fix Release - Base path redirect handling and navigation fixes
Overview
Bug fix release addressing incomplete base path support in redirects and navigation. Ensures consistent behavior when running Pulsarr under a reverse proxy with a custom base path.
Key Updates
Critical Bug Fixes
- Server-side redirects: All authentication and logout redirects now respect configured base path
- Client-side navigation: Fixed approval events, SSE reconnection, and form submissions ignoring base path
- Documentation clarity: Enhanced JSDoc to prevent incorrect API utility usage
Technical Changes
Redirect Handling
- Unified redirect logic: Added
buildPath()
helper for consistent base path handling across all server redirects - Authentication flows: Login, logout, and user creation routes properly construct redirect URLs
- Client navigation: All
window.location
assignments usenavPath()
helper
API Documentation
- Usage clarification: JSDoc now clearly distinguishes navigation paths (with base path) vs API paths (without)
- Developer guidance: Added examples to prevent misuse of navigation utilities
Migration & Compatibility
No user action required - fixes are applied automatically.
Full Changelog: v0.6.0...v0.6.1
Docker Image: lakker/pulsarr:0.6.1
- fix: Base path redirect handling and navigation fixes (#640) @jamcalli
- feat: add missing basePath redirect handling (#633) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#628) @renovate[bot]
- chore(deps): update node.js to dbcedd8 (#634) @renovate[bot]
- chore(deps): update softprops/action-gh-release digest to aec2ec5 (#635) @renovate[bot]
- chore(deps): update dependency @scalar/fastify-api-reference to v1.38.0 (#637) @renovate[bot]
- chore(deps): update dependency discord.js to v14.23.2 (#638) @renovate[bot]
- chore(deps): update dependency zod to v4.1.12 (#636) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.6.1
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]
v0.6.0
Changes
🗑️ Delete Sync Approval Cleanup & Tracked Content Management
Overview
Enhanced delete sync with approval system integration, enabling automatic cleanup of approval records when content is deleted and tracked-only deletion for granular control over what content gets removed.
Key Updates
Approval Cleanup Integration
- Automatic cleanup: New
deleteSyncCleanupApprovals
setting removes approval records when content is deleted - Real-time updates: SSE events notify connected clients when approvals are removed
- Dual branch support: Works with both tag-based and watchlist-based deletion modes
- Error resilience: Individual error handling prevents cascade failures
Tracked-Only Deletion
- Selective deletion: New
deleteSyncTrackedOnly
setting restricts deletion to Pulsarr-tracked content only - Content preservation: Protects manually-added or externally-synced content from removal
- GUID-based filtering: Efficient lookup against approval system records
- Consistent behavior: Identical logic across both deletion workflows
Technical Changes
Database Enhancements
- New methods: Added
getTrackedContentGuids()
and enhancedgetApprovalRequestsByGuids()
for approval system integration - Pattern consistency: Standardized GUID matching across PostgreSQL and SQLite
- GUID normalization: All GUIDs normalized for consistent matching between services
Architecture Improvements
- Service layer integration: Delete sync uses
ApprovalService
for proper SSE event emission - Optimized filtering: Tracked content check applied before protection playlist check
- Enhanced error handling: Detailed logging with approval ID and content title on failures
Migration & Compatibility
Automatic migration - Database migration adds two new settings to configs
table. Both default to disabled, preserving existing behavior.
Full Changelog: v0.5.18...v0.6.0
Docker Image: lakker/pulsarr:0.6.0
- Feat: Delete Sync Approval Cleanup & Tracked Content Management (#629) @jamcalli
- feat: add delete sync options for tracked content and approval cleanup (#627) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#626) @renovate[bot]
- chore(deps): update dependency @commitlint/cli to v20.1.0 (#625) @renovate[bot]
- chore(deps): update dependency fast-xml-parser to v5.3.0 (#624) @renovate[bot]
- chore(deps): update dependency @scalar/fastify-api-reference to v1.37.0 (#623) @renovate[bot]
- chore(deps): update tailwind css to v4.1.14 (#622) @renovate[bot]
- chore(deps): update build tools (#621) @renovate[bot]
- chore(deps): update react to v19.2.0 (#620) @renovate[bot]
- chore(deps): update dependency dotenv to v17.2.3 (#619) @renovate[bot]
- chore(deps): update dependency @types/node to v22.18.8 (#618) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.6.0
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]
v0.5.18
Changes
🚀 Base Path Support & Structured Logging Enhancements
Overview
Added comprehensive reverse proxy subfolder support with dynamic base path configuration, alongside standardized structured logging across all services for improved observability and debugging.
Key Updates
Base Path Support
- Reverse proxy integration: New
basePath
environment variable enables running Pulsarr under any subfolder path - Full application coverage: Client routing, API endpoints, static assets, and Swagger documentation all respect configured base path
- Runtime injection: Server dynamically injects base path configuration into client bundle
- Seamless operation: Automatic path handling for all client-server communication
- Zero configuration default: Works out-of-box at root path, optional for subfolder deployments
Structured Logging Improvements
- Consistent error format: Standardized error logging patterns across all services
- Enhanced searchability: Added descriptive messages to all structured log calls
- Better context: Improved debug logging with proper context objects and meaningful field names
- Pino best practices: Aligned with Pino v9 structured logging patterns for optimal parsing
- Service-wide coverage: Updated 36 files including plex-label-sync, watchlist workflow, database methods, and integrations
Technical Changes
Base Path Architecture
- URL normalization: New utility function for consistent base path handling
- Client API wrapper: Added helper function to automatically prepend base path to all API calls
- Router configuration: Enhanced React Router with dynamic basename support
- Asset resolution: Updated Vite configuration for runtime base path asset handling
Logging Refactor
- Major service updates: Comprehensive logging improvements in plex-label-sync (1,553 lines), watchlist services, and database methods
- Pattern consistency: All error logging follows structured format with context objects and descriptive messages
- Debug enhancements: Added missing log messages and improved context throughout codebase
- PostgreSQL integration: Enhanced configuration logging with structured format
Migration & Compatibility
No database migrations required - All changes are configuration and code improvements. Base path support is entirely optional via environment variable, defaulting to root path for existing deployments.
Full Changelog: v0.5.17...v0.5.18
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update
- Feat: Base Path Support & Structured Logging Enhancements (#617) @jamcalli
- refactor(logging): standardize error logging format across services (#616) @jamcalli
- Feat/base path support (#613) @jamcalli
- chore: pin node (#610) @jamcalli
🔄 Dependencies
- chore(deps): update react (#615) @renovate[bot]
- chore(deps): update docker/login-action digest to 5e57cd1 (#614) @renovate[bot]
- chore(deps): lock file maintenance (#612) @renovate[bot]
- chore(deps): update dependency @vitejs/plugin-react to v5.0.4 (#611) @renovate[bot]
- chore(deps): pin node.js to 22.20.0 (#609) @renovate[bot]
- chore(config): migrate renovate config (#608) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.18
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]
v0.5.17
Changes
🔧 Maintenance Release - Dependency updates and favicon improvements
Overview
Routine maintenance release with Node.js v22.20.0 upgrade and favicon implementation improvements.
Key Updates
UI Improvements
- Favicon implementation: Added proper favicon files (SVG and ICO) with static HTML references
- Code cleanup: Removed dynamic favicon JavaScript logic from main.tsx
Infrastructure
- Node.js upgrade: Updated to v22.20.0 across Docker, .nvmrc, and package.json
- Enhanced automation: Improved Renovate configuration for better dependency management
Migration & Compatibility
No user action required - all changes are applied automatically during standard Docker image update.
Full Changelog: v0.5.16...v0.5.17
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update
- Dependency updates and favicon improvements (#606) @jamcalli
- Chore/deps favicon fix (#598) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#605) @renovate[bot]
- chore(deps): update dependency tw-animate-css to v1.4.0 (#604) @renovate[bot]
- chore(deps): update dependency tsx to v4.20.6 (#603) @renovate[bot]
- chore(deps): update dependency @fastify/swagger to v9.5.2 (#602) @renovate[bot]
- chore(deps): update dependency @scalar/fastify-api-reference to v1.36.1 (#601) @renovate[bot]
- chore(deps): update react (#600) @renovate[bot]
- chore(deps): update dev dependencies (non-critical) to v20 (major) (#599) @renovate[bot]
- chore(deps): update node.js to v22.20.0 (#597) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.17
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]
v0.5.16
Changes
🐛 Bug Fix Release - Approval routing consistency and Discord integration fixes
Overview
Critical bug fix release addressing approval routing inconsistencies and Discord notification crashes. Ensures approval UI matches actual routing behavior.
Key Updates
Critical Bug Fixes
- Approval routing consistency: Fixed routing decisions showing incorrect values vs actual instance defaults
- Discord crash prevention: Added runtime safety for undefined content types
- Friend approval attribution: Fixed auto-approval workflow for friend-submitted content
Technical Changes
Content Router Improvements
- Default routing accuracy: Approval decisions now capture exact instance defaults used during routing
- Code deduplication: Extracted duplicate helper functions for better maintainability
- Value normalization: Quality profiles and routing parameters use consistent resolution logic
Runtime Safety
- Type checking: Added validation to prevent crashes from malformed data
- Documentation fixes: Corrected misleading code comments
Migration & Compatibility
No user action required - fixes are applied automatically.
Full Changelog: v0.5.15...v0.5.16
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update
Docker
docker pull lakker/pulsarr:0.5.16
Contributors
v0.5.15
Changes
🚀 Auto-Approved Content Tracking & Approval System Enhancements
Overview
Enhanced approval system with comprehensive content tracking, auto-approved status support, and improved Discord integration for complete visibility into all content additions.
Key Updates
Auto-Approved Content Tracking
- Complete audit trail: All content additions now tracked in approval system regardless of approval requirement
- Auto-approved status: Content bypassing manual approval automatically marked as "auto_approved"
- System user integration: Introduced system user (ID: 0) for tracking automated operations and RSS-sourced content
- User attribution: Auto-approved items properly attributed to actual users during reconciliation
- Real-time updates: SSE support for auto-approved items with live UI updates
Enhanced Approval Interface
- Improved filtering: Added support for filtering by auto-approved status
- Enhanced statistics: Approval stats header includes auto-approved content counts
- Better table display: Enhanced columns to show auto-approved items with appropriate styling
- Bulk operations: Updated bulk approval modals to handle auto-approved content
- Export functionality: Complete approval history including auto-approved items
Discord Integration Improvements
- Split button layout: Approval buttons reorganized into two rows of three to stay under Discord's limit
- Auto-approval notifications: Added Discord notifications for auto-approved content
- Previously rejected fix: Fixed bug preventing approval of previously rejected items
- Enhanced commands: Improved Discord approval command handling
Technical Changes
Database Architecture
- Migration 058: Added
auto_approved
status to approval workflow - Migration 059: Added system user support for automated operations
- Enhanced methods: Improved database methods for auto-approved content handling
- Better queries: Optimized approval queries with auto-approved status support
Content Router Enhancements
- Automatic record creation: Content router creates tracking records for all additions
- Improved attribution: Enhanced logic to attribute system-processed content to users
- Proposed routing fixes: Fixed bugs with proposed routing in approval workflow
- Workflow integration: Enhanced watchlist workflow for auto-approval tracking
Performance Optimizations
- SSE improvements: Better server-sent event handling for approval updates
- Database optimization: Improved methods for approval operations
- Memory efficiency: Enhanced approval processing with better resource management
- Error handling: Comprehensive error handling throughout approval system
Migration & Compatibility
Automatic migration - Two database migrations will run on upgrade. System user will be created and auto-approved tracking begins immediately. Existing approval records remain unchanged.
Full Changelog: v0.5.14...v0.5.15
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update
- feat: Implement comprehensive content tracking with auto-approved status support (#594) @jamcalli
- Feature/auto approved content tracking (#583) @jamcalli
- 📝 Add docstrings to
feature/auto-approved-content-tracking
(#584) @coderabbitai[bot] - fix: replace hardcoded timeout values with a constant for Plex API operations (#579) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#593) @renovate[bot]
- fix(deps): update react (#592) @renovate[bot]
- fix(deps): update dependency close-with-grace to v2.3.0 (#591) @renovate[bot]
- fix(deps): update dependency cron-parser to v5.4.0 (#590) @renovate[bot]
- fix(deps): update dependency better-sqlite3 to v12.4.1 (#589) @renovate[bot]
- fix(deps): update dependency @scalar/fastify-api-reference to v1.36.0 (#588) @renovate[bot]
- fix(deps): update dependency fastify to v5.6.1 (#586) @renovate[bot]
- fix(deps): update dependency @scalar/fastify-api-reference to v1.35.7 (#582) @renovate[bot]
- fix(deps): update build tools (#581) @renovate[bot]
- chore(deps): update dependency @types/node to v22.18.6 (#580) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.15
Contributors
@actions-user, @coderabbitai[bot], @jamcalli, @renovate[bot], coderabbitai[bot] and renovate[bot]
v0.5.14
Changes
Stability & Performance Release - Friend management cleanup and database optimization
Overview
Enhanced friend management system with automatic cleanup of removed friends and improved database operations for better data consistency and performance.
Key Updates
Critical Bug Fixes
- Friend cleanup automation: Automatically removes users who are no longer friends from database
- Data consistency protection: Prevents accidental deletion of primary token user during cleanup
- Timing optimization: Ensures token users are updated before friend cleanup to handle username changes
Database Improvements
- New user deletion methods: Added single and bulk user deletion with cascade support
- Enhanced error handling: Improved logging and error tracking for PostgreSQL and SQLite
- Failed operation tracking: Better visibility into which operations succeed or fail
Technical Changes
Database Schema Operations
- CASCADE deletion: Automatic cleanup of watchlist items when users are removed
- Bulk operations: Efficient multi-user deletion with detailed success/failure reporting
- Database-specific optimizations: Tailored behavior for PostgreSQL vs SQLite limitations
Friend Management System
- Automated pruning: Removes orphaned friend data when users are unfriended
- Primary user protection: Safeguards against accidental deletion of token owner
- Username change handling: Proper synchronization when Plex usernames are updated
Performance Improvements
- Reduced database bloat: Cleanup of stale friend data prevents unnecessary storage
- Optimized queries: Efficient bulk operations for large friend lists
- Memory usage: Better handling of large user datasets
Migration & Compatibility
No user action required - database operations are handled automatically during friend synchronization.
Full Changelog: v0.5.13...v0.5.14
Docker Image: lakker/pulsarr:latest
Upgrade Path: Standard Docker image update
- fix: implement automatic cleanup of removed friends from databas (#577) @jamcalli
- Fix/properly prune removed friends (#576) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#575) @renovate[bot]
- fix(deps): update dependency lucide-react to ^0.544.0 (#574) @renovate[bot]
- fix(deps): update react (#573) @renovate[bot]
- chore(deps): update dependency @types/node to v22.18.3 (#571) @renovate[bot]
- fix(deps): update dependency @scalar/fastify-api-reference to v1.35.5 (#572) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.14
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]
v0.5.13
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
- Real-time Log Viewer and Streaming Infrastructure (#569) @jamcalli
- Feature/client log viewer (#567) @jamcalli
- 📝 Add docstrings to
feature/client-log-viewer
(#568) @coderabbitai[bot] - CI updated and exclusions for imdb cron dataset (#552) @jamcalli
🔄 Dependencies
- chore(deps): lock file maintenance (#566) @renovate[bot]
- chore(deps): update dependency @biomejs/biome to v2.2.4 (#564) @renovate[bot]
- chore(deps): update actions/setup-node action to v5 (#563) @renovate[bot]
- chore(deps): lock file maintenance (#562) @renovate[bot]
- fix(deps): update dependency lucide-react to ^0.543.0 (#561) @renovate[bot]
- fix(deps): update tailwind css (#560) @renovate[bot]
- fix(deps): update dependency @scalar/fastify-api-reference to v1.35.2 (#559) @renovate[bot]
- fix(deps): update dependency dotenv to v17.2.2 (#558) @renovate[bot]
- chore(deps): update softprops/action-gh-release digest to 6cbd405 (#555) @renovate[bot]
- chore(deps): update dependency @biomejs/biome to v2.2.3 (#557) @renovate[bot]
- fix(deps): update dependency fastify to v5.6.0 (#556) @renovate[bot]
- fix(deps): update dependency vite to v7.1.5 [security] (#554) @renovate[bot]
- chore(deps): update node.js to v22.19.0 (#537) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.5.13
Contributors
@actions-user, @coderabbitai[bot], @jamcalli, @renovate[bot], coderabbitai[bot] and renovate[bot]