RomM Mobile is a mobile companion app for RomM, a beautiful, powerful, self-hosted ROM manager. This app allows you to browse, manage, and organize your retro gaming collection directly from your Android and iOS devices.
🧪 iOS Support: iOS support is currently experimental. While core functionality works, some features may have limitations compared to the Android version.
- 🎮 Browse ROM Collections: Explore your games organized by platform
- 🔐 Secure Authentication: Login with your RomM server credentials
- 📱 Retrohandled-Optimized Interface: Beautiful, responsive design built for retrohandleds
- 📁 File Management: Download and manage ROM files on your device
- 🍎 Cross-Platform: Available for both Android and iOS devices (iOS experimental)
- Download the APK: Get the latest release from the Releases page
- Install the APK: Enable installation from unknown sources in your Android settings, then install the downloaded APK
- Open the App: Launch RomM Mobile and log in with your RomM server credentials
⚠️ Important: Due to Expo's architecture, iOS builds are currently only available for development testing. Production IPA files are not yet available for sideloading.
Development Testing (Recommended):
-
Prerequisites:
- macOS computer with Xcode installed
- iOS device connected via USB or wireless debugging
- Apple Developer account (free account works)
-
Setup and Run:
git clone https://github.com/mattsays/romm-mobile.git cd romm-mobile expo run:ios --device -
Device Selection: Choose your connected iOS device when prompted
-
Trust Developer: Go to Settings → General → VPN & Device Management → Trust the developer certificate
-
Open the App: Launch RomM Mobile and log in with your RomM server credentials
Note: The app will run in development mode and requires the Expo development server to remain active. Production iOS builds via sideloading (Sideloadly, AltStore) will be available in future releases.
RomM Mobile uses a sophisticated folder management system that allows you to organize your ROM files efficiently. Here's how it works:
The app manages folders in two main ways:
- Platform-specific folders: Each gaming platform (NES, SNES, PlayStation, etc.) can have its own dedicated folder
- Automatic folder selection: When you download your first ROM for a platform, the app will prompt you to select a folder
When you download your first ROM for any platform:
- The app checks if a folder is already configured for that platform
- If no folder exists, it automatically prompts you to select one
- You'll see a dialog asking you to choose a folder for that specific platform
- Once selected, all future ROMs for that platform will be saved in the same folder
- Automatic: Prompted when downloading first ROM of a platform
- Manual: Configure folders in Settings → Platform Folders
- Per-platform: Each platform can have its own unique folder
- Flexible: You can change folder locations anytime
The app uses Android's Storage Access Framework which:
- ✅ Works with any storage location (internal, SD card, cloud storage)
- ✅ Maintains permissions across app updates
- ✅ Provides secure access to your files
- ✅ No need for broad storage permissions
Navigate to Settings → Platform Folders to:
- View all configured platform folders
- Change folder location for any platform
- Remove folder configuration for a platform
- Remove all platform folder configurations
When downloading a ROM:
- App checks if platform folder exists
- If exists: ROM downloads directly to that folder
- If missing: Shows folder selection dialog
- Selected folder is saved for future downloads of that platform
The folder selection dialog shows:
- Current folder (if one is already configured)
- Platform name you're configuring
- Options to Change or Cancel
- Automatically detects if a ROM is already downloaded
- Prevents duplicate downloads
- Node.js (version 18 or higher)
- Expo CLI
- Android Studio (for Android development)
- Xcode (for iOS development - macOS only)
- A running RomM server
-
Clone the repository
git clone https://github.com/mattsays/romm-mobile.git cd romm-mobile -
Install dependencies
npm install
-
Start the development server
npm start
-
Run on Android
npm run android
-
Run on iOS (macOS only)
npm run ios
romm-mobile/
├── app/ # Expo Router pages
│ ├── auth/ # Authentication screens
│ ├── game/ # Game detail screens
│ └── platform/ # Platform browsing screens
├── components/ # Reusable React components
├── contexts/ # React contexts (AuthContext)
├── hooks/ # Custom React hooks
├── locales/ # Internationalization files
├── services/ # API services and utilities
└── assets/ # Images, fonts, and static assets
npm start- Start the Expo development servernpm run android- Run on Android device/emulatornpm run ios- Run on iOS device/simulator (macOS only)
- Framework: Expo with Expo Router
- Language: TypeScript
- UI: React Native with custom components
- Navigation: Expo Router (file-based routing)
- State Management: React Context + Custom Hooks
- Storage: Expo SecureStore for sensitive data
- HTTP Client: Fetch API with custom wrapper
- Internationalization: Custom i18n implementation
- Android 7.0 (API level 24) or higher
- ARM64 or x86_64 architecture
- iOS 13.0 or higher
- iPhone 6s or newer, iPad Air 2 or newer
- Sideloading capability (Sideloadly, AltStore, or Developer Account)
The app requires the following permissions:
READ_EXTERNAL_STORAGE- Access ROM filesWRITE_EXTERNAL_STORAGE- Download and save ROMsINTERNET- Connect to RomM server
- Storage access for downloading ROMs
- Network access for RomM server connection
This app is compatible with RomM API version 3.10.2 and above.
- All authentication tokens are stored securely using Expo SecureStore
- HTTPS connection to RomM server is recommended for production use
- No sensitive data is logged or cached in plain text
We welcome contributions! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Follow the existing code style and TypeScript patterns
- Add appropriate types for all new code
- Test your changes on both Android and iOS devices/emulators
- Update documentation as needed
- Note any platform-specific limitations or differences
This project is licensed under the MIT License - see the LICENSE file for details.
- RomM - The main RomM server application
- RomM Documentation - Official documentation
- 🐛 Bug Reports: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📖 Documentation: Wiki
- RomM Team for creating the amazing ROM management platform
- Expo Team for the excellent React Native development experience
- The retro gaming community for inspiration and feedback
Made with ❤️ for the retro gaming community