# Podarium A podcast server you run yourself. It subscribes to your shows, downloads the audio, and serves it to your own players — a web app that installs to a phone's home screen, and an HTTP API. Most podcast apps are a directory with a player attached: your device fetches each episode straight from the publisher, and Apple's catalogue decides what exists. Podarium inverts that. Three rules shape everything else: 1. **The server does every fetch.** Feeds, audio, and artwork are all pulled by the server and served from it. Publishers see one address, and no client ever makes a request to a host you did not choose. 2. **Apple is never in the loop.** Discovery runs through [Podcast Index](https://podcastindex.org), never iTunes. 3. **It is a media server, not a sync service.** It holds the files, serves them with range requests, and decides what to keep. ## What it does - Subscribe by search, by category, by what is trending, or by pasting a feed URL - Downloads episodes ahead of time, with retention rules per show or globally - Queue, inbox with filters, starred episodes, and a resume list - Playback speed per show, chapter skip, and skipping of publisher-marked ad breaks - Configurable intro and outro trimming per show, and a sleep timer - Removes silence and levels loudness on the server, so no client repeats the work - Fetches transcripts where publishers offer them, and searches your library by what was said rather than only by title - Bookmarks a timestamp inside an episode, which is the thing hardest to find again - Listening statistics measured from audio that actually played, not from what was marked as done - Web push for new episodes, with a count on the home-screen icon - Offline playback for episodes you save to the device - OPML in and out, Prometheus metrics, and a nightly database dump The server and the web app are complete and in daily use. A native iOS client is in progress against the same API. The reasoning behind the design is in [podarium-spec.md](podarium-spec.md). ## Local development Requires `uv` and Docker. ```bash docker compose -f docker-compose.dev.yml up -d # Postgres 18 on :5455 uv venv --python 3.12 && uv pip install -e ".[dev]" cp .env.example .env # then edit the password uv run alembic upgrade head uv run uvicorn --app-dir src podarium.main:app --port 8044 --reload ``` For the UI, either build it once and let the API serve it at `/`: ```bash cd web && npm install && npm run build ``` or run the Vite dev server for hot reload, which proxies `/api` to port 8044: ```bash cd web && npm run dev ``` The proxy matters for more than convenience: the session cookie is httpOnly, so `