Loading repository data…
Loading repository data…
madeofpendletonwool / repository
Pinepods is a complete podcast management system that allows you to play, download, and keep track of podcasts you enjoy. All self hosted and enjoyed on your own server!
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
PinePods is a complete, self-hosted podcast management system written in Rust.
You run one server, your whole household connects to it, and your subscriptions, history, queue, downloads, and settings follow you from device to device — because everything lives in your own database. Listen in the browser, on the desktop, on your phone, in the car, or even from the terminal.
:point_right: Want the full story, deep configuration, and tutorials? Head to the documentation site.
| :headphones: Listen | Audio and video podcasts, variable speed, chapters, transcripts, downloads, a persistent queue panel, serial auto-play, and per-podcast auto-download. |
| :card_index_dividers: Organize | Subscriptions, smart playlists, manual playlists, saved episodes, favorites & favorite categories, full history, and local file-system podcasts. |
| :mag: Discover | Search across Podcast Index, iTunes, and YouTube, search inside your own library for episodes, follow podcast hosts via PodPeople DB, and generate shareable episode links. |
| :twisted_rightwards_arrows: Sync & apps | Built-in gpodder server (AntennaPod, etc.), OIDC / SSO, , web + desktop + mobile clients with and , plus the CLI. |
| :art: Make it yours | Multiple built-in themes plus a custom theme creator, detailed listening stats, OPML import/export, push notifications (ntfy / webhook), and 36 languages. |
See the full feature catalog in the docs.
A public demo instance lives at try.pinepods.online — make an account and take a look before you self-host. It's for evaluation only; accounts there are wiped periodically, so run your own server for real use.
The fastest way to run PinePods is Docker Compose with PostgreSQL. Create a
docker-compose.yml:
services:
db:
container_name: db
image: postgres:18
environment:
POSTGRES_DB: pinepods_database
POSTGRES_USER: postgres
POSTGRES_PASSWORD: myS3curepass
PGDATA: /var/lib/pgdata/pgdata
volumes:
- /home/user/pinepods/pgdata:/var/lib/pgdata
restart: always
valkey:
image: valkey/valkey:8-alpine
restart: always
pinepods:
image: madeofpendletonwool/pinepods:latest
ports:
- "8040:8040"
environment:
# Basic server info
SEARCH_API_URL: 'https://search.pinepods.online/api/search'
PEOPLE_API_URL: 'https://people.pinepods.online'
HOSTNAME: 'http://localhost:8040'
# Database
DB_TYPE: postgresql
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: myS3curepass
DB_NAME: pinepods_database
# Valkey cache
VALKEY_HOST: valkey
VALKEY_PORT: 6379
DEBUG_MODE: false
# Run as your host user so downloads stay accessible (optional)
PUID: ${UID:-911}
PGID: ${GID:-911}
# Local timezone (optional, used for logs)
TZ: "America/New_York"
volumes:
- /home/user/pinepods/downloads:/opt/pinepods/downloads
- /home/user/pinepods/backups:/opt/pinepods/backups
restart: always
depends_on:
- db
- valkey
Then start it:
sudo docker compose up -d
Open http://localhost:8040 and you'll be prompted to create your first admin
account. That's it — you're up.
:information_source: On PostgreSQL 18 / upgrading from 17. New installs default to
postgres:18and need no special steps. Two things to know when moving an existing install to 18:
- Data isn't auto-migrated across major versions.
postgres:18won't start against a data directory created by 17 (FATAL: database files are incompatible with server). Your data is safe — rundeployment/docker/upgrade-postgres.sh(takes a backup, then upgrades in place) or follow the Upgrading PostgreSQL guide. Back up first — the upgrade is one-way.- The
postgres:18image moved its data dir andVOLUME. Bind-mounting to the old/var/lib/postgresql/datacan fail on some Linux/overlay2 hosts withchange mount propagation through procfd ... no such file or directory. The compose above avoids this by mounting at/var/lib/pgdata, outside the image'sVOLUME; use that same pattern when you upgrade. See docker-library/postgres#1363.
Need more? Helm/Kubernetes, MySQL/MariaDB, admin bootstrap vars, the self-hosted search API, timezone tuning, PUID/PGID, and OIDC are all covered in the docs:
helm repo add pinepods http://helm.pinepods.onlineRun the server, then connect any client by pointing it at your server URL and signing in. The web client is served by the server itself — the rest are optional native apps.
| Platform | How to get it | Notes |
|---|---|---|
| :globe_with_meridians: Web | Built in — browse to your server's port | No install needed |
| :penguin: Linux | Flathub, AUR (paru -S pinepods), or AppImage / .deb / .rpm on Releases | Flatpak recommended |
| :window: Windows | .exe (installer) or .msi (portable) on Releases | |
| :apple: macOS | .dmg (installer) or portable build on Releases | |
| :iphone: iOS | App Store | CarPlay supported |
| :robot: Android | Google Play, IzzyOnDroid, or Obtainium | Android Auto supported |
| :computer: ** |