Changes
🚀 Feature Release - Watchlist Caps & Performance
Overview
Adds watchlist cap limits that restrict total items per user independent of periodic quotas, with full notification support across all channels.
Key Updates
Watchlist Caps (closes #1006)
- Per-user item caps: Limit how many movies or shows a user can have on their watchlist at any time, enforced at both routing and sync time
- Full notification support: Discord (webhook + DM), Apprise, and native webhooks via the new
quota.cap_reachedevent - Quota removal UX: Confirmation dialog shows held request counts with an option to auto-approve them
- New user defaults & bulk edit: Configure default caps for new users and apply caps across multiple users at once
Performance & Infrastructure
- Background animations: Converted to HTML5 Canvas with 20fps throttle, reducing CPU/GPU overhead significantly
- Docker: Added
tinias PID 1 for proper zombie reaping and signal forwarding
Bug Fixes
- Orphaned approval cleanup: Delete sync cleans up approved records whose content no longer exists in Radarr/Sonarr
- Bulk tagging: Fixed concurrency limits and switched to add/remove mode instead of replace
Migration & Compatibility
Database migration required - runs automatically on startup. Adds watchlist_cap column to user_quotas and watchlist cap default/notification config fields to configs. Existing quotas are unaffected - caps default to null (disabled).
Docker users
docker compose pull && docker compose up -dNative installer users (Linux/macOS/Windows)
- Linux:
curl -fsSL https://raw.githubusercontent.com/jamcalli/Pulsarr/master/scripts/installers/linux/install.sh | sudo bash - Windows: Download the latest installer from Releases
- macOS: Download the latest
.dmgfrom Releases
Manual installation
git pull origin master
bun install
bun run build
bun run migrate
bun run start:prodFull Changelog: v0.12.2...v0.13.0
Docker Images: lakker/pulsarr:0.13.0 | lakker/pulsarr:0.13.0-node
🚀 Features
- feat(watchlist-caps): add watchlist cap limits with notifications and performance improvements (#1043) @jamcalli
- feat(watchlist-caps): add watchlist cap system with notifications (#1039) @jamcalli
- refactor(quota): add initial quota cap infrastructure and UI consolidation (#1020) @jamcalli
🐛 Bug Fixes
- fix(services): limit bulk tag concurrency and deduplicate SSE cleanup (#1033) @jamcalli
- fix(user-tags): use add/remove mode instead of replace for bulk tagging (#1032) @jamcalli
- fix(quota): fix quota bypass, approval cleanup, and deletion confirmation (#1031) @jamcalli
- fix(docker): add tini for proper PID 1 zombie reaping (#1022) @jamcalli
🧰 Maintenance
- chore(deps): lock file maintenance (#1042) @renovate[bot]
- chore(deps): update build tools (#1037) @renovate[bot]
- chore(deps): update oven-sh/setup-bun digest to ecf28dd (#1036) @renovate[bot]
- chore(deps): update release-drafter/release-drafter digest to 6a93d82 (#1040) @renovate[bot]
- chore(deps): update github artifact actions (major) (#1038) @renovate[bot]
- chore(deps): update dependency lucide-react to ^0.577.0 (#1041) @renovate[bot]
- chore(deps): update actions/setup-node digest to 53b8394 (#1035) @renovate[bot]
- feat(watchlist-caps): add watchlist cap system with notifications (#1039) @jamcalli
- docs: animation perf optimizations and docs cleanup (#1029) @jamcalli
- chore(deps): lock file maintenance (#1028) @renovate[bot]
- chore(deps): update oven/bun docker tag to v1.3.10 (#1027) @renovate[bot]
- chore(deps): update dependency bun to v1.3.10 (#1026) @renovate[bot]
- chore(deps): lock file maintenance (#1017) @renovate[bot]
- chore(deps): update node.js to v24.14.0 (#1019) @renovate[bot]
- chore(deps): update dependency @biomejs/biome to v2.4.4 (#1015) @renovate[bot]
- refactor(quota): add initial quota cap infrastructure and UI consolidation (#1020) @jamcalli
- refactor(base-path): simplify to native tag approach (#1018) @jamcalli
- chore(deps): update dependency lucide-react to ^0.575.0 (#1016) @renovate[bot]
⚡ Performance
🔄 Dependencies
- chore(deps): lock file maintenance (#1042) @renovate[bot]
- chore(deps): update build tools (#1037) @renovate[bot]
- chore(deps): update oven-sh/setup-bun digest to ecf28dd (#1036) @renovate[bot]
- chore(deps): update release-drafter/release-drafter digest to 6a93d82 (#1040) @renovate[bot]
- chore(deps): update github artifact actions (major) (#1038) @renovate[bot]
- chore(deps): update dependency lucide-react to ^0.577.0 (#1041) @renovate[bot]
- chore(deps): update actions/setup-node digest to 53b8394 (#1035) @renovate[bot]
- chore(deps): lock file maintenance (#1028) @renovate[bot]
- chore(deps): update oven/bun docker tag to v1.3.10 (#1027) @renovate[bot]
- chore(deps): update dependency bun to v1.3.10 (#1026) @renovate[bot]
- chore(deps): lock file maintenance (#1017) @renovate[bot]
- chore(deps): update node.js to v24.14.0 (#1019) @renovate[bot]
- chore(deps): update dependency @biomejs/biome to v2.4.4 (#1015) @renovate[bot]
- chore(deps): update dependency lucide-react to ^0.575.0 (#1016) @renovate[bot]
Docker
docker pull lakker/pulsarr:0.13.0
Synology NAS / Legacy Systems (Linux kernel < 4.11):
docker pull lakker/pulsarr:0.13.0-node
Contributors
@jamcalli, @renovate[bot] and renovate[bot]