A cross-platform graphical user interface for running and managing a Monero daemon (monerod) on Android and Linux desktop systems.
- Cross-Platform: Native builds for Android and Linux
- Automatic Architecture Detection: Detects ARM32, ARM64, and x86_64 architectures
- Storage Management:
- Flexible storage location selection
- SD card support on Android
- Automatic free space validation
- Minimum 10 GiB requirement (configurable)
- Process Management:
- Start/stop monerod daemon
- Android linker compatibility
- Background service support
- Real-time Statistics:
- Block height and sync progress
- Network connections (incoming/outgoing)
- Blockchain database size
- Network bandwidth monitoring
- Difficulty and transaction pool stats
- Version Tracking: Binary version detection and update notifications
- Material Design UI: Clean, modern interface using KivyMD
- Configurable: Extensive settings for network, RPC, P2P, mining, and more
Coming soon
- Android 5.0 (API 21) or higher
- ARM32, ARM64, or x86_64 architecture
- ~100+ GiB free storage for pruned node (default)
- ~300+ GiB free storage for full blockchain
- "Allow display over other apps" permission (for "Start on Boot")
- "All Files Access" permission (for persistent storage)
- Ubuntu 18.04+ / Debian 10+ / similar distribution
- Python 3.11+
- ~300 GiB free storage (for full blockchain)
- Download the latest APK from Releases
- Enable "Install from Unknown Sources" in Android settings
- Install the APK
- Grant notifications & storage permission when prompted
- Select storage location (internal or external)
- Start monerod
- Download the latest AppImage from Releases
- Make it executable:
chmod +x monerodui-*.AppImage - Run the AppImage:
./monerodui-*.AppImage
Clone the repository:
git clone https://github.com/PromptPunksFauxCough/monerodui.git
cd moneroduiThe project includes a build script that handles both platforms:
# Build for Android
bash ./build.sh android
# Build for Linux Desktop
bash ./build.sh desktop
# Build both
./build.sh all
# Skip dependency installation (if already installed)
./build.sh android --skip-deps-
Install dependencies:
sudo apt install -y git zip unzip openjdk-17-jdk python3-pip \ autoconf libtool pkg-config zlib1g-dev libncurses5-dev \ libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev pip3 install --user --upgrade Cython==0.29.33 virtualenv buildozer -
Build APK:
buildozer android debug
-
Output:
bin/*.apk
-
Install dependencies:
sudo apt install -y git build-essential pkg-config python3-dev \ python3-venv libgirepository1.0-dev libcairo2-dev \ gir1.2-gtk-3.0 libcanberra-gtk3-module pip install briefcase -
Build AppImage:
briefcase create linux appimage --no-docker briefcase build linux appimage --no-docker briefcase package linux appimage --no-docker
-
Output:
dist/*.AppImage
monerodui/
├── src/monerodui/
│ ├── main.py # Application entry point
│ ├── components/ # Reusable UI components
│ │ ├── status_card.py
│ │ └── node_stats_card.py
│ ├── screens/ # Screen definitions
│ │ └── main_screen.py
│ ├── ui/ # KV layout files
│ │ ├── components/
│ │ │ ├── status_card.kv
│ │ │ └── node_stats_card.kv
│ │ └── screens/
│ │ └── main.kv
│ ├── libs/ # Core functionality
│ │ ├── arch_detector.py # CPU architecture detection
│ │ ├── storage_manager.py # Storage location management
│ │ ├── process_manager.py # monerod process lifecycle
│ │ ├── node_stats.py # RPC statistics polling
│ │ └── version_checker.py # Binary version detection
│ ├── settings/ # App settings schema
│ └── assets/ # Icons and images
├── android/ # Android-specific files
│ ├── binary/ # Precompiled monerod binaries
│ └── p4a-recipes/ # Python-for-Android recipes
├── desktop/ # Desktop-specific files
│ └── binary/ # Precompiled monerod binary
├── buildozer.spec # Android build configuration
├── pyproject.toml # Desktop build configuration
├── build.sh # Build automation script
└── README.md
buildozer android debug deploy run logcatpython src/monerodui/main.pyOr using Briefcase:
briefcase devThe app requires precompiled monerod binaries for each target architecture:
Android:
android/binary/libmonerod_arm32.soandroid/binary/libmonerod_arm64.so
Desktop:
desktop/binary/monerod(x86_64)
Build these from the Monero source or download official releases.
Settings are accessible via the gear icon in the top-right corner:
- Network: Network type (mainnet/testnet/stagenet), offline mode
- P2P: Ports, connection limits, peer management
- RPC: RPC server configuration, authentication
- Blockchain: Pruning, sync mode, database settings
- Storage: Minimum free space requirement
- Background: Keep running when app is closed (Android)
Logs are written to: /storage/emulated/0/Download/full_app_log.txt
Logs are output to stdout/stderr
This permission MAY be necessary to store blockchain data in a location that persists across app reinstalls. Without it, users would lose access to all blockchain data when updating or reinstalling the app. If it is possible via android GUI for an app to take ownership over existing files any other way, let me know!
The Monero blockchain requires 300+ GiB of space (unpruned). The app defaults to a 10 GiB (for testing) minimum requirement, which accommodates a pruned blockchain with growth room.
When running in development mode, place the monerod binary in src/monerodui/ directory.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Test on both Android and Desktop
- Submit a pull request
- Monero Project - The cryptocurrency software
- KivyMD - Material Design components for Kivy
- Buildozer - Android packaging
- Briefcase - Desktop packaging
- Monerod-in-Termux - Inspiration
For issues, questions, or feature requests, please open an issue.
This software is provided as-is. Always verify downloaded binaries and use at your own risk. Ensure you understand the implications of running a full Monero node.