{"id":43491179,"url":"https://github.com/matteo-pacini/radiogogo","last_synced_at":"2026-02-03T10:04:21.747Z","repository":{"id":203188959,"uuid":"707701231","full_name":"matteo-pacini/RadioGoGo","owner":"matteo-pacini","description":"📻 Go-powered CLI to surf global radio waves via a sleek TUI. Tune in \u0026 let's Go 🚀!","archived":false,"fork":false,"pushed_at":"2026-01-22T23:05:01.000Z","size":2070,"stargazers_count":151,"open_issues_count":5,"forks_count":10,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-22T23:32:13.593Z","etag":null,"topics":["bubbletea","cli","go","golang","radio","radio-streaming","terminal","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matteo-pacini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-20T13:19:34.000Z","updated_at":"2026-01-22T23:05:04.000Z","dependencies_parsed_at":"2024-05-09T16:53:44.869Z","dependency_job_id":"8c3e0466-b75b-49db-aa2a-957cd8d68c74","html_url":"https://github.com/matteo-pacini/RadioGoGo","commit_stats":null,"previous_names":["zi0p4tch0/radiogogo","matteo-pacini/radiogogo"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/matteo-pacini/RadioGoGo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matteo-pacini%2FRadioGoGo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matteo-pacini%2FRadioGoGo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matteo-pacini%2FRadioGoGo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matteo-pacini%2FRadioGoGo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matteo-pacini","download_url":"https://codeload.github.com/matteo-pacini/RadioGoGo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matteo-pacini%2FRadioGoGo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29040796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T09:57:37.951Z","status":"ssl_error","status_checked_at":"2026-02-03T09:55:14.920Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","cli","go","golang","radio","radio-streaming","terminal","tui"],"created_at":"2026-02-03T10:04:00.879Z","updated_at":"2026-02-03T10:04:21.735Z","avatar_url":"https://github.com/matteo-pacini.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RadioGoGo\n\n\u003cdiv style=\"display:flex;justify-content:center;\"\u003e\n    \u003cimg src=\"./logo.png\" alt=\"RadioGoGo Logo\" width=\"200\" height=\"200\"\u003e\n\u003c/div\u003e\n\nA terminal UI for browsing and playing internet radio stations. Built with Go using [BubbleTea](https://github.com/charmbracelet/bubbletea) and the [RadioBrowser API](http://www.radio-browser.info/).\n\n\u003cimg src=\"./screen1.png\" alt=\"RadioGoGo Search View\" width=\"500\" height=\"320\"\u003e\n\u003cimg src=\"./screen2.png\" alt=\"RadioGoGo Station List View\" width=\"500\" height=\"320\"\u003e\n\n## Features\n\n- Search stations by name, country, language, or codec\n- Browse results in a navigable table\n- Stream playback via `ffplay`\n- Real-time volume control during playback\n- Record streams to disk via `ffmpeg`\n- Customizable color themes and keybindings\n- Bookmark favorite stations for quick access\n- Hide unwanted stations from search results\n- Cross-platform (Linux, macOS, Windows)\n- Multi-language UI (English, German, Greek, Spanish, Italian, Japanese, Portuguese, Russian, Chinese)\n\n## How It Works\n\nRadioGoGo uses FFmpeg tools for audio:\n\n- **Playback**: `ffplay` handles audio streaming. Volume changes restart the player with the new level (with debouncing to avoid rapid restarts).\n- **Recording**: `ffmpeg` runs alongside `ffplay` when recording. Both connect to the stream independently—audio keeps playing while the stream saves to disk.\n\nThe header shows two status indicators:\n- `(●) play` — green when playing, yellow during volume restart, gray when idle\n- `(●) recording` — red when recording, gray when idle\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `Enter` | Play selected station |\n| `Ctrl+K` | Stop playback |\n| `9` / `0` | Volume down / up |\n| `r` | Toggle recording (while playing) |\n| `↑` / `↓` or `j` / `k` | Navigate station list |\n| `b` | Toggle bookmark on selected station |\n| `B` | View bookmarks / back to stations |\n| `h` | Hide station from results |\n| `H` | Manage hidden stations |\n| `s` | Back to search |\n| `L` | Cycle UI language (search screen) |\n| `q` | Quit |\n\nMost keys are customizable via config (see [Custom Keybindings](#custom-keybindings) below). Keys that cannot be changed: arrow keys, Enter, Tab, Escape, and common editing keys (Backspace, Delete, Ctrl+C, etc.).\n\n## Recording\n\nPress `r` while a station is playing to start recording. The file saves to your current directory with the format:\n\n```\nstation_name-YYYY-MM-DD-HH-MM-SS.codec\n```\n\nFor example: `bbc_radio_1-2026-01-22-18-32-00.mp3`\n\nPress `r` again to stop recording. The recording continues even if you adjust volume (only the player restarts, not the recorder).\n\n## Bookmarks \u0026 Hidden Stations\n\n**Bookmarks:** Press `b` on any station to bookmark it (⭐ appears next to name). Press `B` to view all bookmarks. Press `B` again to return to your search results.\n\n**Hidden Stations:** Press `h` to hide a station from search results. Press `H` to manage hidden stations and unhide them if needed.\n\nBookmarks and hidden stations persist across sessions.\n\n## Installation\n\n### Dependencies\n\nYou need `ffplay` for playback. For recording, you also need `ffmpeg`. Both come with the FFmpeg package.\n\n**Windows:**\n```\nchoco install ffmpeg\n```\nor\n```\nscoop install ffmpeg\n```\n\n**Linux (apt):**\n```\nsudo apt install ffmpeg\n```\n\n**Linux (dnf/Fedora):**\n```\nsudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm\nsudo dnf install ffmpeg\n```\n\n**Linux (pacman):**\n```\nsudo pacman -S ffmpeg\n```\n\n**macOS:**\n```\nbrew install ffmpeg\n```\n\n### Install RadioGoGo\n\n**Via Go:**\n```bash\ngo install github.com/zi0p4tch0/radiogogo@latest\n```\n\nMake sure `$(go env GOPATH)/bin` is in your PATH.\n\n**Via releases:**\n\nDownload the binary for your platform from the [Releases](https://github.com/zi0p4tch0/radiogogo/releases) page.\n\n### Available Platforms\n\n| OS | Architecture | Filename | Notes |\n|----|--------------|----------|-------|\n| **macOS** | Apple Silicon (M1/M2/M3) | `darwin_arm64.zip` | |\n| | Intel | `darwin_amd64.zip` | |\n| **Linux** | x86 64-bit | `linux_amd64.zip` | Most desktops/servers |\n| | x86 32-bit | `linux_386.zip` | Legacy systems |\n| | ARM64 | `linux_arm64.zip` | Pi 3/4/5 (64-bit OS), modern ARM servers |\n| | ARMv7 | `linux_armv7.zip` | Pi 2/3/4 (32-bit OS) |\n| | ARMv6 | `linux_armv6.zip` | Pi 1, Pi Zero, Pi Zero W |\n| **Windows** | x64 | `windows_amd64.zip` | |\n| | x86 | `windows_386.zip` | |\n\n## Configuration\n\nConfig file location:\n- **Windows:** `%LOCALAPPDATA%\\radiogogo\\config.yaml`\n- **Linux/macOS:** `~/.config/radiogogo/config.yaml`\n\nCreated automatically on first run.\n\n### Theme\n\n```yaml\ntheme:\n    textColor: '#ffffff'\n    primaryColor: '#5a4f9f'\n    secondaryColor: '#8b77db'\n    tertiaryColor: '#4e4e4e'\n    errorColor: '#ff0000'\n```\n\n### Language\n\nSet the UI language:\n\n```yaml\nlanguage: en\n```\n\nAvailable: `de` (German), `el` (Greek), `en` (English), `es` (Spanish), `it` (Italian), `ja` (Japanese), `pt` (Portuguese), `ru` (Russian), `zh` (Chinese)\n\nPress `L` on the search screen to cycle through languages.\n\n### Custom Keybindings\n\nMost keys can be customized. Changes require restarting the app.\n\n```yaml\nkeybindings:\n  quit: q\n  search: s\n  record: r\n  bookmarkToggle: b\n  bookmarksView: B\n  hideStation: h\n  manageHidden: H\n  changeLanguage: L\n  volumeDown: \"9\"\n  volumeUp: \"0\"\n  navigateDown: j\n  navigateUp: k\n  stopPlayback: ctrl+k\n```\n\n**Reserved keys** (cannot be remapped): arrow keys (`up`, `down`, `left`, `right`), `tab`, `enter`, `esc`, `backspace`, `delete`, `pgup`, `pgdown`, `home`, `end`, and terminal control keys (`ctrl+c`, `ctrl+z`, `ctrl+s`, `ctrl+q`, `ctrl+l`, `ctrl+a`, `ctrl+e`, `ctrl+u`, `ctrl+k`, `ctrl+w`, `ctrl+d`, `ctrl+h`).\n\nIf you set an invalid key or duplicate, the app warns at startup and uses the default for that key.\n\nExample alternate theme:\n\n```yaml\ntheme:\n    textColor: '#f0e6e6'\n    primaryColor: '#c41230'\n    secondaryColor: '#e4414f'\n    tertiaryColor: '#f58b8d'\n    errorColor: '#ff0000'\n```\n\n\u003cimg src=\"./screen3.png\" alt=\"RadioGoGo Alternate Theme\" width=\"500\" height=\"320\"\u003e\n\u003cimg src=\"./screen4.png\" alt=\"RadioGoGo Alternate Theme\" width=\"500\" height=\"320\"\u003e\n\n## Troubleshooting\n\n### Playback Issues\n\n**\"FFplay not found\" error on startup**\n- Ensure FFmpeg is installed (see [Dependencies](#dependencies))\n- Verify `ffplay` is in your PATH: run `ffplay -version` in terminal\n- On Windows, you may need to restart your terminal after installing FFmpeg\n\n**Station takes a while to start playing**\n- Some streams need time to buffer depending on server location and connection\n- Wait a few seconds for the stream to start\n- Check if the station works in a browser first\n\n**No audio output**\n- Check your system audio settings and output device\n- Try playing a different station (some may be temporarily offline)\n- Verify FFplay works: run `ffplay -autoexit -nodisp \u003cany audio file\u003e`\n\n**Station doesn't work at all**\n- Stations go offline or change URLs frequently\n- RadioBrowser is community-maintained, so some entries may be stale\n- Try searching for the same station by name to find updated URLs\n\n### Recording Issues\n\n**Recording button doesn't work**\n- Recording requires `ffmpeg` installed separately from `ffplay`\n- Verify `ffmpeg` is in your PATH: run `ffmpeg -version`\n- Recording only works while a station is actively playing\n\n**Recording file is empty or corrupt**\n- Some stations may use codecs or streams that FFmpeg cannot capture\n- Check write permissions in your current directory\n- Ensure you have sufficient disk space\n\n### Configuration Issues\n\n**Config changes not taking effect**\n- Restart the app after editing `config.yaml`\n- Check for YAML syntax errors (proper indentation, quotes around special characters)\n- Invalid keybindings show warnings at startup and fall back to defaults\n\n**Terminal too small error**\n- Resize your terminal to at least 115 columns x 29 rows\n- Use a terminal that supports resizing\n- Check if your terminal font size is too large\n\n## Building from Source\n\n### Prerequisites\n\n- Go 1.25 or later\n- FFmpeg (for playback and recording)\n\n### Build\n\n```bash\n# Clone the repository\ngit clone https://github.com/zi0p4tch0/radiogogo.git\ncd radiogogo\n\n# Build\ngo build -o radiogogo\n\n# Or install to GOPATH/bin\ngo install\n```\n\n### Run Tests\n\n```bash\n# Run all tests\ngo test ./...\n\n# Run with verbose output\ngo test -v ./...\n\n# Run tests for a specific package\ngo test ./api\ngo test ./models\ngo test ./playback\n```\n\n### Nix Development Environment\n\nIf you use Nix with flakes:\n\n```bash\n# Enter development shell (provides Go, FFmpeg, Delve, Gopls)\nnix develop\n\n# Or with direnv\ndirenv allow\n```\n\n## FAQ\n\n**Recording requires ffmpeg?**\n\nYes. Playback only needs `ffplay`, but recording needs `ffmpeg` installed and in your PATH.\n\n## Mentions\n\n- [Golang Weekly Issue 481](https://golangweekly.com/issues/481)\n\n## Contributing\n\nBug reports, fixes, and feature ideas welcome. For new features, open an issue first to discuss.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatteo-pacini%2Fradiogogo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatteo-pacini%2Fradiogogo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatteo-pacini%2Fradiogogo/lists"}