Changes
🚀 Feature Release - React Query & Apprise Improvements
Overview
Migrates Dashboard and Approvals UI to React Query for improved performance and loading states. Adds format-aware Apprise notification batching and TMDB deep links across all content notifications.
Key Updates
React Query Migration
- Dashboard overhaul: Date/limit filters, user popovers with stale-while-revalidate loading patterns
- Approvals feature: Server-side pagination, sorting, and multi-select filtering
- Shared user options: New
useUserOptionshook provides consistent user selection across features - Better loading states: Skeleton loaders and optimistic updates replace manual loading spinners
Apprise Notification Improvements
- Email Sender: Admins configure SMTP once, users enter just their email address instead of full Apprise URLs - works in Discord bot, user edit, and System Apprise URL fields
- Format-aware batching: HTML notifications sent separately from text-native services (Discord, Telegram, Slack) - prevents raw HTML appearing in text channels
- Format detection cache: Reduces redundant Apprise API calls with 24-hour TTL
- Standardized text formatting: Clean, consistent plain text output for services that don't support HTML
- TMDB deep links: All content notifications now include direct links to TMDB (movies, shows with season/episode support)
First-Start Experience
- Checklist dialog: New users see a guided checklist before initial sync to ensure proper configuration
- Version display: App version now shown in header bar for easier troubleshooting
Bug Fixes
- Plex label sync: Case-insensitive label comparisons prevent duplicate labels (e.g., "pulsarr-user-john" vs "Pulsarr-User-John")
- Webhook modal: Auth header fields now visible when editing endpoints with existing headers
- Approval filters: Multi-select enabled for content type and triggered-by filters
- SQL injection prevention: LIKE wildcards properly escaped in approval search queries
- Modal confirmations: Async handlers awaited before closing modals to prevent race conditions
Technical Changes
New Hooks & Utilities
useApprovalModalActions- Extracted approval action logic from componentsuseWorkflowMutations- Centralized workflow start/stop mutationsgetTmdbUrl- Utility for generating TMDB deep links with full test coverage
Refactoring
- Removed
withMinLoadingDurationwrapper in favor of React Query mutation states - Consolidated duplicated code across approvals feature
- Renamed
utilities/stores/toutilities/store/for consistency
Migration & Compatibility
Docker users
docker pull lakker/pulsarr:latestManual installation
git pull origin master
npm install
npm run migrate
npm run build
npm run start:prodDatabase migrations (automatic on startup):
- 075: Adds
appriseEmailSenderconfig field for simplified email notifications
Full Changelog: v0.8.3...v0.8.4
Docker Image: lakker/pulsarr:0.8.4
- Feat: React Query & Apprise Improvements (#839) @jamcalli
- Feature/apprise global from email (#840) @jamcalli
- Feature/apprise notification cleanup (#838) @jamcalli
- Feature/UI react query approvals (#836) @jamcalli
- Feature/UI react query dashboard (#833) @jamcalli
🔄 Dependencies
- chore(deps): update dependency @scalar/fastify-api-reference to v1.40.9 (#835) @renovate[bot]
- chore(deps): update dependency @fastify/compress to v8.3.1 (#834) @renovate[bot]
- chore(deps): update dependency @types/pg to v8.16.0 (#831) @renovate[bot]
- chore(deps): update tailwind css (#830) @renovate[bot]
- chore(deps): update dev dependencies (non-critical) to v4.0.16 (#828) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.8.4
Contributors
@actions-user, @jamcalli, @renovate[bot] and renovate[bot]