Skip to content

Repository files navigation

RadiyoNet 🎙️

Sound of the World | صدای جهان | Dünyanın Sesi

A modern, multilingual internet radio application built with React Native. Stream your favorite radio stations with a beautiful, intuitive interface.


Features

  • Internet Radio Streaming - Stream from multiple radio stations worldwide
  • Multilingual Support - Full support for Persian (Farsi), English, and Turkish
  • Dark/Light Theme - Beautiful dark and light themes with system auto-detect
  • Proxy Support - HTTP/HTTPS/SOCKS5 proxy configuration with IP and port
  • Favorites - Save and manage your favorite stations
  • Recently Played - Quick access to your listening history
  • Sleep Timer - Auto-stop playback after a set duration
  • Keep Screen On - Prevent screen from turning off during playback
  • Volume Control - In-app volume slider
  • Station Categories - Browse stations by Music, News, Talk, Cultural
  • Screen Orientation Lock - Lock to Portrait or Landscape mode
  • Offline Settings - All preferences persist locally
  • RTL Support - Full right-to-left layout for Persian

Screenshots

Home Player Settings Favorites
Home Player Settings Favorites

Tech Stack

  • React Native 0.79.x
  • TypeScript 5.7.x
  • React Navigation 7.x (Bottom Tabs)
  • AsyncStorage for local persistence
  • react-native-sound-player for audio playback
  • react-native-volume-manager for volume control
  • react-native-keep-awake for screen wake lock
  • react-native-community/slider for sliders

Requirements

  • Node.js >= 20
  • React Native CLI
  • Android Studio (for Android builds)
  • Xcode (for iOS builds)

Installation

1. Clone the repository

git clone https://github.com/yourusername/RadiyoNet.git
cd RadiyoNet

2. Install dependencies

yarn install

3. iOS Setup

cd ios && pod install && cd ..

4. Run the app

# Android
yarn android

# iOS
yarn ios

Building for Release

Debug APK

cd android
./gradlew assembleDebug

Output: android/app/build/outputs/apk/debug/app-debug.apk

Release APK

cd android
./gradlew assembleRelease

Output: android/app/build/outputs/apk/release/app-release.apk

Release AAB (Play Store)

cd android
./gradlew bundleRelease

Output: android/app/build/outputs/bundle/release/app-release.aab

CI/CD

This project includes GitHub Actions workflows:

CI Pipeline (ci.yml)

  • Runs on push to main/develop and PRs
  • TypeScript check, linting, and debug APK build

Release Pipeline (android-release.yml)

  • Triggered by pushing a version tag (v*)
  • Builds release APK and AAB
  • Creates GitHub Release with changelog and artifacts

Creating a Release

# Update version in package.json
git add .
git commit -m "release: v2.1.0"
git tag v2.1.0
git push origin main --tags

The release workflow will automatically:

  1. Build release APK and AAB
  2. Generate changelog from commits
  3. Create a GitHub Release with download assets

Project Structure

RadiyoNet/
├── .github/
│   └── workflows/
│       ├── ci.yml                 # CI pipeline
│       └── android-release.yml    # Build & release pipeline
├── android/                       # Android native code
├── ios/                           # iOS native code
├── src/
│   ├── components/                # Reusable UI components
│   │   ├── Button.tsx
│   │   ├── PlayerControls.tsx
│   │   ├── SettingsItem.tsx
│   │   └── StationCard.tsx
│   ├── context/                   # React Context providers
│   │   ├── PlayerContext.tsx
│   │   └── SettingsContext.tsx
│   ├── hooks/                     # Custom React hooks
│   ├── i18n/                      # Translations
│   │   ├── en.ts
│   │   ├── fa.ts
│   │   ├── tr.ts
│   │   └── index.ts
│   ├── screens/                   # App screens
│   │   ├── FavoritesScreen.tsx
│   │   ├── HomeScreen.tsx
│   │   └── SettingsScreen.tsx
│   ├── services/                  # Business logic
│   │   ├── PlayerService.ts
│   │   ├── StationService.ts
│   │   └── StorageService.ts
│   ├── theme/                     # Theme system
│   │   ├── colors.ts
│   │   └── index.ts
│   ├── types/                     # TypeScript types
│   │   └── index.ts
│   └── App.tsx                    # Root component
├── LICENSE
├── README.md
├── package.json
└── tsconfig.json

Configuration

Proxy Settings

The app supports HTTP, HTTPS, and SOCKS5 proxies:

  1. Go to Settings > Proxy
  2. Enable proxy toggle
  3. Enter IP address and port
  4. Optionally enter username/password
  5. Test connection

Screen Orientation

Lock the app to a specific orientation:

  1. Go to Settings > Screen Orientation
  2. Choose between:
    • Portrait - Locked to portrait mode
    • Landscape - Locked to landscape mode
    • Auto - Follows system rotation

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

RadiyoNet - Built with ❤️ for radio lovers everywhere.

About

رادیو اینترنتی با React Native

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages