A lightweight command line music player for Navidrome, written in Go.
I found that Feishin client is very slow on MacOS. To be honest, we don't need a GUI for listening to music. So I built this app to play Navidrome music from terminal. Hope you guys like it.
- π Fast and lightweight
- π¨ Redesigned terminal UI with Amber theme, braille progress bar, and panel layouts
- β― Play/pause/skip controls with real-time progress and spinner animation
- π Integrated search with in-place results
- π Volume control with visual bar
- π Now Playing panel: artist, album, track info, audio specs, oscilloscope
- π Sort modes: Random / Title / Artist / Album (
skey) - π Dual song source: Random shuffle or Albums A-Z (
Skey) - π’ Live connection status indicator
- β¨οΈ Vim-style keyboard shortcuts (
j/k,gg/G,h/l) - π Pagination with dynamic column widths
- π Written in pure Go
brew install mpv# Add the tap
brew tap yhkl-dev/navicli
# Install navicli
brew install navicli
# Verify installation
navicli --helpTo update NaviCLI in the future:
brew upgrade navicliTo uninstall:
brew uninstall navicli
brew untap yhkl-dev/navicliDownload the latest pre-built binary from Releases:
# For Apple Silicon (M1/M2/M3):
curl -L https://github.com/yhkl-dev/NaviCLI/releases/latest/download/release.tar.gz -o release.tar.gz
tar xzf release.tar.gz
chmod +x navicli-darwin-arm64
sudo mv navicli-darwin-arm64 /usr/local/bin/navicligit clone https://github.com/yhkl-dev/NaviCLI.git
cd NaviCLI
go build -o navicli .
sudo mv navicli /usr/local/bin/sudo apt install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libmpv-dev mpv
git clone https://github.com/yhkl-dev/NaviCLI.git
cd NaviCLI
go build -o navicli .
sudo mv navicli /usr/local/bin/Create a config file at ~/.config/navicli/config.toml:
[server]
url = "https://your-navidrome-server.com"
username = "your-username"
password = "your-password"The legacy path ~/.config/config.toml is also supported for backward compatibility.
navicliPlayback Controls:
Space: Play/Pausen/N/l: Next trackp/P/h: Previous trackβ: Next track (arrow)β: Previous track (arrow)+/=: Volume up (+5%)-/_: Volume down (-5%)
Navigation (Vim-style):
j/β: Move down in listk/β: Move up in listJ/PgDn: Next pageK/PgUp: Previous page>/]: Next page (alternative)</[: Previous page (alternative)gg: Go to first pageG: Go to last page
Sort & Source:
s: Cycle sort mode (Random / Title / Artist / Album)S: Cycle song source (Random / Albums A-Z)
Search & Info:
/: Open search?: Show help panelq/Q: Show playback queueESC: Close modal or exit (when not in search mode)Ctrl+C: Force quit
- Press
/to open the search box at the top - Type keywords to search
- Press
Enterto execute search - Results display in the main list
- Use
ββkeys to select andEnterto play - Press
ESCto clear search and restore original list - Press
Taborβto switch focus from search box to list
When playing, the Now Playing panel shows:
- Spinning animation indicator + song title
- Artist, album, track number, duration
- Dynamic separator line (adapts to panel width)
- Volume bar with visual fill indicator
- Connection status dot (green = connected)
- Playing/paused status
When paused, additional geek details appear:
- ASCII oscilloscope waveform visualization
- Audio specs (format, sample rate, bitrate, channels, file size)
- Go struct debug output (technical metadata)
The bottom bar shows a braille-pattern progress bar with 8x resolution, current/total time, and volume.
# Build
go build -o navicli .
# Run tests
go test ./...- Publish to Homebrew
- Add lyrics support
- Add playlist support
- Add favorites/bookmarking
- Add shuffle/repeat modes
- Cross-platform builds (Linux/Windows)
PRs are welcome! Please open an issue first to discuss what you'd like to change.