Pulsarr

Pulsarr

Docker app from sp00ks' Repository

Overview

Pulsarr is a real-time Plex watchlist monitoring, routing, and notification center that bridges Plex watchlists with Sonarr and Radarr. Features include smart content routing, approval workflows with quota management, Discord bot integration, multi-user support, and comprehensive analytics - all automated from within the Plex App itself.
Pulsarr Logo

Pulsarr

Real-time Plex watchlist monitoring, routing, and notification center

Version License Bun Status Discord Docker Pulls Docker Image Size GitHub Stars


Pulsarr bridges Plex watchlists with Sonarr and Radarr for real-time media monitoring and automated content acquisition, all from within the Plex app, no extra logins required.

Features include multi-user watchlist sync, intelligent content routing, approval workflows with quotas, and notifications via Discord, Plex mobile push, and Apprise.

Dashboard

📚 Documentation

Full documentation is available at: https://jamcalli.github.io/Pulsarr/

API Documentation

Our REST API is fully documented and accessible in two ways:

🚀 Quick Start

Docker Installation (Recommended)

  1. Create a .env file:
# Your timezone
TZ=America/Los_Angeles
  1. Create docker-compose.yml:
services:
  pulsarr:
    image: lakker/pulsarr:latest
    container_name: pulsarr
    ports:
      - "3003:3003"
    volumes:
      - ./data:/app/data
    environment:
      - PUID=1000
      - PGID=1000
    restart: unless-stopped
    env_file:
      - .env
  1. Pull and start the service:
docker compose pull && docker compose up -d
  1. Access the web UI at http://your-server:3003 to complete setup.

Synology NAS / Legacy Systems: If you're running on a Synology NAS or a system with Linux kernel < 4.11, use lakker/pulsarr:node instead. This alternative image uses Node.js runtime instead of Bun, avoiding kernel compatibility issues. Both images are functionally identical.

Native Installation

Standalone builds with easy installers are available for Linux, macOS, and Windows. No Docker or runtime install required.

Platform Install Method
Linux curl -fsSL https://raw.githubusercontent.com/jamcalli/Pulsarr/master/scripts/installers/linux/install.sh | sudo bash (automatically selects baseline variant for older CPUs without AVX2)
Windows Download and run pulsarr-vX.X.X-windows-x64-setup.exe from the latest release (use baseline variant for older CPUs without AVX2)
macOS Download pulsarr-vX.X.X-macos-{arch}.dmg from the latest release

See the Native Installation Guide for detailed instructions, service management, and manual options.

Database Options

Pulsarr uses SQLite by default but can also be configured to use PostgreSQL.

See the configuration documentation for PostgreSQL setup details.

Hosted Deployment Options

ElfHosted offers managed Pulsarr hosting with pre-configured media server bundles. 33% of every Pulsarr subscription supports the project.

✨ Key Features

  • Real-time Monitoring: Instant watchlist updates for Plex Pass users (5-minute staggered polling for non-Pass users)
  • Smart Content Routing: Build rules with AND/OR logic using genre, user, language, year, certification, season, IMDb/RT/TMDB ratings, or streaming service. Rules can require approval or bypass quotas
  • Approval & Quota System: Administrative approval workflows with configurable user quotas (daily/weekly/monthly limits)
  • Plex Label Sync: Automatically sync user watchlists and Radarr/Sonarr tags as Plex labels with real-time webhook updates
  • Multi-Instance Support: Distribute content across multiple Sonarr/Radarr instances with intelligent synchronization
  • Multi-User Support: Monitor watchlists for friends and family with granular permissions
  • Discord Bot Integration: Complete approval management directly from Discord with interactive commands
  • Flexible Notifications: Discord bot, Plex mobile push, webhooks, and 80+ services via Apprise
  • Advanced Lifecycle Management: Watchlist-based or tag-based deletion with playlist protection
  • Watchlist Exclusions: Prevent specific watchlist items from being routed to Sonarr/Radarr
  • Plex Session Monitoring: Auto-search for next seasons when users near season finales
  • User Tagging: Track who requested what content in Sonarr/Radarr
  • Comprehensive Analytics: Detailed dashboards with usage stats, genre analysis, and content distribution
  • Automatic Plex Updates: Configures webhooks for instant library refreshes
  • Developer-Friendly API: Full REST API with interactive documentation

