ArrMatey
ArrMatey
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.
Features
Multi-Instance Support
- Manage multiple Sonarr, Radarr, Lidarr, and Prowlarr instances
- Quick instance switching
- Custom instance labels and configurations
Library Management
- 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
Interactive Search
- 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
Calendar View
- 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
Activity Queue
- Real-time download monitoring
- View progress, ETA, and status
- Cancel downloads with blocklist options
- Detailed queue item information
Advanced Features
- 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
Download Client
- Multiple Integrations: Support for Transmission, Deluge, qBittorrent, and SABnzbd
Planned Features
- 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
Screenshots
Library Views
![]() ![]() |
![]() ![]() |
| List View | Grid View |
Media Details
![]() ![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
| Series Details | Movie Details | Episode Details | Artist Details |
Calendar & Activity
![]() ![]() |
![]() ![]() |
![]() ![]() |
| Calendar List | Calendar Month | Activity Queue |
Instance Management
![]() ![]() |
| Instance Dashbaord |
Getting Started
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.
Build and Run Android Application
To build and run the development version of the Android app, build and run the composeApp target in AndroidStudio
Build and Run iOS Application
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
Adding Localized String
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
Configuration
Adding Your First Instance
- 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
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
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development Guidelines
- Code Style: Follow Kotlin coding conventions
- Commits: Use conventional commit messages
- Testing: Add tests for new features
- Documentation: Update README and code comments
How to Contribute
- 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
Bug Reports
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)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- 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




















