github madeofpendletonwool/PinePods 0.9.0
Version 0.9.0 - Video, CarPlay, Android Auto, and a Whole New Look

9 hours ago

Introducing PinePods 0.9.0 – one of the largest releases in the project's history, spanning over 220 commits across the entire stack. This one is packed: video podcast playback, a brand new native iOS audio engine with CarPlay, Android Auto support, a completely reworked web frontend, host following, and performance improvements you'll feel everywhere. There's a lot here, so grab a coffee.

⚠️ Important upgrade note (existing PostgreSQL users): New installs now default to PostgreSQL 18. If you're already running PinePods on Postgres 17, you cannot simply bump the image tag — a major Postgres version uses an incompatible on-disk format and postgres:18 will refuse to start against an older data directory. Your data is safe; it just needs a one-time upgrade. Use the new helper script deployment/docker/upgrade-postgres.sh (it takes a backup first, then upgrades in place), or follow the PostgreSQL upgrade guide. Always back up first — the upgrade is one-way.


🎬 Video Podcast Support

  • Full video playback – Video podcast feeds are now detected and played in a proper video player in the web app, with a polished, correctly-sized layout.
  • Smart media detection – The backend now detects whether an episode is audio or video and handles each appropriately throughout the app.

🍏 Brand New iOS Audio Engine + CarPlay

  • Native Swift audio player – iOS playback has been rebuilt from scratch as a true native audio layer. This means much better background audio, lock screen controls, and overall OS integration.
  • Lock screen & Control Center – Now Playing metadata and artwork show on the lock screen and Control Center, with proper play/pause/skip from headphones and the lock screen.
  • CarPlay – PinePods now registers as a CarPlay audio app with full Now Playing support, so you can browse and control playback right from your car's display.
  • Lock screen duration fix – Fixed a bug where the lock screen could show a wildly inflated episode length.

🤖 Android Auto & Better Media Controls

  • Android Auto support – Added media browser support so PinePods works in Android Auto and integrates cleanly with the system media controls.
  • Media3 / ExoPlayer rewrite – The Android player was rewritten to handle both audio and video streams reliably, fixing a number of playback edge cases.
  • Sleep timer – A new sleep selector widget was added alongside video playback on mobile.

⚡ Performance: Infinite Scroll & Pagination Everywhere

  • Infinite scroll feed – Your main feed now loads episodes progressively as you scroll instead of all at once, dramatically reducing load time and memory use for large libraries.
  • Pagination across the app – History, Queue, Saved, Playlists, Search, and Subscribed People all now load in pages rather than fetching everything up front — a huge win for big libraries on both web and mobile.
  • Faster everything – The web app's internal state was decomposed so the UI re-renders far less, making context menus, notifications, and list scrolling noticeably snappier.

🎧 Queue, Auto-Play & Serial Podcasts

  • Persistent queue panel – The queue is now a side panel visible from any page in the web app, with easier reorder/remove/clear controls.
  • Serial podcasts – Mark a podcast as "serial" and episodes auto-advance in order — perfect for narrative shows.
  • Auto-play next – Mobile now auto-plays the next episode when the current one finishes, and playlists continue playing through their episodes automatically.
  • Multi-select – Episode checkboxes were added for bulk queue management.

⬇️ Auto-Downloads

  • Per-podcast auto-download – Turn it on for a podcast and new episodes are automatically queued for download on refresh.
  • Available everywhere – Configurable from both the web Download Settings and the mobile podcast detail screen.

⭐ Favorites & 🔗 Shared Links

  • Podcast favorites – Mark any podcast as a favorite to surface it quickly, plus a favorite-categories section to spotlight the categories you care about. Favorites appear in the sidebar, podcast pages, and your stats.
  • Shared episode links – Generate shareable links to individual episodes, then manage them all from a new Shared Links settings page — list active links, delete them, or extend their expiration.

🔍 Search Overhaul

  • Rebuilt search – The search page was completely rebuilt with a modern, paginated interface and instant results (the old connection test that slowed things down is gone).
  • Episode search – You can now search within your subscribed library for specific episodes, not just podcasts. The mobile episode search screen was rebuilt to match.

