Skip to content

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 #717 for numbered shows) instead of a truncated Wed, 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.

PodVault sign-in page with username, password and a “Keep me signed in for 30 days” checkbox

  • Sign-in page replaces the browser’s Basic-auth popup when PODVAULT_USERNAME and PODVAULT_PASSWORD are 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=Lax cookies, marked Secure behind an HTTPS proxy. No session store and no new dependencies.
  • Scripts and curl can still use HTTP Basic auth (curl -u admin:password …).
  • If only one of the two login variables is set, podvault serve names 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, and itunes: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 fixed PODVAULT_FEED_TOKEN).
  • New PODVAULT_BASE_URL for the address used inside feeds (e.g. behind a reverse proxy).
  • Fix: PODVAULT_FEEDS_FILE is 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 serve warns when bound to a non-local address without a login.
  • New /healthz endpoint (no login needed). The Docker HEALTHCHECK uses 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 newest PODVAULT_BACKUP_KEEP (7). New podvault backup and podvault backup --list.
  • A database that fails validation is now copied aside as …-corrupt.db instead 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-layout reorganizes 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/data volume, configured through PODVAULT_* environment variables.

PodVault v1.3.1 · GitHub · Docker Hub ·Report an issue

Built for home networks · No trackers · MIT License · © Carlos Medina