1.4.0 (2026-07-10)
Tip
This release adds a significant fix to missing jobs: as a part of the startup procedure, the system checks if all sources have a corresponding slow/fast index job and restores it if it's missing.
Features
- [EXPERIMENTAL] let templates mark where channel artwork and NFOs are stored (279bebf, issue #141)
- requeue stuck jobs from the Diagnostics page instead of cancelling them (cbabc68)
Bug Fixes
- correct pending count for sources with no downloaded media (8675262)
- handle suffix Range requests and missing files when streaming media (e4c5a32)
- reschedule missing source indexing jobs on boot (beb6a16)
- restore the media search box after a LiveView reconnect (c447d21)
- skip download archive when the archive file cannot be written (5aac447)
- stop crashing when rendering 404 and 500 error pages (#154) (7b0bd7f)
- stop logging YouTube API keys (515eabf)
- stop losing in-flight source enable toggles on LiveView reconnect (6d9d184)
- stop the diagnostics page crashing when job queues aren't running (779080c)
- test all YouTube API keys and report which fail (347f0be)
- throttle job state broadcasts to reduce dashboard query load (21555ae)
Chores
- add fast Docker test runner for local iteration (b976cf2)
- ci: bump ci-base image to sha-ba3e559 (a13ac24)
- ci: track hexpm/elixir base image versions with Renovate (ba3e559)
- deps: bump Erlang/OTP to 28.5.0.3 (cf681a2)
- deps: update dependency apprise to v1.12.0 (945105b)
- ignore runtime wiring and test support in coverage reporting (a8f6d76)
Documentation
- correct boot sequence responsibilities in CLAUDE.md (241be98)
Refactors
- remove unused Sources.IndexTableLive module (ba498c9)