Community Integrations

Transparency

Pulsarr started in early 2024 while I was home with a newborn, wanting to explore what AI coding tools could actually do. Watchlistarr had some bugs I wanted to fix, but it was written in Scala and I had no idea how to work with it, so I used AI to help me rewrite it in TypeScript instead. I threw together a basic UI, posted it, and didn't think much of it. The conversation around AI-assisted development has shifted a lot since then, and I think it's important to be upfront about how this project is built.

I'm not a software engineer by trade and I used this project as a way to learn. I didn't expect it to become what it is. Over the past 16 months I've kept developing, supporting, and iterating on it using my own judgment and research, with AI tools playing a role throughout. Every decision about architecture, features, and direction is my own, and everything is reviewed before it ships. If you ever spot anything I've missed or that's cause for concern, please reach out.

I take security seriously. Renovate keeps dependencies current, auth follows Fastify best practices, and all endpoints are protected by default. I'm always learning and welcome the feedback.

Contributing

We welcome contributions! Please see our Contributing Guidelines for details on:

  • Fork and branch naming conventions
  • Development workflow
  • Pull request guidelines

💬 Support

Acknowledgements

License

Pulsarr is licensed under the GPL. See the LICENSE file for details.

Repository Activity

Repobeats analytics

Star History

Star History Chart

Contributors

Contributors
Built with ❤️ for the self-hosted community

Install Pulsarr on Unraid in a few clicks.

Find Pulsarr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Pulsarr Review the template variables and paths Click Install

Requirements

Plex, Sonarr, and Radarr

Download Statistics

643,695
Total Downloads
71,456
This Month
68,181
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
lakker/pulsarr:latest
Last Updated2026-06-06
First Seen2025-05-05

Runtime arguments

Web UI
http://[IP]:[PORT:3003]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

PUIDVariable

User ID the container runs as

Default
99
Value
99
PGIDVariable

Group ID the container runs as

Default
100
Value
100
WebUI PortPorttcp

Port to access the web UI

Target
3003
Default
3003
Value
3003
App Data PathPathrw

Path for configuration files, database, and logs

Target
/app/data
Default
/mnt/user/appdata/pulsarr
Value
/mnt/user/appdata/pulsarr
TimezoneVariable

Timezone in TZ format (e.g., America/New_York, Europe/London)

Target
TZ
Default
America/Los_Angeles
Value
America/Los_Angeles
Secure CookiesVariable

Set to true if accessing Pulsarr through HTTPS (reverse proxy)

Target
cookieSecured
Default
false
Value
false
Base PathVariable

URL subpath when behind a reverse proxy (e.g., /pulsarr)

Target
basePath
Default
/
Value
/
Authentication MethodVariable

Authentication mode: required, requiredExceptLocal, or disabled

Target
authenticationMethod
Default
required
Value
required
Allow IframesVariable

Allow embedding in Organizr, Homarr, Homepage, etc.

Target
allowIframes
Default
false
Value
false
Apprise API URLVariable

Apprise API server URL (e.g., http://apprise:8000). Enables Apprise notifications when set.

Target
appriseUrl
Enable Request LoggingVariable

Log all HTTP requests - useful for debugging reverse proxy issues

Target
enableRequestLogging
Default
false
Value
false
Database TypeVariable

Database type: sqlite or postgres

Target
dbType
Default
sqlite
Value
sqlite
PostgreSQL Connection StringVariable

Full connection string (e.g., postgres://user:pass@host:5432/pulsarr). Supersedes host, port, database, user, and password options if set.

Target
dbConnectionString
PostgreSQL HostVariable

PostgreSQL server hostname (only if dbType=postgres)

Target
dbHost
Default
localhost
Value
localhost
PostgreSQL PortVariable

PostgreSQL server port (only if dbType=postgres)

Target
dbPort
Default
5432
Value
5432
PostgreSQL DatabaseVariable

PostgreSQL database name (only if dbType=postgres)

Target
dbName
Default
pulsarr
Value
pulsarr
PostgreSQL UserVariable

PostgreSQL username (only if dbType=postgres)

Target
dbUser
Default
postgres
Value
postgres
PostgreSQL PasswordVariable

PostgreSQL password (only if dbType=postgres)

Target
dbPassword