This release includes 1 security fix for security teams reviewing exposed deployments.
Summary
AI summaryBroad release touches XC Catch-up (Timeshift) Support, EPG & Guides, Live Streaming & Failover, and π Security.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Hardened authentication/file-serving: prevents path traversal, hides passwords, restricts admin-only APIs. Hardened authentication/file-serving: prevents path traversal, hides passwords, restricts admin-only APIs. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Feature | Medium |
Adds XC catchβup (timeshift) playback support for Xtream Codes providers. Adds XC catchβup (timeshift) playback support for Xtream Codes providers. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Feature | Medium |
VOD playback now fails over across M3U accounts when preferred account is at capacity. VOD playback now fails over across M3U accounts when preferred account is at capacity. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Feature | Low |
Supports `.xz` compression for EPG sources and M3U playlists. Supports `.xz` compression for EPG sources and M3U playlists. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Performance | Low |
Caches system and proxy settings to avoid perβstream DB hits. Caches system and proxy settings to avoid perβstream DB hits. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Performance | Low |
Optimizes M3U and XC refreshes for large accounts, reducing memory usage and latency. Optimizes M3U and XC refreshes for large accounts, reducing memory usage and latency. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Bugfix | High |
Fixes hung proxy sessions when deleting a channel during playback. Fixes hung proxy sessions when deleting a channel during playback. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Bugfix | High |
Prevents exhaustion of perβworker DB connections causing unrelated pages to hang. Prevents exhaustion of perβworker DB connections causing unrelated pages to hang. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Bugfix | Medium |
Corrects VOD sessions leaving provider connection slots occupied until restart. Corrects VOD sessions leaving provider connection slots occupied until restart. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
| Bugfix | Medium |
Ensures Copy URL on Channels table returns plain stream URLs without player parameters. Ensures Copy URL on Channels table returns plain stream URLs without player parameters. Source: llm_adapter@2026-07-20 Confidence: medium |
β |
Full changelog
β¨ New Features
XC Catch-up (Timeshift) Support
- Dispatcharr now proxies catch-up / timeshift playback from Xtream Codes providers to IPTV clients, so viewers can watch recent programmes from supported channels. (Closes #133) - Thanks @cedric-marcoux:
- Path-style (
/timeshift/...) and query-style (/streaming/timeshift.php) catch-up URLs are both supported - Thanks @dillardblom - Catch-up sessions appear on the Stats page in dedicated connection cards (separate from live and VOD), with channel logo, programme preview, playback position, bitrate, and a stop button
- Cards update in real time, advance to the next EPG programme when playback continues past the original show, and can notify you when sessions start or end
- Channels and streams with catch-up show a history icon in the Channels and Streams tables (with archive days in the tooltip when known), plus an Only Catch-up filter
- Multi-provider failover walks catch-up streams in channel order (like live playback), preferring archives that cover the requested programme age
- Catch-up respects provider connection limits, per-channel access rules, and user stream limits
- Guide output advertises catch-up availability (
tv_archive/ archive duration) and can auto-detect how many previous days to include in XMLTV (overridable per user or via URL) - Native apps can start, update playhead/pause state, and end catch-up sessions through a REST API that returns a playback URL suitable for headerless video players
- Path-style (
- Enable Catchup can be turned off globally in System Settings, or per user on the Permissions tab, to block timeshift playback and stop advertising catch-up to XC clients while still showing catch-up indicators in the web UI
XZ-Compressed EPG and M3U Sources
- EPG sources and uploaded M3U playlists can now use
.xzcompression alongside.gzand.zip. Auto-import from/data/epgsalso picks up.xzfiles. (Closes #1414) - Thanks @MotWakorb
π Changes & Improvements
VOD Playback
- VOD playback now fails over across M3U accounts when the preferred account is at capacity, trying other accounts that carry the same title in priority order (matching live-channel behaviour). Previously a full account returned an error even when another account had free slots. (Closes #1385) - Thanks @francescodg89-crypto
Channels & URLs
- The channel list API paginates when only
page_sizeis provided (page 1). Omitting bothpageandpage_sizestill returns the full list for legacy clients and plugins - Stream, M3U, and EPG URLs with Docker-style hostnames that include underscores (e.g.
http://my_service/) are now accepted. - Thanks @recurst
Stats
- The Stats page loads live, VOD, and catch-up connection data from a single combined stats endpoint instead of separate requests
Performance
- System and proxy settings used on every stream request are cached so hot paths no longer hit the database on each call
- M3U and XC refreshes on large accounts are faster and use less memory: unchanged streams are touched lightly, filters compile once, playlists stream from disk, and workers reclaim memory after large jobs
Frontend Testing
- Unit test coverage was extended across table components, plugins, backups, settings, forms, modals, Connect, and Plugin Browse. - Thanks @nick4810
π Bug Fixes
Live Streaming & Failover
- Fixed deleting a channel while it was playing leaving a hung proxy session or stuck provider connection. Manual delete can optionally leave playback running; auto-sync still stops sessions before removing channels. Stats stop still releases connection slots even if the channel row is already gone (Fixes #870)
- Fixed long output-profile and fMP4 remux/transcode sessions (over about an hour) losing Redis coordination keys and failing for late joiners or format/profile switches
- Fixed failed channel startups leaving ghost "initializing" sessions that blocked playback with a permanent connection-stalled error and never failed over
- Fixed live streaming paths that could exhaust per-worker database connections and cause unrelated pages (including XC/
player_api) to hang under load (Fixes #1418) - Fixed channels staying stuck on buffering in Stats after a buffering-timeout failover even after the new stream recovered (Fixes #1449)
- Fixed the default VLC stream profile not failing over when the upstream URL could not be opened (Fixes #1415)
- Fixed isolated provider disconnects hours apart exhausting the retry budget and switching streams unnecessarily. Retries now reset after 30 minutes of stable playback; three failures within that window still trigger failover
- Fixed failover jumping back to the first stream after a stable session on a backup. Rotation now continues in channel order (matching manual next-stream)
- Fixed preview/join failing with a server error when attaching to an active channel on a different worker while an output profile was starting
- Fixed stream switches in multi-worker setups reporting success or leaving status stuck on the old stream. Switches now wait for confirmation and update the active stream correctly (Fixes #1412)
VOD
- Fixed VOD sessions (especially Jellyfin/FFmpeg clients using concurrent byte-range requests) leaving provider connection slots occupied until restart (Fixes #1426)
Channels & UI
- Fixed Copy URL on the Channels table including web-player output profile parameters. Copied links are now plain stream URLs suitable for external players; Watch still applies player preferences
- Fixed API error toasts dumping raw HTML error pages when the backend returned a 500/502/504. Errors now show a short, readable message (Fixes #1261) - Thanks @nagelm
- Fixed the cron builder's every-6-hours / every-12-hours presets saving the wrong expression (e.g. once daily at hour 6 instead of every 6 hours). Hourly schedules now include an Interval control so step patterns are preserved (Fixes #1320)
- Fixed Auto Channel Sync Find and Replace preview showing literal
$1instead of the substituted capture group, and previewing changes the sync would skip. Preview and rename now match (Fixes #1332) - Thanks @CodeBormen - Fixed bulk channel delete, drag reorder, and inline channel-number edits clearing selection or continuing before the table finished refreshing. - Thanks @nick4810
- Fixed Backup Manager timestamps not updating when date/time display preferences change until the page was reloaded
EPG & Guides
- Fixed programme times shifting in XMLTV output when PostgreSQL's server timezone was not UTC (common with certain Docker timezone mounts). (Fixes #651) - Thanks @nagelm
- Fixed EPG channel parsing progress showing values over 100% when the guide grew larger than the previous import
- Fixed full EPG refreshes racing with per-channel parses, which could wipe or skip guide data for channels matched during a refresh
- Fixed a failed per-channel EPG parse wiping the previous guide for that channel. Failed parses now leave the existing programmes in place
- Fixed cold EPG output rebuilds freezing login, API, and HDHomeRun requests on the same worker until the rebuild finished (Fixes #1396)
M3U, XC & VOD Refresh
- Fixed XC refreshes that returned no live streams (transient provider failure or empty categories) deleting the entire auto-created channel lineup. Empty results now abort safely and keep the existing channels (Fixes #1377) - Thanks @Jacob-Lasky
- Fixed VOD refreshes that returned an empty category list wiping group selections and movie relations, leaving all VOD groups unselected after a later successful refresh
- Fixed M3U refresh completion counts treating every existing stream as "updated". Counts now reflect real metadata changes, and reports include streams marked stale versus removed
- Fixed M3U group processing failing the whole refresh after a single poisoned database connection instead of retrying once
- Fixed XC live streams, panel API, and authenticated XMLTV export crashing when a visible channel had no channel number. Those channels now receive a free number in output
Plugins & Background Workers
- Fixed plugin discovery in multi-worker setups repeatedly reloading every plugin on connect/disconnect events, leaking background threads and degrading workers until restart (Fixes #1452)
- Fixed Celery background workers sharing the web process database pool, which could corrupt Postgres sessions under concurrent tasks (e.g. M3U/EPG refreshes failing with transaction errors) (Fixes #1404)
- Fixed worker startup paths holding a database connection permanently from process boot, reducing available connections for streaming and API traffic
API Documentation
- Fixed Swagger/OpenAPI schema generation failing or hanging when multiple requests hit the schema endpoint at once (for example opening Swagger UI)
π Security
- Hardened authentication and file-serving boundaries:
- Logo and VOD logo cache endpoints no longer allow path traversal outside
/data/logos; empty logo URLs return 404 instead of fetching remotely - EPG source file upload API is admin-only and rejects filenames that escape the uploads directory
- M3U account passwords are omitted from API responses for non-admin users
- Channel bulk rename, EPG apply actions, channel reorder/cleanup, recording control actions, and Connect integration APIs now require admin
- Creating or modifying system notifications requires admin; users can still list and dismiss notifications visible to them
- Unused unauthenticated legacy stream routes were removed; live playback continues via the standard proxy stream URL
- Logo and VOD logo cache endpoints no longer allow path traversal outside
Breaking Changes
- Removed unauthenticated legacy stream routes; live playback must use the standard proxy stream URL.
Security Fixes
- Hardened authentication boundaries: logo/VOD cache endpoints block path traversal, EPG upload API limited to admins, M3U passwords hidden from nonβadmin users, several adminβonly actions (bulk rename, EPG apply, channel reorder, recording control, Connect integration) now require admin, system notification creation/modification restricted to admin.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Dispatcharr
Open-source IPTV stream management platform for consolidating multiple providers, managing EPG data, and sharing content with advanced control features
Related context
Related tools
Beta — feedback welcome: [email protected]