A powerful, fast, and elegant command-line interface for browsing and streaming media from your Plex server.
- Browse Media: Quickly browse your entire Plex library using fzf's fuzzy finder
- Multi-Select: Select multiple items with TAB for batch downloads or sequential playback
- Download Queue: Add items to a persistent queue for batch downloads later
- Rich Previews: View detailed metadata in the preview window
- Stream with MPV: Watch movies and TV shows directly with MPV player
- Download with Rclone: Download media files to your local system with beautiful progress bars
- Remote Streaming: Publish streams for playback on other devices via mDNS discovery
- Smart Caching: Cache your media library locally for instant browsing
- Multi-Server Support: Connect to and manage multiple Plex servers
- Media Type Filtering: Filter by Movies, TV Shows, or browse all media
- Cross-Platform: Works on macOS, Linux, and Windows
- Beautiful UI: Built with Charm libraries for a polished terminal experience
Before using GoplexCLI, ensure you have the following installed:
- Go 1.20+ (for building from source)
- fzf - Fuzzy finder for browsing media
- macOS:
brew install fzf - Linux:
sudo apt install fzforsudo pacman -S fzf - Windows:
choco install fzf
- macOS:
- mpv - Media player for streaming
- macOS:
brew install mpv - Linux:
sudo apt install mpvorsudo pacman -S mpv - Windows: Download from mpv.io
- macOS:
- rclone - For downloading media files
- macOS:
brew install rclone - Linux:
sudo apt install rcloneor download from rclone.org - Windows: Download from rclone.org
- macOS:
git clone https://github.com/joshkerr/goplexcli.git
cd goplexcli
make buildThis builds both goplexcli (main application) and goplexcli-preview (preview helper).
Then install to your PATH:
# Using make (installs to /usr/local/bin)
make install
# Or manually
sudo cp goplexcli goplexcli-preview /usr/local/bin/
# Or add project directory to PATH
export PATH="$PATH:/path/to/goplexcli"First, authenticate with your Plex account:
goplexcli loginYou'll be prompted for your Plex username and password. Your credentials are used only for authentication and the resulting token is saved securely in your config directory.
Index your media library:
goplexcli cache reindexThis will fetch all your movies and TV shows from your Plex server and cache them locally for fast browsing.
Launch the media browser:
goplexcli browseThis will open fzf with your entire media library. Use the arrow keys or type to search, then:
- Press TAB to select/deselect items (multi-select mode)
- Press Enter to confirm selection
- Choose Watch to stream with MPV locally (plays sequentially if multiple items)
- Choose Download to download with rclone (downloads all selected items)
- Choose Stream to publish for remote playback on other devices (uses first item only)
Authenticate with your Plex account and save credentials.
goplexcli loginBrowse and play media from your Plex server.
goplexcli browseFeatures:
- Select media type (Movies, TV Shows, or All)
- Fuzzy search across your entire library
- Multi-select with TAB - Select multiple items for batch operations
- Press Ctrl+P to toggle preview window with:
- Year, rating, duration
- Plot summary
- File path
- Press Enter to confirm selection
- Choose Watch to stream locally (creates playlist if multiple items), Download to save all, Add to Queue to save for later, or Stream to publish for remote playback
Multi-Select Examples:
# Select multiple episodes of a TV show
goplexcli browse
# Select "TV Shows"
# Search for "Breaking Bad"
# Press TAB on episodes 1, 2, 3
# Press Enter
# Choose "Watch" - plays all episodes sequentially
# Batch download movies
goplexcli browse
# Select "Movies"
# Press TAB on multiple movies
# Press Enter
# Choose "Download" - downloads all selected filesUsing the Download Queue:
The queue lets you collect items across multiple browsing sessions and download them all at once:
# Add items to the queue
goplexcli browse
# Select media, press Enter
# Choose "Add to Queue"
# Later, view and download the queue
goplexcli browse
# Select "View Queue" from the media type menu
# Choose "Download All" to download everything in the queueQueue features:
- Persistent: Queue survives between sessions
- Concurrent-safe: Multiple instances can safely add to the queue while another downloads
- Deduplication: Same item won't be added twice
- Manage items: Remove individual items or clear the entire queue
Discover and play streams published by other devices on your local network.
goplexcli streamHow it works:
Publishing a stream (Mac/Desktop):
- Run
goplexcli browse, select media, and choose Stream - Server starts on port 8765 and announces via mDNS
- Displays a URL like
http://192.168.1.5:8765for easy access
Consuming streams:
Option 1: Web UI (iPad/iPhone/Any Browser)
- Open the displayed URL in Safari/Chrome
- See all available streams in a mobile-friendly interface
- Tap "Play in Infuse/VLC/Plex" to launch your favorite player
Option 2: CLI (Mac/Linux)
- Run
goplexcli streamto discover servers - Select a stream to play in MPV
Use cases:
- Browse your library on Mac, watch on iPad via web UI
- Queue up content from laptop for TV playback
- Share streams between devices without re-browsing the library
Supported Players:
- Infuse (iOS/tvOS) - Deep link support
- VLC (iOS/Android/Desktop)
- Plex (iOS/Android/Desktop)
- MPV (via CLI on desktop)
Manage your local media cache.
Update the cache with new media (incremental):
goplexcli cache updateRebuild the entire cache from scratch:
goplexcli cache reindexView cache statistics:
goplexcli cache infoSearch for media in your cache:
goplexcli cache search "movie title"Manage multiple Plex servers.
List all configured servers:
goplexcli server listEnable or disable specific servers:
goplexcli server enable <server-name>
goplexcli server disable <server-name>Display current configuration:
goplexcli configConfiguration files are stored in platform-specific directories:
- macOS:
~/.config/goplexcli/ - Linux:
~/.config/goplexcli/or$XDG_CONFIG_HOME/goplexcli/ - Windows:
%APPDATA%\goplexcli\
The config.json file contains:
{
"servers": [
{
"name": "My Plex Server",
"url": "http://your-plex-server:32400",
"token": "your-auth-token",
"enabled": true
}
],
"plex_username": "your-username",
"mpv_path": "mpv",
"rclone_path": "rclone",
"fzf_path": "fzf"
}The config supports multiple servers. You can manually edit this file to set custom paths for mpv, rclone, or fzf if they're not in your PATH.
GoplexCLI caches your media library locally to enable fast, offline browsing with fzf. The cache stores:
- Movie titles, years, and metadata
- TV show names, season and episode numbers
- File paths for streaming and downloading
- Rclone remote paths (automatically converted from Plex paths)
Cache Location:
- macOS/Linux:
~/.config/goplexcli/cache/media.json - Windows:
%APPDATA%\goplexcli\cache\media.json
GoplexCLI automatically converts Plex file paths to rclone remote paths. For example:
Plex Path:
/home/joshkerr/plexcloudservers2/Media/TV/ShowName/Season 01/Episode.mkv
Rclone Path:
plexcloudservers2:/Media/TV/ShowName/Season 01/Episode.mkv
The conversion:
- Removes the
/home/joshkerr/prefix - Adds a
:after the remote name (e.g.,plexcloudservers2)
When you choose to watch a media item, GoplexCLI:
- Requests a direct stream URL from your Plex server
- Launches MPV with the stream URL
- MPV handles the playback with seeking and buffering
When you choose to download a media item, GoplexCLI:
- Extracts the rclone remote path from the cached media
- Uses rclone to copy the file to your current directory
- Displays a progress bar during download (via rclone-golib)
Install fzf using your package manager (see Prerequisites).
Install mpv using your package manager (see Prerequisites).
Install rclone and ensure it's configured with your remotes:
rclone configRun goplexcli cache reindex to build your media cache.
Ensure both binaries are installed:
make build
make install
# Or add the project directory to your PATHIf you're having trouble logging in:
- Verify your Plex username and password
- Check that your Plex server is accessible
- Try manually editing
~/.config/goplexcli/config.jsonwith your server URL and token
CLI discovery (goplexcli stream) not working:
- Ensure both devices are on the same local network
- Check firewall allows mDNS (port 5353 UDP) and HTTP (port 8765 TCP)
- On the publishing device, verify the stream server started successfully
- Try the web UI instead:
http://<publisher-ip>:8765
Web UI not accessible:
- Get the IP address shown when you published the stream
- Ensure devices are on the same network
- Check firewall allows port 8765 TCP
- Try accessing directly:
http://<ip>:8765 - On iOS, ensure you're not using cellular data
Deep links not working on iOS:
- Ensure you have Infuse, VLC, or Plex installed
- If the link doesn't open, copy the stream URL and paste into your player manually
- Some players require you to tap-and-hold the link, then choose "Open in [App]"
goplexcli/
├── cmd/
│ ├── goplexcli/
│ │ └── main.go # Main CLI application
│ └── preview/
│ └── main.go # Preview helper for fzf
├── internal/
│ ├── cache/
│ │ └── cache.go # Media caching logic
│ ├── config/
│ │ └── config.go # Configuration management
│ ├── download/
│ │ └── download.go # Rclone download integration
│ ├── player/
│ │ └── player.go # MPV player integration
│ ├── plex/
│ │ └── client.go # Plex API client
│ ├── queue/
│ │ └── queue.go # Persistent download queue
│ ├── stream/
│ │ └── server.go # Stream server and mDNS discovery
│ └── ui/
│ └── fzf.go # fzf integration
├── Makefile # Build automation
├── go.mod
├── go.sum
├── .gitignore
└── README.md
- LukeHagar/plexgo - Plex API SDK
- charmbracelet/lipgloss - Terminal styling
- charmbracelet/bubbletea - TUI framework
- spf13/cobra - CLI framework
- joshkerr/rclone-golib - Rclone integration with progress bars
- gofrs/flock - Cross-platform file locking
- golang.org/x/term - Secure terminal input
External Tools:
Contributions are welcome! Please feel free to submit issues or pull requests.
MIT License - See LICENSE file for details
- Built with Charm libraries for beautiful terminal UIs
- Plex API integration via plexgo
- File downloads via rclone-golib