A beautiful, open-source Mac app for streaming radio stations from around the world, built with SwiftUI and powered by RadioBrowserKit.
- Browse & Search: Discover thousands of radio stations from around the world
- Country & Region Browsing: Browse stations by country with regional subcategories (states)
- Advanced Search Filters: Filter by country, language, tag, codec, bitrate, and more
- Favorites: Save your favorite stations for quick access
- Recently Played: Automatically tracks the last 10 played stations
- Icecast Metadata: Displays real-time song titles and artist information from Icecast streams
- Play/Pause/Stop Controls: Full playback control
- Volume Control: Adjustable volume slider
- AirPlay Support: Stream to AirPlay-enabled devices with visual indicators
- Media Controls: Integration with macOS Now Playing and Control Center
- Remote Control: Support for keyboard media keys and remote control devices
- Menu Bar Integration: App stays running in the menu bar when window is closed
- Always-On Player: Persistent player controls at the bottom of the window
- Lazy Loading: Efficient pagination for large station lists
- Current Country Highlighting: Your country appears at the top of the countries list
- Horizontal Category Grid: Quick country selection with visual grid
MacRadio follows a clean MVVM (Model-View-ViewModel) architecture:
- Models:
FavoriteStation,RecentStation(SwiftData) - ViewModels:
StationListViewModel,FavoritesViewModel,RecentsViewModel,CountriesViewModel,SearchFilters - Views: SwiftUI views for each screen and component
- Services:
PlaybackService,RadioBrowserService,MediaControlsManager,MenuBarManager,IcecastMetadataParser
- macOS 13.0 or later
- Xcode 15.0 or later
- Swift 5.9 or later
- Clone the repository:
git clone https://github.com/PankajGaikar/MacRadio.git
cd MacRadio- Open the project in Xcode:
open MacRadio.xcodeproj- Build and run the project (⌘R)
- RadioBrowserKit: Swift Package dependency - GitHub Repository
- Launch MacRadio
- Browse stations by clicking "Browse" in the sidebar
- Use the search bar to find specific stations
- Click the play button next to any station to start streaming
- Add stations to favorites by clicking the heart icon
- Click "Countries" in the sidebar
- Select a country from the list (your current country appears at the top)
- If the country has regions/states, select one to see stations
- Stations will load automatically with lazy loading as you scroll
- Enter a search term in the search bar
- Click the "Filters" button to open the filter panel
- Set filters like:
- Country Code (e.g., US, GB, IN)
- Language
- Tag (e.g., jazz, rock, news)
- Codec (MP3, AAC, OGG, FLAC)
- Bitrate range
- HTTPS only
- Sort order
- Click "Search" to apply filters
- Start playing a station
- Click the AirPlay button in the player controls
- Select an AirPlay-enabled device
- The AirPlay indicator will show when streaming to an external device
- Close the window to keep the app running in the menu bar
- Click the menu bar icon to show the window again
- The icon changes to indicate playback state
MacRadio/
├── MacRadio/
│ ├── Models/ # SwiftData models
│ ├── ViewModels/ # MVVM view models
│ ├── Views/ # SwiftUI views
│ ├── Services/ # Business logic services
│ └── MacRadioApp.swift
├── MacRadio.xcodeproj/
└── README.md
- SwiftUI: Modern declarative UI framework
- SwiftData: Local data persistence
- AVFoundation: Audio playback and AirPlay support
- MediaPlayer: Now Playing and remote control integration
- Combine: Reactive programming
- RadioBrowserKit: Radio Browser API client
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source. See LICENSE file for details.
- Radio Browser API for providing the radio station database
- RadioBrowserKit - Swift Package for interacting with the Radio Browser API
Pankaj Gaikar
Made with ❤️ for radio lovers