agentlytics
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
Interactive terminal music radio player. Play your favorite radio station, CRUD your favorite lists, and explore new ra…
A terminal-based internet radio player powered by Radio Browser.
? anytime to see available keyboard shortcuts# update and upgrade brew update && brew upgrade brew install shinokada/tera/tera # Upgrade existing installation brew upgrade shinokada/tera/tera
go install github.com/shinokada/tera/v3/cmd/tera@latest
sudo dpkg -i tera_3.x.x_linux_amd64.deb sudo apt-get install -f # Install mpv dependency if needed
yay -S tera
sudo rpm -i tera_3.x.x_linux_amd64.rpm
scoop bucket add shinokada https://github.com/shinokada/scoop-bucket scoop install tera
winget install Shinokada.Tera # Upgrade existing installation winget upgrade Shinokada.Tera
Download the latest binary for your platform from the releases page:
| Platform | Architecture | File |
|---|---|---|
| macOS | Intel | tera_3.x.x_darwin_amd64.tar.gz |
| macOS | Apple Silicon | tera_3.x.x_darwin_arm64.tar.gz |
| Linux | x86_64 | tera_3.x.x_linux_amd64.tar.gz |
| Linux | ARM64 | tera_3.x.x_linux_arm64.tar.gz |
| Windows | x86_64 | tera_3.x.x_windows_amd64.zip |
| Windows | ARM64 | tera_3.x.x_windows_arm64.zip |
# Download and extract (example for macOS Apple Silicon) tar -xzf tera_3.x.x_darwin_arm64.tar.gz # Move to a directory in your PATH sudo mv tera /usr/local/bin/
.zip file for your architecturetera.exe to a directory already in your PATH# Start TERA tera # Main Menu Options: # 1) Play from Favorites - Browse your saved lists # 2) Search Stations - Find new stations # 3) Most Played - Your listening statistics # 4) Top Rated - Browse your highest-rated stations # 5) Browse by Tag - Browse stations by your custom tags # 6) Tag Playlists - Dynamic playlists from tag combinations # 7) Manage Lists - Create/edit/delete favorite lists # 8) Block List - Manage blocked stations # 9) I Feel Lucky - Random station by keyword # 0) Sync & Backup - Backup/restore data locally or via GitHub # -) Settings - Configure TERA # Quick Play (from main menu): # Type 10-99+ to instantly play stations from "My-favorites" # Need help? Press ? anytime to see keyboard shortcuts!
Play stations directly from the terminal without opening the TUI — useful for shell scripts, startup routines, or timed listening sessions.
tera play <source> [args] [--duration <duration>]
| Full form | Short alias | Args | Description |
|---|---|---|---|
favorites |
fav |
[list-name] [n] |
Play nth station from a favorites list |
recent |
rec |
[n] |
Play the nth most recently played station |
top-rated |
top |
[n] |
Play the nth highest-rated station |
most-played |
most |
[n] |
Play the nth most-played station |
lucky |
— | <keyword ...> |
Play a random station matching keyword(s) |
[list-name] defaults to My-favorites. [n] defaults to 1 (first item, 1-based).
# Play the first station from My-favorites tera play fav # Play the 3rd station from the jazz list tera play fav jazz 3 # Play the most recently played station tera play rec # Play the highest-rated station tera play top # Play the most-played station tera play most # Play a random station matching a keyword tera play lucky ambient # Multi-word keywords work too tera play lucky smooth jazz # Stop automatically after 30 minutes tera play fav --duration 30m # Play for 1 hour then stop tera play lucky ambient --duration 1h
The optional --duration flag accepts Go duration format: 30s, 10m, 1h, 1h30m. Without it, playback continues until Ctrl+C.
A single line is printed when playback starts:
▶ Playing: Jazz FM [jazz · item 1 of 12] (Ctrl+C to stop)
▶ Playing: Jazz FM [jazz · item 1 of 12] (stops in 30m · Ctrl+C to stop early)
mpv to be installed (same as the TUI)lucky requires network access to query Radio Browser; all other sources are localtera play --help for full usageBrowse and play stations from your organized lists. Navigate with ↑↓ or jk, press Enter to play. Press / to filter stations by name.
Six search methods to find stations:
See Search Guide below for details.
Create, rename, and delete your favorite lists. Stations can be:
Duplicate Detection: TERA automatically prevents adding the same station twice to any list.
Block unwanted stations to prevent them from appearing in shuffle mode and, by default, in search results.
How to Block:
b to block it instantlyu within 5 seconds to undo (in case of accidental block)Block List Management: From main menu, select "8. Block List" to:
u to unblock, c to clear allSearch Visibility (default: hidden): By default, blocked stations are completely hidden from search results. To change this:
y to show blocked stations in search (marked with 🚫)n to hide them again (default)Keyboard Shortcuts:
| Screen | Key | Action |
|---|---|---|
| Playing | b |
Block current station |
| Playing | u |
Undo block (5 sec window) |
| Block List | u |
Unblock selected station |
| Block List | c |
Clear all blocks |
Storage Location:
~/.config/tera/data/blocklist.json~/Library/Application Support/tera/data/blocklist.json%APPDATA%\tera\data\blocklist.jsonRate your favorite stations from 1-5 stars to build your personal collection of top stations.
How to Rate:
r then 1-5 to rater then 0 to remove a ratingr then any other key (or Esc) to cancel without changing the ratingTop-Rated View: From main menu, select "4. Top Rated" to:
f)s)Keyboard Shortcuts:
| Screen | Key | Action |
|---|---|---|
| Playing | r then 1-5 |
Rate station |
| Playing | r then 0 |
Remove rating |
| Top Rated | f |
Cycle filter |
| Top Rated | s |
Cycle sort order |
Storage Location:
~/.config/tera/data/station_ratings.json~/Library/Application Support/tera/data/station_ratings.json%APPDATA%\tera\data\station_ratings.jsonOrganize stations with your own personal labels. Tags are stored locally and never transmitted.
How to Tag:
t to add a single tagT (shift+t) to open the Manage Tags dialog and toggle multiple tags at onceBrowse by Tag (menu option 5):
d on a tag to remove it from every station at onceTag Playlists (menu option 6):
Tag pills in lists:
Tagged stations show [tag] pills inline in every list view — Favorites, Search, Most Played, and Top Rated — so you can see your labels at a glance.
Keyboard Shortcuts:
| Screen | Key | Action |
|---|---|---|
| Playing | t |
Add a tag (quick input) |
| Playing | T |
Open Manage Tags dialog |
| Browse by Tag | d |
Delete tag from all stations |
Tag rules:
Storage Location:
~/.config/tera/data/station_tags.json~/Library/Application Support/tera/data/station_tags.json%APPDATA%\tera\data\station_tags.jsonSet a timer to automatically stop playback — useful for falling asleep to radio.
How to Use:
Z to open the sleep timer dialog+ while the timer is running to extend it by 15 minutesSession Summary:
0 to return to the main menu, or any other key to exit TERAKeyboard Shortcuts:
| Screen | Key | Action |
|---|---|---|
| Playing | Z |
Open sleep timer dialog |
| Playing | + |
Extend running timer by 15 min |
Enter a keyword (genre, mood, style) and TERA finds a random matching station. Perfect for music discovery!
Input Focus: The page has two focusable areas — Genre/keyword (default) and Choose an option (history navigation). Use Tab to toggle between them:
▶ Genre/keyword: is highlighted when active — type freely, including keywords starting with digits (e.g. 80s, 2pac)▶ Choose an option: is highlighted when active — use ↑↓/jk to navigate history, or 1-N shortcuts to pick a recent searchShuffle Mode: Enable shuffle mode to automatically cycle through multiple stations matching your keyword:
Ctrl+T to toggle shuffle on/offSee Shuffle Mode for detailed features.
Access app configuration from the main menu (Settings: -):
The Settings menu automatically detects how you installed TERA (Homebrew, Go, Scoop, Winget, etc.) and shows the appropriate update command.
When Continue on Navigate is enabled, a playing station keeps streaming as you move to other screens:
x to stop.x from any screen to stop playback immediately.Enable / Disable:
- from the main menu → SettingsCustomize how the TERA header appears at the top of the application:
Header Modes:
Customization Options:
Tips:
figlet to generate ASCII artFor users on unstable networks (mobile data, GPRS, 4G), configure automatic reconnection:
Settings stored in the config directory (see File Locations).
The main menu shows two instant-access sections below the regular menu:
Main Menu & Quick Play
Choose an option:
1. Play from Favorites
...
-. Settings
─── Quick Play Favorites ───
10. Jazz FM • UK • MP3 192kbps
11. BBC Radio 6 Music • UK • AAC 128kbps
─── Recently Played ───
12. WBGO Jazz 88.3 • United States • 3 minutes ago
13. FIP • France • 1 hour ago
14. Radio Swiss Jazz • Switzerland • Yesterday
Type 10-14 to play instantly!
Quick Play Favorites: Stations from "My-favorites.json" with shortcuts starting at 10.
Recently Played: Your last N stations (default 5), shown in most-recently-played order. Shortcuts continue from where Quick Play Favorites end.
How it works:
↑↓ and press EnterEsc to stop playback▶ indicator marks the currently playing station in both sectionsConfigure Recently Played:
- from the main menu → Settings0 = fill available space)The easiest way to change themes is through the Settings menu:
- from the main menu to open SettingsYou can also customize colors and padding by editing the theme config file:
tera theme path # Show config file location tera theme reset # Reset to defaults
The config file includes an ANSI color reference (0-15 standard colors, 16-255 extended colors). Example:
colors: primary: "6" # Cyan highlight: "3" # Yellow error: "9" # Bright Red padding: list_item_left: 2
TERA automatically checks for new versions on startup. When an update is available:
- from the main menu to open SettingsTERA detects how you installed it and provides the correct update command. For example:
brew upgrade shinokada/tera/terago install github.com/shinokada/tera/v3/cmd/tera@latestscoop update terawinget upgrade tera| Installation Method | Update Command |
|---|---|
| Homebrew | brew upgrade shinokada/tera/tera |
| Go install | go install github.com/shinokada/tera/v3/cmd/tera@latest |
| Scoop | scoop update tera |
| Winget | winget upgrade tera |
| APT/DEB | sudo apt update && sudo apt install --only-upgrade tera |
| RPM/DNF | sudo dnf upgrade tera |
| Manual | Download from releases page |
Shuffle mode is an enhanced version of "I Feel Lucky" that lets you explore multiple stations matching your search keyword without manually searching each time.
Ctrl+T to toggle shuffle mode onAutomatic Station Discovery
Auto-Advance Timer (Optional)
p keyStation History
b keySeamless Playback
h| Key | Action |
|---|---|
Ctrl+T |
Toggle shuffle mode (in input screen) |
Tab |
Switch focus: Genre/keyword ↔ Choose an option |
n |
Next shuffle station (manual skip) |
[ |
Previous station (from history) |
b |
Block current station |
u |
Undo block (5 sec window) |
p |
Pause/resume auto-advance timer |
h |
Stop shuffle, keep playing current |
f |
Save to My-favorites |
s |
Save to another list |
v |
Vote for station |
r |
Rate station (then 1-5 / 0) |
Esc |
Stop shuffle and return to input |
Configure shuffle behavior in Settings → Shuffle Settings:
Auto-advance
n/[Auto-advance Interval
Remember History
History Size
🎵 Now Playing (🔀 Shuffle: jazz)
Station: Smooth Jazz 24/7
Country: United States
Codec: AAC • Bitrate: 128 kbps
▶ Playing...
🔀 Shuffle Active • Next in: 4:23
Station 3 of session
─── Shuffle History ───
← Jazz FM London
← WBGO Jazz 88.3
→ Smooth Jazz 24/7 ← Current
Space: Pause • n: Next • [: Prev • f: Fav • b: Block • p: Pause timer • h: Stop shuffle • 0: Main Menu • ?: Help
Shuffle settings are stored in the config directory as shuffle.yaml:
shuffle: auto_advance: true # Auto-advance enabled interval_minutes: 5 # 5 minutes per station remember_history: true # Track history max_history: 5 # Remember last 5 stations
File location:
~/.config/tera/shuffle.yaml~/Library/Application Support/tera/shuffle.yaml%APPDATA%\tera\shuffle.yamlYou can edit this file directly or use the Settings menu.
| Key | Action |
|---|---|
↑↓ / jk |
Navigate |
g / G |
Top / End |
Enter |
Select / Play |
Esc |
Back / Stop |
0 |
Main Menu |
x |
Stop Continue-on-Navigate playback (any screen) |
? |
Help |
Ctrl+C |
Quit |
| Key | Action |
|---|---|
0 |
Sync & Backup |
1-9 |
Quick select menu item |
10-99+ |
Quick play from My-favorites / Recently Played |
- |
Settings |
| Key | Action |
|---|---|
Space |
Pause / Resume |
* |
Volume up (+5%) |
/ |
Volume down (-5%) |
m |
Toggle mute |
r |
Rate station |
b |
Block station |
u |
Undo block (5s) |
Z |
Sleep timer |
+ |
Extend timer |
| Key | Action |
|---|---|
f |
Save to My-favorites |
s |
Save to another list |
v |
Vote for station |
t |
Add tag |
T |
Manage tags |
Tip: Press
?while playing to see all available shortcuts for the current screen in a help overlay.
| Key | Action |
|---|---|
/ |
Filter stations by name |
d |
Delete station |
| Key | Action |
|---|---|
n |
New list (in dialogs) |
d |
Delete item |
The Search Stations menu offers multiple ways to find stations:
| Option | Description | Example Query |
|---|---|---|
| Search by Tag | Find stations by genre/style tags | jazz, rock, news, classical |
| Search by Name | Find stations by their name | BBC, NPR, KEXP |
| Search by Language | Find stations broadcasting in a language | english, spanish, japanese |
| Search by Country Code | Find stations from a specific country | US, UK, FR, JP |
| Search by State | Find stations from a state/region | California, Texas, Bavaria |
| Advanced Search | Search both name AND tag fields | smooth jazz, classic rock |
jazz, rock, newsclassic rock, smooth jazz, talk radioBBC finds "BBC Radio 1", "BBC World Service", etc.Jazz, JAZZ, and jazz all work the sameUse Advanced Search when:
Features:
For example, searching jazz in Advanced Search finds:
Results are sorted by votes (most popular first) and limited to 100 stations. Broken/offline stations are automatically filtered out.
In the results:
↑↓ or jkEnter to view station details and playf to add to My-favoritess to add to another listv to vote for the stationBack up and sync your data locally or across devices using zip archives and GitHub Gists.
Save a local copy of your data with no GitHub account required.
0 → Sync & Backup~/tera-backup-YYYY-MM-DD.zip)Push all selected data to a dedicated secret GitHub Gist (tera-data-backup).
Quick Setup:
gist scopetera-data-backup Gist and shows available categories| Category | Default |
|---|---|
| Favorites (playlists) | ✅ on |
| Settings (config.yaml) | ✅ on |
| Ratings & votes | ✅ on |
| Blocklist | ✅ on |
| Station metadata & tags | ✅ on |
| Search history | ❌ off |
Category selections are saved in sync_prefs.json and reused on the next run.
Documentation:
TERA stores its configuration files in the OS-standard config directory:
| Operating System | Location |
|---|---|
| Linux | ~/.config/tera/ |
| macOS | ~/Library/Application Support/tera/ |
| Windows | %APPDATA%\tera\ |
tera/
├── config.yaml # Unified configuration (all settings)
├── data/
│ ├── blocklist.json # Blocked radio stations
│ ├── voted_stations.json # Voting history
│ ├── station_metadata.json # Play count & listening history
│ ├── station_ratings.json # Star ratings
│ ├── station_tags.json # Custom tags and tag playlists
│ ├── favorites/
│ │ ├── My-favorites.json # Quick play list (main menu 10+)
│ │ ├── Rock.json
│ │ └── Jazz.json
│ └── cache/
│ ├── gist_metadata.json
│ └── search-history.json
└── .v2-backup-YYYYMMDD-HHMMSS/ # Automatic v2 config backup
Environment Variable Override: You can set a custom favorites directory:
export TERA_FAVORITE_PATH="/path/to/your/favorites"
mpv is installed: mpv --versionmpv https://stream.example.compkill mpv
TERA should prevent this, but if it happens:
x from any screen to stop Continue-on-Navigate playbackkillall mpv # or on Linux pkill -9 mpv
TERA creates it automatically at first launch. Check the favorites directory in your OS-specific config location (see File Locations).
If missing, restart TERA and it will be created.
git clone https://github.com/shinokada/tera.git cd tera go run ./cmd/tera/
go test ./... -v
go build -o tera ./cmd/tera/
Contributions are welcome! Please:
MIT © Shinichi Okada
more like this
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
search projects, people, and tags