Release notes
Newest first. Every release is published on Docker Hub as martitoci/podvault with a matching tag (1.3.1, 1.3.0, 1.2.0, 1.1.0, 1.0.0), and latest always points to the newest one. See Docker → Updating to upgrade.
October 25, 2026 · Fixes, and PodVault is now MIT-licensed.
- “Download latest” really downloads the latest episode. Feed dates were sorted as text (by weekday name), so “latest” could pick an older episode. The same wrong order affected bulk downloads, the queue’s “up next” list, episode lists and the JSON export. Everything now sorts by the real publication date, newest first.
- Readable episode descriptions: the episode page shows the feed’s description as clean text with line breaks and bullet lists instead of raw HTML tags.
- Full dates in episode lists (
2026-10-23, or#717for numbered shows) instead of a truncatedWed, 31 Ju. - Schedule page shows each podcast’s name and cover art.
- License: PodVault is released under the MIT License. Use, copy, modify and share it freely, as long as the credit stays.
- Documentation and examples now live at podvault.dev.
October 18, 2026 · A real sign-in page.

- Sign-in page replaces the browser’s Basic-auth popup when
PODVAULT_USERNAMEandPODVAULT_PASSWORDare set. You land back on the page you asked for after signing in. - Sign out button in the sidebar, next to your username and the version.
- “Keep me signed in for 30 days” (on by default). Unticked, the session ends when the browser closes, or after 12 hours at most.
- Sliding sessions: the session renews itself while you use PodVault, including during long audio playback, so it only expires after that long without using it.
- Login lockout: after 5 wrong passwords from the same address, sign-in is locked for 30 seconds, doubling with each further miss up to 15 minutes.
- Changing the password (or username) signs every browser out.
- Sessions use signed,
HttpOnly,SameSite=Laxcookies, markedSecurebehind an HTTPS proxy. No session store and no new dependencies. - Scripts and
curlcan still use HTTP Basic auth (curl -u admin:password …). - If only one of the two login variables is set,
podvault servenames the missing one at startup and the sign-in page explains the problem, instead of running unprotected. - When a session expires, background actions (job progress, the player, the settings preview) send you to the sign-in page instead of failing silently.
October 17, 2026 · OPML and your own podcast feeds.
- OPML import: bring your subscriptions from any podcast app (web: Library → Import, CLI:
podvault opml-import file.opml). It’s idempotent, so feeds you already have are skipped, invalid ones are reported, and nested folders are flattened. - OPML export of your original subscriptions (web, or
podvault opml-export). - PodVault’s own podcast feeds: every archived podcast gets an RSS feed (
/podcasts/<name>/feed.xml) served from your downloaded copies, with original GUIDs, local artwork, anditunes:block. Subscribe in Apple Podcasts, Overcast, Pocket Casts, AntennaPod… including episodes the publisher has deleted. - Archive feeds (OPML): one file listing every PodVault feed, for subscribing to the whole archive in one step.
- With the login on, feed URLs carry a
?token=that opens only the feeds and their audio, never the rest of the interface. Changing the password revokes old feed URLs (or set a fixedPODVAULT_FEED_TOKEN). - New
PODVAULT_BASE_URLfor the address used inside feeds (e.g. behind a reverse proxy). - Fix:
PODVAULT_FEEDS_FILEis now honored everywhere. In Docker, feeds added from the web UI used to be written outside the data volume and lost on rebuild. - Fix: feed items are sorted by real date instead of alphabetically.
October 17, 2026 · Hardening: login, every audio format, database backups.
- Optional web login with
PODVAULT_USERNAME/PODVAULT_PASSWORD, covering every page, action, audio stream and export. Credentials are compared in constant time.podvault servewarns when bound to a non-local address without a login. - New
/healthzendpoint (no login needed). The DockerHEALTHCHECKuses it. - Any podcast audio format: episodes are saved with their real extension (MP3, M4A/M4B, Ogg/Opus, FLAC…) instead of always
.mp3. MP3 gets ID3 tags, M4A/M4B/MP4 get the equivalent MP4 tags and cover art, and other formats are archived untagged. Existing files are recognized, so nothing is re-downloaded. - The in-browser player sends the correct MIME type for each format.
- Automatic database backups using SQLite’s online backup API, at most once per
PODVAULT_BACKUP_INTERVAL_HOURS(24), before feed syncs and on the scheduler tick, keeping the newestPODVAULT_BACKUP_KEEP(7). Newpodvault backupandpodvault backup --list. - A database that fails validation is now copied aside as
…-corrupt.dbinstead of being deleted.
February 2026 · First public release.
The first public Docker image, martitoci/podvault.
- Add podcasts by RSS URL or Apple Podcasts link. Metadata for every episode is stored in SQLite, and the original RSS XML is saved next to each episode.
- Downloads: all episodes, the latest one, or one specific episode, run as background jobs with pause / resume / cancel / skip (checked between episodes, so finished files are always kept).
- Configurable folder and file naming with templates (
{podcast_name},{episode_title},{episode_number},{season_number},{year},{month},{day},{date},{episode_label}), validated against sample episodes with a live preview.podvault migrate-layoutreorganizes existing files after a template change (dry run by default). - Complete ID3 tags and embedded cover art. Custom episode names rewrite the tag and rename the files on disk.
- Per-podcast auto-refresh (6h / 12h / 24h / 7d) with optional automatic download of new episodes.
- In-browser player with cover art, seeking, skip ±, playback speed, and prev/next.
- Archive safety: SHA-256 integrity checks that detect silently corrupted files; episodes are never deleted when they leave the feed, just marked local-only; verification that every downloaded file is still on disk; JSON export of the whole library inventory.
- Web interface: Library (stats, cover grid, filters), Podcast and Episode detail, Queue (live progress, estimated speed/ETA), Schedule, Activity (job history), Storage (disk usage, largest podcasts, health checks with one-click fixes), Settings (naming templates, environment). Dark theme, responsive layout, and keyboard-accessible controls.
- Complete CLI for everything the web UI does (
podvault --help). - Docker: a single container with a single
/app/datavolume, configured throughPODVAULT_*environment variables.