Architecture
Pulsarr uses a full-stack architecture designed for reliability and performance:
Backend
- Fastify: High-performance API server with plugin system
- SQLite: Lightweight database for storing user, watchlist, and configuration data
- TypeScript: Type-safe code for better reliability and maintainability
Frontend
- React: Component-based UI for responsive user experience
- Tailwind CSS: Utility-first styling for consistent design
- Vite: Modern build tool for fast development and optimized production
Integration Points
- Plex API: Monitors watchlist changes through RSS feeds, token syncs, and graphql calls
- Sonarr/Radarr APIs: Manages content acquisition across multiple instances
- Discord API: Delivers notifications through custom bot and webhooks
How It Works
Content Routing
Pulsarr uses an intelligent workflow to process and route content:
- Content Detection:
- Plex Pass: Real-time monitoring via RSS feeds
- Non-Plex Pass: Regular polling every 20 minutes
- User Permissions: Verifies if the user has sync permissions enabled
- Content Analysis:
- Evaluates content metadata (genres, language, etc.)
- Applies configured routing rules
- Determines optimal target instance
- Instance Management: Routes content to appropriate instances based on rules
- Notification System: Sends configurable notifications when content is available
Notification Flow
The notification system is designed to be informative:
- Webhook Reception: Receives webhooks from Sonarr/Radarr when content is imported
- Smart Queuing: Groups multiple episodes from the same season to prevent notification spam (when importing non-season packs)
- Batch Processing: Intelligently batches season packs into single notifications
- User Targeting: Identifies users who have the show in their watchlist and have enabled notifications
- Multi-channel Delivery: Sends personalized notifications via Discord DMs, Apprise, and can send global grabs via webhooks and Apprise system notification endpoints
- Customizable Preferences: Each user can configure their notification preferences via Discord, or the admin can via the UI