{"id":51118880,"url":"https://github.com/detain/phlix-mobile-client","last_synced_at":"2026-06-25T00:30:25.831Z","repository":{"id":358174052,"uuid":"1240294927","full_name":"detain/phlix-mobile-client","owner":"detain","description":"Mobile client for Phlix Media Server - Stream your media library to iOS and Android devices","archived":false,"fork":false,"pushed_at":"2026-05-26T20:52:42.000Z","size":5199,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-26T22:23:51.772Z","etag":null,"topics":["brightscript","dlna","electron-app","hls-streaming","home-media","htpc","jellyfin-alternative","media-player","media-server-client","mobile-app","plex-alternative","react-native","reactjs","samsung-tizen","smart-tv","streaming-client","tv-app","upnp","video-player"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/detain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-16T01:16:44.000Z","updated_at":"2026-05-26T20:52:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/detain/phlix-mobile-client","commit_stats":null,"previous_names":["detain/phlex-mobile-client","detain/phlix-mobile-client"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/detain/phlix-mobile-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detain%2Fphlix-mobile-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detain%2Fphlix-mobile-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detain%2Fphlix-mobile-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detain%2Fphlix-mobile-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/detain","download_url":"https://codeload.github.com/detain/phlix-mobile-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detain%2Fphlix-mobile-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34755061,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["brightscript","dlna","electron-app","hls-streaming","home-media","htpc","jellyfin-alternative","media-player","media-server-client","mobile-app","plex-alternative","react-native","reactjs","samsung-tizen","smart-tv","streaming-client","tv-app","upnp","video-player"],"created_at":"2026-06-25T00:30:25.302Z","updated_at":"2026-06-25T00:30:25.826Z","avatar_url":"https://github.com/detain.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Phlix Mobile\n\nA cross-platform mobile application for media playback, built with React Native. Phlix connects to your media server to provide a seamless experience for watching movies, TV shows, listening to music, and browsing photos.\n\n## Project Overview\n\nPhlix Mobile is a React Native application designed to interface with media servers (such as Jellyfin, Emby, or compatible APIs). It provides a native mobile experience with:\n\n- **Movies \u0026 TV Series**: Browse, search, and play media content\n- **Music Playback**: Listen to your music library with full playback controls\n- **Photo Albums**: View your photo collections\n- **Offline Downloads**: Download content for offline viewing\n- **Cross-Platform**: Available on both iOS and Android\n\n## Features\n\n### Core Features\n\n- **User Authentication**: Secure login with token-based authentication and automatic token refresh\n- **Media Library**: Browse movies, series, music, and photos organized by library\n- **Media Playback**: Full-featured video player with seek, volume, playback speed controls\n- **Subtitle Support**: Multiple subtitle tracks and audio tracks\n- **Search**: Global search across all media types\n- **User Preferences**: Customizable playback settings and app preferences\n- **Continue Watching**: Resume playback from where you left off\n- **Downloads**: Download media for offline playback\n\n### Hub Mode\n\nPhlix Mobile supports **Hub Mode** for remote access to your media servers:\n\n- **Sign in to Hub**: Authenticate with a Phlix Hub to access your claimed servers\n- **Multi-Server Support**: View and manage multiple claimed servers from a single app\n- **Server Switching**: Quickly switch between servers with the Server Switcher\n- **Direct Mode**: Connect directly to your server over LAN when on the same network\n- **Relay Mode**: Connect to your server remotely via the Hub relay when away from home\n\n#### Hub Connection Modes\n\n| Mode | Description | Use Case |\n|------|-------------|----------|\n| **Direct** | Connects directly to server hostname (e.g., `https://192.168.1.100:32400`) | Same network as server |\n| **Via Hub Relay** | Routes traffic through Hub relay endpoint | Remote access when not on same network |\n\nHub session data is persisted securely using `AsyncStorage`, allowing seamless reconnection across app restarts.\n\n### Technical Features\n\n- **React Native** with TypeScript for type safety\n- **Zustand** for lightweight state management\n- **React Navigation** for navigation flows\n- **Native Modules** for optimal video playback performance\n- **Secure Storage** for authentication tokens\n- **CI/CD Pipeline** with GitHub Actions\n\n## Prerequisites\n\nBefore you begin, ensure you have the following installed:\n\n### Common Requirements\n\n- **Node.js** (v18.x or later)\n- **npm** (v9.x or later) or **yarn** (v1.22.x or later)\n- **Git** (v2.x or later)\n\n### iOS Development\n\n- **Xcode** (v15.0 or later)\n- **CocoaPods** (`sudo gem install cocoapods`)\n- **macOS** (required for iOS development)\n- **Apple Developer Account** (for device deployment)\n\n### Android Development\n\n- **Android Studio** (latest stable version)\n- **Android SDK** (API level 24 or higher)\n- **Java Development Kit** (JDK 17 or higher)\n- **Gradle** (included via Android Studio)\n\n## Installation\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/your-org/phlix-mobile.git\ncd phlix-mobile\n```\n\n### 2. Install Dependencies\n\n```bash\n# Using npm\nnpm install\n\n# Or using yarn\nyarn install\n```\n\n### 3. Install iOS Dependencies (macOS only)\n\n```bash\ncd ios \u0026\u0026 pod install \u0026\u0026 cd ..\n```\n\n### 4. Configure Environment\n\nCreate a `.env` file in the root directory (optional for development):\n\n```env\nAPI_BASE_URL=https://api.phlix.app\n```\n\n## Configuration\n\n### API Configuration\n\nThe app connects to a media server API. Configure the base URL in:\n\n- **Development**: Uses default `https://api.phlix.app`\n- **Self-hosted**: Update `BASE_URL` in `src/api/client.ts`\n\n### Native Module Configuration\n\n#### iOS (PhlixPlayer)\n\nThe iOS player is implemented as a local CocoaPod in `ios/LocalPods/PhlixPlayer/`. It provides native video playback using AVPlayer.\n\n#### Android (PhlixPlayer)\n\nThe Android player is implemented as a native module in `android/app/src/main/java/com/phlixmobile/player/`. It uses ExoPlayer for video playback.\n\n### Building for iOS\n\n#### Prerequisites\n\n1. Ensure CocoaPods dependencies are installed\n2. Open `ios/PhlixMobile.xcworkspace` in Xcode\n3. Select your target device or simulator\n4. Configure signing (if deploying to a real device)\n\n#### Build Commands\n\n```bash\n# Using xcodebuild (requires macOS)\nxcodebuild -workspace ios/PhlixMobile.xcworkspace \\\n  -scheme PhlixMobile \\\n  -configuration Debug \\\n  -destination 'platform=iOS Simulator,name=iPhone 15' \\\n  build\n\n# Or build for release\nxcodebuild -workspace ios/PhlixMobile.xcworkspace \\\n  -scheme PhlixMobile \\\n  -configuration Release \\\n  -destination 'platform=iOS Simulator,name=iPhone 15' \\\n  build\n```\n\n#### Running the App\n\n```bash\n# Start Metro bundler\nnpm start\n\n# In another terminal, run on iOS simulator\nnpx react-native run-ios\n\n# Or specify a device\nnpx react-native run-ios --device \"iPhone 15\"\n```\n\n### Building for Android\n\n#### Prerequisites\n\n1. Ensure Android SDK is properly configured\n2. Set `ANDROID_HOME` environment variable\n3. Add platform tools to PATH\n\n#### Build Commands\n\n```bash\n# Debug build\ncd android \u0026\u0026 ./gradlew assembleDebug\n\n# Release build\ncd android \u0026\u0026 ./gradlew assembleRelease\n```\n\nThe APK will be generated at:\n- Debug: `android/app/build/outputs/apk/debug/app-debug.apk`\n- Release: `android/app/build/outputs/apk/release/app-release.apk`\n\n#### Running the App\n\n```bash\n# Start Metro bundler\nnpm start\n\n# In another terminal, run on Android\nnpx react-native run-android\n```\n\n## Testing\n\n### Running Tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests with coverage\nnpm test -- --coverage\n\n# Run tests in watch mode\nnpm test -- --watch\n\n# Run specific test file\nnpm test -- --testPathPattern=\"src/stores\"\n```\n\n### Test Structure\n\nTests are located alongside source files with the naming convention:\n\n```\nsrc/\n├── stores/\n│   ├── __tests__/\n│   │   └── usePlayerStore.test.ts\n│   └── usePlayerStore.ts\n├── api/\n│   ├── __tests__/\n│   │   └── client.test.ts\n│   └── client.ts\n```\n\n### Linting\n\n```bash\n# Run ESLint\nnpm run lint\n\n# Fix auto-fixable issues\nnpm run lint -- --fix\n```\n\n### Type Checking\n\n```bash\n# Run TypeScript type checking\nnpm run typecheck\n```\n\n## Deployment\n\n### iOS\n\n1. **TestFlight**: Use Xcode to archive and upload to App Store Connect\n2. **App Store**: Create a new app in App Store Connect, then archive and distribute\n3. **Enterprise**: Build for enterprise distribution as needed\n\n### Android\n\n1. **Google Play Store**: Sign the release APK and upload to Google Play Console\n2. **Direct APK**: Distribute the unsigned or signed APK directly\n3. **FDroid**: Build a release and publish to F-Droid repository\n\n### CI/CD\n\nThe project includes GitHub Actions workflows for automated:\n\n- **Testing**: Runs on every push and PR\n- **iOS Build**: Builds iOS app (requires macOS runner, manual trigger)\n- **Android Build**: Builds Android debug APK on every push\n\n## Troubleshooting\n\n### Common Issues\n\n#### iOS Build Failures\n\n- Ensure Xcode and Command Line Tools are up to date\n- Run `cd ios \u0026\u0026 pod install` to refresh dependencies\n- Clean build folder in Xcode: `Cmd + Shift + K`\n\n#### Android Build Failures\n\n- Verify Android SDK path: `echo $ANDROID_HOME`\n- Clean Gradle cache: `cd android \u0026\u0026 ./gradlew clean`\n- Ensure JDK 17 is being used\n\n#### Metro Bundler Issues\n\n- Reset cache: `npm start -- --reset-cache`\n- Delete node_modules and reinstall\n\n## Support\n\nFor issues and feature requests, please open an issue on the GitHub repository.\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdetain%2Fphlix-mobile-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdetain%2Fphlix-mobile-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdetain%2Fphlix-mobile-client/lists"}