🎨 Custom Themes & a Fresh New Look

  • Custom theme creator – A new settings page lets you build your own color themes from scratch.
  • Complete visual redesign – Settings pages, the sidebar, episode lists, podcast and episode pages, and the audio player all got a thorough visual refresh, with new layout options for how episodes are displayed.
  • Lighter & faster assets – Background images converted to WebP and the icon font slimmed down for quicker loads.

👤 Host Following & Discovery

  • Live host feed – Follow a podcast host and get a single chronological feed that aggregates every show they appear in.
  • Discover Hosts – A new discovery page surfaces top hosts, recently added hosts, and popular podcasts.
  • Faster and more reliable – Host feeds are now cached intelligently so visiting a prolific host's feed is quick and survives a cache restart. Hosts also now appear right on the mobile home screen.

🔑 OIDC / Single Sign-On Improvements

  • Proper mobile OIDC – Mobile login now uses a proper deep-link callback flow (pinepods://) instead of the old in-app browser workaround, with correct PKCE handling.
  • Expanded web settings – The OIDC settings page was significantly expanded with more configuration options.

📁 Local Podcasts & Media

  • Local podcast support – Add podcasts directly from a local directory on your server. PinePods browses the folder, detects audio files and cover art, and pulls metadata from tags.
  • Mounted libraries – A local media directory (/opt/pinepods/local-media) is now available for user-mounted podcast libraries, with a rescan option to pick up new files.

📴 Offline Action Queue (Mobile)

  • Work offline, sync later – Actions you take while offline (play, download, queue, etc.) are now queued and automatically synced when your connection returns, with a screen to view and manage pending actions.

💾 Backup & Restore Overhaul

  • Smoother restores – The server backup and restore flow was reworked, with a new restore overlay that shows live progress while a restore runs and a number of restore-path fixes under the hood.
  • Scheduled backups – Backups can run automatically on a schedule.

🔒 Security

  • SSRF protection – Server-side fetches of podcast artwork and episode media are now validated against a strict allowlist that blocks loopback, private, link-local, and cloud-metadata addresses — and re-checks on every redirect — so a malicious feed can't trick the server into reaching internal resources. (Thanks to @tonghuaroot for the contribution!)
  • Hardened auth – Rate limiting was wired into sensitive auth endpoints, and several smaller logging/auth hardening fixes landed across the backend and GPodder API.

🔄 GPodder Sync

  • More robust syncing – GPodder episode-action and subscription syncing were substantially reworked to be far more reliable, with better tracking of what's been added, removed, and played.

🌍 Internationalization

  • 36 languages – PinePods now ships potential translations for 36 languages, with several brought close to complete this cycle. Anything untranslated falls back to English, so the UI is always usable.
  • Want to help? – Please head over to Weblate and fill in any translations you can — it makes a real accessibility difference.

🐞 Fixes, Polish & Under the Hood

  • Episode artwork preference – Episode artwork now correctly respects your "use podcast cover" setting instead of always falling back to per-episode art.
  • Fully documented API – The entire backend API is now documented via OpenAPI, with interactive docs available at /api/docs.
  • Cleaner, leaner backend – Significant dead-code cleanup across the Rust API.
  • Smoother Docker – The container startup was rewritten for proper non-root execution (no more recursive permission fixes on every boot) and is friendlier to NFS/read-only mounts.
  • Countless smaller fixes to playback, downloads, navigation, and layout across both web and mobile.

Thank you, as always, to the incredible PinePods community. 0.9.0 is a genuinely massive step forward — video, CarPlay, Android Auto, host following, a faster and better-looking app, and a more secure, better-documented backend. With a release this big, expect a few rough edges here and there; please test, report anything you find, and share your feedback. It directly shapes where PinePods goes next.

As always, full release notes and downloads can be found on the releases page.


Thanks to our Contributors

  • @holysoles – Helm chart external database secret support + Bitnami image deprecation workaround
  • @deanrock – Horust upgrade fixing a memory leak
  • @dmfrey – KV store reconnection fix
  • @rudism – Accept/User-Agent headers for episode downloads
  • @DarthGibblet – Fix for removing played episodes from playlists
  • @tonghuaroot – SSRF guard for server-side podcast fetches
  • @kestrel-x86 – Frontend streamlining and consolidation
  • Weblate contributors – translations across 36 languages

Thank you all! 🎉

Don't miss a new PinePods release

NewReleases is sending notifications on new releases.