Minimal macOS menu bar app for live radio streams, with a custom app icon and editable station list.
From the repository root:
./scripts/build-app.shThis creates:
dist/RadioMenuBar.app
Double-click dist/RadioMenuBar.app to start it. The app installs as RadioMenuBar.app, presents to Siri and Shortcuts as "Radio", and runs as a menu bar item without keeping a Dock icon visible.
The build script signs the app with the first available Apple Development: code-signing identity so Siri and Shortcuts can communicate with the App Intents host. Set CODESIGN_IDENTITY to choose a specific identity:
CODESIGN_IDENTITY="Apple Development: Your Name (TEAMID)" ./scripts/build-app.shIf no Apple Development identity is available, the script falls back to ad-hoc signing. Ad-hoc builds may appear in Shortcuts but fail at runtime with "Shortcuts couldn't communicate with the app."
cd RadioMenuBar
swift runYou can also run it from this nested package directory with cd app && swift run.
The built app copies its editable station config to:
~/Library/Application Support/RadioMenuBar/stations.json
When running from source, it also falls back to stations.json in the current working directory or app/stations.json when launched from the repository root.
Stations can include optional aliases for Siri and Shortcuts matching:
{
"name": "The Fox Melbourne",
"aliases": ["Fox FM", "Fox", "Fox Melbourne"],
"url": "https://example.com/stream.m3u8"
}- Menu bar station picker
- Play, stop, and active-station indicator
- Optional station-name display in the menu bar
- Persisted last selected station
- Persisted volume control
- Loading, playing, stopped, and failed states
- macOS Now Playing metadata
- Media play/pause/stop command support
- Siri and Shortcuts actions for start, stop, resume, and station tuning
- Reloadable
stations.json - Menu item to open the station config
- Visible config load warnings in the menu
- Keyboard shortcuts for stations 1-9, reload, config, and quit
- Launch at Login toggle in the built app
The bundled app/stations.json currently includes:
- ABC NewsRadio
- Gold 104.3
- The Fox Melbourne
- Triple M Melbourne 105.1
- triple j
- Triple R 102.7FM
The built app exposes App Intents for Siri and Shortcuts:
- "Start Radio"
- "Stop Radio"
- "Resume Radio"
- "Tune Radio to Fox"
Station selection uses the same stations.json config as the menu bar picker.
Aliases in stations.json are also matched, so a station displayed as "The Fox Melbourne" can respond to "Fox FM" or "Foxy FM".
The Siri phrase set is intentionally small while testing Apple Music routing. Phrases with "play", "listen to", or broad station-language variants can be interpreted by Siri as Apple Music or Podcasts requests before they reach the app.
- Requires macOS 13 or newer for
MenuBarExtra. - Keep
stations.jsonURLs pointed at stable stream URLs. - Do not save generated
listeningSessionIDchild playlist URLs from LISTNR streams. - Station config warnings appear in the menu when a config cannot be loaded.
- Launch at Login uses macOS ServiceManagement in the built app.
RadioMenuBar is an independent app and is not affiliated with the broadcasters included in the sample station list. Stream URLs belong to their respective broadcasters and may change without notice. Users are responsible for configuring and using valid public stream URLs.
