Podcasts in any terminal. Fast, clean, offline.
- Why podliner?
- Screenshots
- Install (stable releases)
- Quick start
- Migrate from other players (OPML)
- gPodder sync
- Commands (essentials)
- Configuration & data
- Audio engines
- FAQ / Troubleshooting
- Contributing
- Bug reports, logs & roadmap
- License & credits
- Keyboard-first & mouse-friendly. Full mouse support (click, select, scroll) with fast TUI feedback.
- Vim keys & commands. Familiar navigation (
j/k,gg/G,ddfor remove from queue,/to search) plus concise colon-commands (:add <url>,:queue,:play,:export-opml,:import-opml). - Sync progress and subscriptions Via the gpodder api
- Offline-ready. Download episodes, resume where you left off, manage a queue.
- Easy migration. OPML import/export to move subscriptions between players.
- Cross-platform. Single-file builds for Linux, macOS, and Windows.
- Engine choice. Works with mpv, ffplay (FFmpeg), or VLC where available.
No telemetry. Config lives in your user profile. All local.
bash <(curl -fsSL https://github.com/timkicker/podliner/releases/latest/download/install.sh)Or via the AUR: yay -S podliner-bin
bash <(curl -fsSL https://github.com/timkicker/podliner/releases/latest/download/install-macos.sh)Via winget:
winget install --id=TimKicker.Podliner -eVia installer:
irm https://github.com/timkicker/podliner/releases/latest/download/install.ps1 | iexLooking for system-wide install, uninstall, pruning, or checksum verification? See the FAQ.
Most podcast players support OPML export/import.
- Export your subscriptions from the old player as an
.opmlfile (e.g.subscriptions.opml). - In podliner, open the Import OPML action and select that file.
- To export your current subscriptions from podliner, use Export OPML. It writes to your Documents folder as:
- Linux/macOS:
~/Documents/podliner-feeds.opml - Windows:
%USERPROFILE%\Documents\podliner-feeds.opml
- Linux/macOS:
- If you prefer to drop files in place, podliner stores its config here:
- Linux/macOS:
${XDG_CONFIG_HOME}/podlineror~/.config/podliner - Windows:
%APPDATA%\podliner
- Linux/macOS:
Podliner can sync your subscriptions and play history with any gPodder API v2 compatible server, including gpodder.net (public, free), Nextcloud with the gPodder app, or any self-hosted instance.
Quick start
:sync login https://gpodder.net <username> <password>
:sync ← pull + push (full sync)
:sync auto on ← sync automatically on startup and exit
Common commands
| Command | Description |
|---|---|
:sync login <server> <user> <pass> |
Log in and store credentials |
:sync |
Full sync (pull then push) |
:sync push |
Upload subscription changes and play history |
:sync pull |
Download subscription changes |
:sync status |
Show sync state, device, pending actions |
:sync auto on|off |
Toggle auto-sync |
:sync logout |
Remove credentials |
:sync help |
In-app guide |
Credentials are stored in the OS keyring when available (libsecret on Linux, Keychain on macOS, Credential Store on Windows), with a plaintext fallback in gpodder.json if the keyring is unavailable.
Full help browser:
:h| Full list: see COMMANDS
Playback
- Enter: play selected
- Space: pause/resume
- Left/Right: seek 10s backward/forward
Navigation & filters
- j / k: move down / up
- gg / G: jump to top / bottom
- / : search in current list
- f : toggle “unplayed only”
Downloads & queue
- d : download or show status
- :queue : switch to queue view
- :play-next / :play-prev : next/previous in queue
Feeds
- :add : add feed
- :feed all|saved|downloaded|history|queue : switch view
Misc
- t : toggle theme
- q : quit
- :w / :wq : save / save & quit
- Config:
- Linux:
$XDG_CONFIG_HOME/podliner/(fallback:~/.config/podliner/) - macOS:
$XDG_CONFIG_HOME/podliner/(fallback:~/.config/podliner/) - Windows:
%APPDATA%\podliner\
- Linux:
- Logs:
- Linux:
$XDG_STATE_HOME/podliner/logs/(fallback:~/.local/state/podliner/logs/) - Windows:
%LOCALAPPDATA%\podliner\logs\ - File pattern:
podliner-.log(daily) - Example:
…/podliner/logs/podliner-YYYYMMDD.log
- Linux:
- Downloads: {{IF APPLICABLE: path or “same as configured in app”}}
- OPML: imports/exports under Migrate from other players (OPML)
Back up
appsettings.jsonandlibrary.jsonto migrate settings and library to another machine.
podliner can use different players:
- mpv (recommended)
- ffplay (part of ffmpeg)
- VLC (via LibVLC; Windows support included with
VideoLAN.LibVLC.Windows) - Media Foundation; built in (Windows only) and used as fallback when VLC or MPV are not available.
Install examples:
- Debian/Ubuntu:
sudo apt-get install -y mpv ffmpeg - Fedora:
sudo dnf install -y mpv ffmpeg - Arch:
sudo pacman -S --needed mpv ffmpeg - macOS:
brew install mpv ffmpeg(if you use Homebrew) - Windows: download mpv or rely on VLC package as configured.
Engine selection & fallback:
- Default is
auto(prefer local download if available; else remote if online). - You can switch engines from via command
:engine vlc|mpv|ffplay|mediafoundation
- Install one of: mpv, ffplay (ffmpeg), or VLC. See Audio engines.
- Linux/macOS: add
--systemto the install command. - Windows (PowerShell): run
Install-Podliner -Systemafter the bootstrap line.
- Update to latest stable: re-run the install command for your OS.
- Uninstall (Linux):
bash <(curl -fsSL https://github.com/timkicker/podliner/releases/latest/download/install.sh) --uninstall - Uninstall (macOS):
bash <(curl -fsSL https://github.com/timkicker/podliner/releases/latest/download/install-macos.sh) --uninstall - Uninstall (Windows, PowerShell):
irm https://github.com/timkicker/podliner/releases/latest/download/install.ps1 | iex Uninstall-Podliner
- Prune old versions (keep active): use
--pruneon Linux/macOS orPrune-Podlineron Windows.
# Download checksums (stable)
curl -fsSLO https://github.com/timkicker/podliner/releases/latest/download/SHA256SUMS
# Example: verify Linux x64 tarball
curl -fsSLO https://github.com/timkicker/podliner/releases/latest/download/podliner-linux-x64.tar.gz
grep 'podliner-linux-x64.tar.gz$' SHA256SUMS | sha256sum -c -Add install path to PATH:
- Linux:
export PATH="$HOME/.local/bin:$PATH"(in~/.bashrc/~/.zshrc) - macOS:
export PATH="$HOME/bin:$PATH"(in~/.zprofile/~/.zshrc) - Windows: ensure
%LOCALAPPDATA%\Microsoft\WindowsAppsis on PATH
Quit, then move the config directory away (see Configuration & data), restart to re-initialize.
I welcome all focused PRs.
Please take a look at ROADMAP.md
Local dev:
dotnet build
dotnet run --project StuiPodcast.AppGuidelines (short):
- C# with
nullableenabled; keep logging via Serilog. - Prioritize robustness and UX over features.
PR flow:
- Fork → branch → PR to
main
When filing an issue, please include:
podliner --versionoutput (shows exact version + RID)- OS + architecture (e.g.,
linux-x64,osx-arm64,win-x64) - Steps to reproduce (short and precise)
- Logs: attach the most recent file from
logs/next to the binary (patternpodliner-*.log)
Example:…/podliner/logs/podliner-20250101.log
Security-sensitive issues: contact [email protected].
- License: GPLv3
Libraries used
- Terminal.Gui - TUI framework
- Serilog and Serilog.Sinks.File - logging
- AngleSharp- HTML parsing
- CodeHollow.FeedReader - RSS/Atom parsing
- Microsoft.Data.Sqlite - SQLite provider
- LibVLCSharp - VLC bindings
- VideoLAN.LibVLC.Windows- LibVLC binaries for Windows
- NAudio- Windows audio helpers (Media Foundation)
Engines and tools
- VLC - media engine (via LibVLC)
- mpv - media engine (optional)
- FFmpeg / ffplay - tools and fallback playback



