Tottodrillo is a modern and minimal Android app to explore, search, and download ROMs from multiple sources. The app supports dynamic source installation via ZIP packages, allowing you to add new ROM sources without updating the app.
Sources Repository: Tottodrillo-Source - Contains all source definitions and development guides.
This README is also available in other languages:
- ๐ฎ๐น Italiano
- ๐ช๐ธ Espaรฑol
- ๐ฉ๐ช Deutsch
- ๐ฏ๐ต ๆฅๆฌ่ช
- ๐ซ๐ท Franรงais
- ๐จ๐ณ ็ฎไฝไธญๆ
- ๐ต๐น Portuguรชs
- Metadata Import: Search and import rich metadata for your ROMs from the Internet Game Database (IGDB)
- Comprehensive Game Information: Import title, cover art, description, storyline, genres, developer, publisher, rating, screenshots, and more
- Easy Configuration: Set up your IGDB Client ID and Secret directly in Settings
- Smart Matching: View matching platforms and confirm before importing metadata
- Enhanced ROM Details: Enrich your ROM collection with professional metadata and high-quality cover art from IGDB
- Multiple Search Providers: Choose between different providers for ROM information search
- Configurable Provider: Select your preferred search provider in settings
- Dynamic Button Text: Search button text changes based on selected provider
- Recent Searches (NEW in v3.1.0):
- Automatic history of the last searches with applied filters
- Quick recall of recent searches from the search screen
- Smart reset: when clearing the query (and no filters are active), recent searches are shown again
- Dynamic Source Installation: Install new ROM sources via ZIP packages without updating the app
- Multiple Source Types: Support for API, Java/Kotlin, and Python sources
- Source Management: Enable/disable, install, uninstall, and update sources from settings
- Default Sources: Automatic installation of default sources on first launch
- Source Filtering: Filter search results by selected sources
- Automatic Refresh: UI updates automatically when sources are enabled/disabled
- Platform Mapping: Each source includes its own platform mapping for seamless integration
- Home Screen with featured ROMs, popular platforms, favorites, recent ROMs and downloaded ROMs
- Platform Exploration organized by brand (Nintendo, PlayStation, Sega, Xbox, etc.) with collapsible/expandable sections
- Advanced Search with automatic debounce (500ms) to optimize queries
- Multiple Filters for platforms, regions, and sources with interactive chips
- Infinite Pagination with automatic lazy loading
- ROM Display with centered and proportioned cover art
- Image Carousel: Multiple images per ROM (box art, screenshots) with swipeable carousel
- Lazy Image Loading: Images load only when visible on screen for better performance
- Background Downloads with WorkManager for reliability
- Real-time Progress Tracking with percentage, bytes downloaded, and speed (also visible from ROM detail)
- Interactive Notifications with "Cancel download" and "Cancel installation" actions
- Multiple Concurrent Downloads with separate progress and notifications for each task
- Custom Path to save files in any folder (including external SD card)
- Automatic/Manual Installation:
- Support for ZIP archives (extraction)
- Support for non-archive files (copy/move)
- Folder picker for custom destination
- ES-DE Compatibility:
- Automatic installation in ES-DE folder structure
- ES-DE ROMs folder selection
- Automatic organization by
mother_code(e.g.,fds/,nes/, etc.)
- File Management:
- Overwrite existing files (does not delete other files in the folder)
- Optional deletion of original file after installation
- Download and extraction history management
- Advanced Options:
- WiFi-only downloads to save mobile data
- Available space verification before download
- Configurable notifications
- Session Management: Automatic cookie handling for sources that require it
- Favorites with file-based persistence
- Recent ROMs (last 25 opened) with file-based persistence
- Download/Installation Status for each link with automatic updates
- Multiple Download Links: Support for multiple versions and formats per ROM
- Source Identification: Each download link shows its source
- Status Icons:
- Download in progress with progress indicator
- Installation in progress with percentage
- Installation completed (green icon)
- Installation failed (red icon, clickable to retry)
- Open Installation Folders directly from the app
- Material Design 3 with automatic dark/light theme
- Minimal and Modern interface
- Smooth Animations with Jetpack Compose
- Cover Art with lazy loading (Coil) and automatic centering
- Platform Logos SVG loaded from assets with fallback
- Region Badges with emoji flags (automatically mapped from source region names)
- ROM Cards with uniform maximum width (180dp)
- Image Carousel: Swipeable carousel for multiple ROM images
- Tree Structure with Expandable Groups: Settings organized into 8 collapsible categories for better navigation
- Source Management:
- View all installed sources
- Enable/disable sources
- Install new sources from ZIP files
- Update existing sources
- Uninstall sources
- Install default sources
- ROM Info Search:
- Choose search provider (Gamefaqs or MobyGames)
- Gamefaqs is the default provider
- IGDB integration settings (Client ID and Secret configuration)
- Download Configuration:
- Custom download folder selection
- Available space display
- Storage permissions management (Android 11+)
- WiFi-only downloads
- Notifications on/off (for downloads, installations, and updates)
- Installation Configuration:
- Delete original file after installation
- ES-DE compatibility with folder selection
- History Management:
- Clear download and extraction history (with confirmation)
- App Information (Always visible):
- App version
- GitHub link
- Support section
The app follows Clean Architecture with layer separation:
app/
โโโ data/
โ โโโ mapper/ # API โ Domain conversion
โ โโโ model/ # Data models (API, Platform)
โ โโโ remote/ # Retrofit, API service, Source executors
โ โโโ repository/ # Repository implementations
โ โโโ receiver/ # BroadcastReceiver for notifications
โ โโโ worker/ # WorkManager workers (Download, Extraction)
โโโ domain/
โ โโโ manager/ # Business logic managers (Download, Platform, Source)
โ โโโ model/ # Domain models (UI)
โ โโโ repository/ # Repository interfaces
โโโ presentation/
โโโ components/ # Reusable UI components
โโโ common/ # UI State classes
โโโ detail/ # ROM detail screen
โโโ downloads/ # Downloads screen
โโโ explore/ # Platform exploration screen
โโโ home/ # Home screen
โโโ navigation/ # Navigation graph
โโโ platform/ # ROMs by platform screen
โโโ search/ # Search screen
โโโ settings/ # Settings screen
โโโ sources/ # Source management screens
โโโ theme/ # Theme system
- Kotlin - Primary language
- Jetpack Compose - Modern UI toolkit
- Material 3 - Design system
- MVVM - Architectural pattern
- Hilt - Dependency Injection
- Coroutines & Flow - Concurrency and reactivity
- StateFlow - Reactive state management
- Retrofit - HTTP client
- OkHttp - Network layer with cookie management
- Gson - JSON parsing
- Coil - Image loading with SVG support
- DataStore - Persistent preferences
- WorkManager - Reliable background tasks
- File I/O -
.statusfile management for tracking downloads/installations
- Navigation Compose - Screen routing
- Safe Navigation - Back stack management to avoid blank screens
- DownloadWorker - File download in background with foreground service
- ExtractionWorker - File extraction/copy in background
- Foreground Notifications - Interactive notifications with actions
- SourceExecutor Interface - Common interface for all source types
- SourceApiAdapter - API source executor
- JavaSourceExecutor - Java/Kotlin source executor with dynamic class loading
- PythonSourceExecutor - Python source executor using Chaquopy
- Chaquopy - Python SDK for Android (Python 3.11)
- Android Studio Hedgehog (2023.1.1) or higher
- JDK 17
- Android SDK API 34
- Gradle 8.2+
- Clone the repository
git clone https://github.com/mccoy88f/Tottodrillo.git
cd Tottodrillo-
Open in Android Studio
- File โ Open โ Select the project folder
-
Sync Gradle
- Android Studio will automatically sync dependencies
-
Build & Run
- Select a device/emulator
- Run โ Run 'app'
No API key is required. The app uses public APIs from installed sources. Each source can be either:
- API-based: HTTP REST API endpoints
- Python-based: Web scraping via Python scripts
./gradlew assembleDebug./gradlew assembleReleaseThe APK will be generated in: app/build/outputs/apk/
- Installation: Install sources from ZIP files via file picker
- Validation: Automatic validation of source structure and metadata
- Version Management: Update sources with newer versions (preserves enabled state)
- Enable/Disable: Toggle sources on/off without uninstalling
- Uninstallation: Remove sources completely
- Default Sources: Optional automatic installation of a default set of sources on first launch
- Cache Management: Automatic cache invalidation when sources change
- Platform Mapping: Each source defines its own platform code mapping
- Advanced Source Services (NEW in v3.1.0):
- Centralized services in the app (HTTP client, cookies, SSL configuration, WebView helpers, Cloudflare-like bypass)
- Sources declare their needs via configuration, the app provides the implementation
- Strong decoupling between app and sources: the app is agnostic about which sources are installed
- Multiple simultaneous downloads
- Progress tracking for each download
- Cancel ongoing downloads
- Error handling with automatic retry
- Available space verification
- External SD card support
- Session cookie management for sources that require it
- ZIP archive extraction
- Copy/move non-archive files
- Progress tracking during installation
- Error handling with red clickable icon for retry
- Automatic UI update after installation
- Open installation folder
- Multiple download links per ROM (versions, formats)
- Enable/disable compatibility
- ES-DE ROMs folder selection
- Automatic installation in correct structure
- Automatic mapping
mother_codeโ folder
.statusfiles for tracking downloads/installations- Multi-line format to support multiple downloads of the same file
- Clear history with user confirmation
Tottodrillo supports three types of sources:
- API Sources: HTTP REST API endpoints
- Java/Kotlin Sources: Local Java/Kotlin code execution
- Python Sources: Local Python script execution (using Chaquopy)
For detailed documentation on creating sources, see the Tottodrillo-Source repository:
-
Create a ZIP package with:
source.json- Source metadata (required)platform_mapping.json- Platform code mapping (required)api_config.json- API configuration (for API sources)- Python script or JAR file (for Python/Java sources)
-
Install the source via Settings โ Sources โ Install Source
-
Enable the source and start using it!
See the documentation files for complete examples and API details.
The app currently supports 8 languages:
- ๐ฎ๐น Italian (default)
- ๐ฌ๐ง English
- ๐ช๐ธ Spanish
- ๐ฉ๐ช German
- ๐ฏ๐ต Japanese
- ๐ซ๐ท French
- ๐จ๐ณ Simplified Chinese
- ๐ต๐น Portuguese
The app automatically uses the device's language. If the language is not supported, it defaults to Italian.
Contributions are welcome! Please:
- Fork the project
- Create a branch for your feature (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow Kotlin conventions
- Use Jetpack Compose for UI
- Write tests when possible
- Document public APIs
- Keep code clean and readable
This project is released under the MIT License. See the LICENSE file for details.
- Various public ROM databases and sources
Platform SVG logos are provided by:
- alekfull-nx-es-de - ES-DE logo repository
- Chaquopy - Python SDK for Android
- Retro gaming community for support and feedback
- All contributors and app testers
IMPORTANT: This app is created for educational and research purposes.
- Using ROMs requires legal ownership of the original game
- Always respect copyright laws in your country
- The app does not provide ROMs, but only facilitates access to public databases
- The author assumes no responsibility for misuse of the application
Author: mccoy88f
Repository: https://github.com/mccoy88f/Tottodrillo
Issues: If you find bugs or have suggestions, open an Issue
If you like this project and want to support me, you can buy me a coffee! ๐บ
Your support helps me continue development and improve the app.
You can also buy me a coffee with PayPal ๐ป
Made with โค๏ธ for the retro gaming community
