Torrnado is a modern, material-designed Android client for searching, indexing, and organizing torrents. Built with Jetpack Compose, Kotlin, MVVM, and Hilt, it offers a seamless and highly customizable experience.
- 🎨 Modern Material 3 UI: Interactive, responsive layout leveraging Compose.
- 🌈 Deep Customization: Custom color palette accents using Material Kolor, with full support for Light, Dark, System, and AMOLED Black themes.
- 🔍 Active Search: Expandable search bar with active states, focus management, and persistent search history.
- 📂 Feeds & Transfers Nav: Navigation integration with dedicated views to manage active transfers, feeds, and indexer search results.
- 🚀 Automated Build Pipeline: Fully-configured GitHub Actions workflow that compiles a signed or unsigned release APK on push/tags.
- 🔒 Secure Local Builds: Automatic fallback to debug keystore signing if release keys are missing locally, ensuring frictionless development.
The app is organized following clean architecture guidelines:
tech.jitendhull.torrnado/
├── data/ # Room DB, Retrofit API client, indexers (Prowlarr/Jackett), repositories
├── domain/ # Models, core business logic, Use Cases
├── di/ # Dependency injection modules (Hilt)
└── ui/ # Compose screens (Search, Feeds, Transfers, Settings), navigation, themes
- JDK 17
- Android SDK / Android Studio (Koala or newer recommended)
- Clone the repository:
git clone https://github.com/jitendhull/Torrnado.git cd Torrnado - Build a local debug build:
./gradlew assembleDebug
To sign your release builds locally:
- Create a
keystore.propertiesfile in the project root:storeFile=path/to/your/release.keystore storePassword=your_keystore_password keyAlias=your_key_alias keyPassword=your_key_password
- Build the signed release:
./gradlew assembleRelease
(Note: If keystore.properties is missing, the build automatically falls back to the default debug key so the compile won't fail.)
A GitHub Actions workflow is set up under .github/workflows/release.yml. When you push tags (v*) or commit messages prefixed with release: / Release:, it:
- Sets up the JDK environment.
- Checks for repository secrets to decode the keystore.
- Compiles the production release APK.
- Uploads the final APK to the GitHub run workflow artifacts for direct download.
To compile signed APKs on GitHub Actions, add the following secrets in your repository settings (Settings > Secrets and variables > Actions):
RELEASE_KEYSTORE_BASE64: The Base64 encoded string of your.keystoreor.jksfile. (Generate it usingbase64 -i your_keystore.keystore | pbcopyor equivalent)RELEASE_KEYSTORE_PASSWORD: The main password for your keystore.RELEASE_KEY_ALIAS: The alias for your release key.RELEASE_KEY_PASSWORD: The password for your specific key alias.