PodcastTUI lqdev
winget install --id=lqdev.PodcastTUI -e A Terminal User Interface for Podcast Management
winget install --id=lqdev.PodcastTUI -e A Terminal User Interface for Podcast Management
A cross-platform terminal user interface for podcast management built with Rust.
> š Documentation: For comprehensive architecture and design patterns, see ARCHITECTURE.md
v1.6.0 ā The application has a fully working feature set for podcast subscription management, downloading, device sync, playlist management, and audio playback.
ā Working Features:
:clean-older-than)ā³ Not Yet Implemented:
ā ļø Episode notes and statistics tracking are not yet implemented. The current release is suitable for managing subscriptions, downloading episodes, playing audio, syncing to devices, and managing playlists.
ā Completed Features:
Today (last 24h) playlistā³ In Progress / Planned:
> š Documentation: > - š Complete guide: GETTING_STARTED.md - Detailed platform-specific instructions and quick start > - šļø Architecture: ARCHITECTURE.md - System design and technical documentation
ā ļø Important Build Notes:
The application is currently in active development with core RSS/download features and audio playback complete.
š§ Development Status: Pre-built binaries are available for testing core features (RSS subscriptions, downloads, audio playback, and UI).
winget install lqdev.PodcastTUI
# Try it (zero commitment)
nix run github:lqdev/podcast-tui
# Install to profile
nix profile install github:lqdev/podcast-tui
# Or add to your NixOS configuration (flake-based):
# inputs.podcast-tui.url = "github:lqdev/podcast-tui";
# environment.systemPackages = [ podcast-tui.packages.${system}.default ];
> š See docs/NIX_PACKAGING.md for declarative config, Home Manager, development shell, and more.
Download the latest release for your platform from the releases page.
Windows (manual):
# Download and extract podcast-tui-vX.X.X-windows-x86_64.zip
# Run podcast-tui.exe
Linux:
# Download and extract podcast-tui-vX.X.X-linux-x86_64.tar.gz
tar -xzf podcast-tui-vX.X.X-linux-x86_64.tar.gz
cd podcast-tui-vX.X.X-linux-x86_64
./podcast-tui
git clone https://github.com/lqdev/podcast-tui.git
cd podcast-tui
cargo build --release
./target/release/podcast-tui
# Optional: Install icon and desktop entry on Linux
./scripts/install-icon-linux.sh
Linux/macOS:
# Install build dependencies (one-time setup)
./scripts/install-build-deps.sh
# Quick local build
./scripts/build-linux.sh
Windows:
# Verify dependencies
.\scripts\install-build-deps.ps1
# Quick local build
.\scripts\build-windows.ps1
See BUILD_SYSTEM.md for detailed build documentation and cross-platform build instructions.
cargo run to start the applicationPodcast TUI features a custom icon combining a cassette tape and RSS feed symbol, representing the audio content and subscription management capabilities.
Linux: After installing from a release package, run the included install-icon-linux.sh script to add the application icon to your system's application menu and file manager.
Windows: The icon is automatically embedded in the executable and will appear in the taskbar, Task Manager, and file explorer.
See assets/README.md for more details about the icon design and installation.
podcast-tuia to add your first podcasthttps://feeds.simplecast.com/54nAGcIl)D to download episodes, F1 or ? for helpShift+Enter on a downloaded episode to play itā / ā - Move up/downā / ā - Move left/rightPage Up / Page Down - Scroll by pageHome / End - Jump to top/bottomEnter - Select/activate itemSpace - Select/activate itemTab - Next bufferShift+Tab - Previous bufferCtrl+Page Up - Previous buffer (alternative)Ctrl+Page Down - Next buffer (alternative)a - Add new podcast subscriptiond - Delete selected podcastr - Refresh selected podcast feedShift+R - Refresh all podcast feedsCtrl+r - Hard refresh (re-parse all episodes)Enter - Open episode detail / navigate into playlistShift+D - Download episode (works in episode list and episode detail)Shift+X or X - Delete downloaded file for selected episodep - Add selected episode to a playlistCtrl+x - Delete ALL downloaded episodes and clean up:clean-older-than - Delete downloads older than duration (e.g., 7d, 2w, 1m):cleanup - Alias for clean-older-than:playlists - Open playlist buffer:playlist-create [name] - Create playlist:playlist-delete - Delete playlist:playlist-refresh - Refresh Today auto-playlist:playlist-sync - Sync podcasts + playlists to deviceF2 - Switch to podcast listF3 - Switch to helpF4 - Switch to downloadsF5 - Refresh current bufferF7 - Switch to playlistsCtrl+b - Show buffer list / Switch bufferCtrl+k - Close current bufferCtrl+l - List all buffers/ - Open search (filter by text, matches title + description):filter-status - Filter by status:filter-date - Filter by date range:clear-filters - Clear all active filtersF1 - Show helph or ? - Show help: - Command promptEsc - Cancel/hide minibufferq - Quit applicationF10 - Quit applicationShift+P - Toggle play/pauseShift+Enter - Play selected downloaded episodeCtrl+Left - Seek backward 10sCtrl+Right - Seek forward 10s+ / = - Volume up- - Volume downF9 - Open now playing bufferSee complete keybinding reference for all shortcuts.
Configuration is stored in JSON format at:
~/.config/podcast-tui/config.json%APPDATA%/podcast-tui/config.json{
"downloads": {
"directory": "~/Downloads/Podcasts",
"concurrent_downloads": 3,
"cleanup_after_days": 30,
"sync_device_path": "/mnt/mp3player",
"sync_delete_orphans": true,
"sync_preserve_structure": true,
"sync_dry_run": false,
"sync_include_playlists": true,
"use_readable_folders": true,
"embed_id3_metadata": true,
"assign_track_numbers": true,
"download_artwork": true,
"include_episode_numbers": true,
"include_dates": false,
"max_filename_length": 100
},
"playlist": {
"today_refresh_policy": "daily",
"auto_download_on_add": true,
"download_retries": 3
},
"audio": {
"volume": 0.8,
"seek_seconds": 10,
"external_player": null,
"auto_play_next": false,
"remember_position": true
},
"ui": {
"theme": "dark",
"show_progress_bar": true,
"whats_new_episode_limit": 50
}
}
The device sync feature allows you to sync downloaded episodes and playlists to external MP3 players or USB devices:
sync_device_path: Default path to your device (can be overridden at runtime)sync_delete_orphans: Remove files on device that aren't on PC (default: true)sync_preserve_structure: Keep podcast folder structure on device (default: true)sync_dry_run: Preview changes without applying them (default: false)sync_include_playlists: Include playlists in sync (default: true)Usage:
# Sync to device (prompts for path or uses config default)
:sync
# Sync to specific parent path (creates Podcasts/ and Playlists/)
:sync /mnt/usb/Music
# Preview changes without applying
:sync-dry-run /mnt/usb/Music
# View sync history
:buffer sync
See configuration documentation for all options.
Podcast TUI uses JSON files for data storage:
~/.local/share/podcast-tui/
āāā config.json # Application configuration
āāā podcasts/ # Podcast subscriptions
ā āāā {podcast-id}.json
āāā episodes/ # Episode metadata and notes
ā āāā {podcast-id}/
ā ā āāā {episode-id}.json
āāā playlists/ # Playlists metadata + audio copies
ā āāā Morning Commute/
ā ā āāā playlist.json
ā ā āāā audio/
ā ā āāā 001-episode.mp3
ā āāā Today/
ā ā āāā playlist.json
ā ā āāā audio/
āāā stats.json # Usage statistics
This design allows for:
The application follows a modular architecture with clear separation of concerns:
See ARCHITECTURE.md for comprehensive technical documentation including:
We welcome contributions! Please see CONTRIBUTING.md for:
:clean-older-thanNot Yet Implemented:
Build Requirements:
libasound2-dev and pkg-configCurrent Limitations:
See GitHub Issues for current bugs and feature requests.
Licensed under the MIT License. See LICENSE for details.
Status: š Active Development (v1.10.0)
Maintainer: @lqdev
Version: 1.10.0