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
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