A modern, all-in-one mobile client for managing your *arr stack. Built using KMP with native Jetpack Compose UI for Android and SwiftUI for iOS.
- Manage multiple Sonarr, Radarr, Lidarr, and Prowlarr instances
- Quick instance switching
- Custom instance labels and configurations
- Browse your entire media library with list and grid views
- Search and filter by title, quality, monitored status
- Sort by name, date added, size, and more
- View detailed media information including:
- Episode lists with file status
- Season management
- Quality profiles and custom formats
- File sizes and storage information
- Manual search for releases
- Filter by quality, language, indexer, protocol
- View seeders, size, age, and custom format scores
- One-tap download with confirmation for rejected releases
- View upcoming episodes and movie releases
- Switch between list and month views
- Filter by content type, monitored status, premieres/finales
- Scroll-to-today for easy navigation
- Real-time download monitoring
- View progress, ETA, and status
- Cancel downloads with blocklist options
- Detailed queue item information
- Custom Headers: Add custom HTTP headers per instance
- Slow Instance Mode: Configurable timeout for remote instances
- Pull-to-refresh: Update data across all screens
- Material 3/Liquid Glass Design: Beautiful, modern UI with dynamic theming on Android and Liquid Glass on iOS
- Search Everywhere: Unified search across your library
- Multiple Integrations: Support for Transmission, Deluge, qBittorrent, and SABnzbd
- Tablet/Large screen support
- Home screen widgets
- Schedule notifications
- bulk library actions
- Additional instances types
- Seer
- Readarr/Chaptarr
- Bazarr
- Kapowarr
- tautulli
- and more to come
![]() ![]() |
![]() ![]() |
| List View | Grid View |
![]() ![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
| Series Details | Movie Details | Episode Details | Artist Details |
![]() ![]() |
![]() ![]() |
![]() ![]() |
| Calendar List | Calendar Month | Activity Queue |
![]() ![]() |
| Instance Dashbaord |
This is a Kotlin Multiplatform project targeting Android, iOS.
-
/composeApp contains the Android application. This is where all Jetpack Compose and other Android-app specific code should go.
-
/iosApp contains iOS applications. This is where all SwiftUI and other iOS-app specific code should go
-
/shared is for the code that will be shared between all targets in the project. The most important subfolder is commonMain. Any code that is shared between projects (networking/database/viewmodel/data models, etc.) goes here. There are also androidMain and iosMain for shard code that targets a specifc platform.
To build and run the development version of the Android app, build and run the composeApp target in AndroidStudio
To build and run the development version of the iOS app, build and run the iosApp target in AndroidStudio or open the /iosApp directory in Xcode and run it from there.
To build the app locally Xcode must be signed into an Apple Account:
Xcode → Settings → Accounts
Next, select the Apple Account's team for the iosApp target:
iosApp → Signing & Capabilities → Targets → iosApp -> Signing -> Team
ArrMatey uses moko-resources for string resources across platforms. Any new strings should be added to strings.xml, or plurals.xml for plural strings. Build your targets, and new strings will be accessible using MR.strings
- Open the app and navigate to Settings
- Tap Add Instance
- Select your instance type (Sonarr/Radarr/Lidarr)
- Enter your instance details:
- Label: A friendly name for this instance
- Host: Your instance URL (e.g.,
http://192.168.1.100:8989,https://service.mydomain.com) - API Key: Found in your instance settings under General → Security
- (Optional) Configure advanced settings:
- Slow Instance: Enable for remote instances with higher latency
- Custom Timeout: Set a custom timeout in seconds (default: 60s)
- Custom Headers: Add additional HTTP headers if needed
- Local Endpoint: If you use a custom domain for remoote access, you can specify the local address of your instance to use on your home network.
- Tap Test Connection to verify
- Save your instance
If you use Tailscale Funnel's or CloudFlare Tunnels, additional setup steps can be found here
Custom headers are useful for:
- Reverse proxy authentication
- Additional security headers
- Custom routing or load balancing
Example:
- Header:
X-Forwarded-For - Value:
192.168.1.1
Contributions are welcome! Please feel free to submit a Pull Request.
- Code Style: Follow Kotlin coding conventions
- Commits: Use conventional commit messages
- Testing: Add tests for new features
- Documentation: Update README and code comments
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Found a bug? Please open an issue with:
- A clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Device/Android version
- Arr instance version (Sonarr/Radarr/Lidarr)
This project is licensed under the MIT License - see the LICENSE file for details.
- Sonarr - Smart PVR for newsgroup and bittorrent users
- Radarr - Movie collection manager
- Lidarr - Music collection manager
- Material Design 3 - Design system
- Jetpack Compose - Modern UI toolkit
- SwftUI - Apple's declarative framework for building user interfaces
- Kotlin Multiplatform - Kotlin's cross-platform solution



















