| Crates.io | droidtui |
| lib.rs | droidtui |
| version | 0.3.2 |
| created_at | 2025-10-01 09:31:46.511389+00 |
| updated_at | 2025-10-19 23:28:25.388466+00 |
| description | A beautiful Terminal User Interface (TUI) for Android development and ADB commands |
| homepage | https://github.com/sorinirimies/droidtui |
| repository | https://github.com/sorinirimies/droidtui |
| max_upload_size | |
| id | 1862311 |
| size | 2,409,898 |
A beautiful Terminal User Interface (TUI) for Android development, providing an intuitive interface for ADB (Android Debug Bridge) commands with stunning visual effects and animations powered by TachyonFX.

adb_cli (adb_client) for robust, typed ADB operationsAdbManager abstraction layer for maintainable, future-proof codeSee CHANGELOG.md for full release notes.
cargo install droidtui
git clone https://github.com/sorinirimies/droidtui.git
cd droidtui
cargo install --path .
droidtui
Or with cargo:
cargo run
When you launch DroidTUI, you'll see a stunning startup screen with:
The main interface provides access to functional ADB commands with expandable sub-options:
| Key | Action |
|---|---|
↑ / k |
Move up in menu / Scroll up in results |
↓ / j |
Move down in menu / Scroll down in results |
Enter / → |
Enter sub-options (main menu) |
Enter |
Execute selected command (child menu) |
← / Backspace |
Return to main menu (from child menu) |
Page Up |
Fast scroll up in results (10 lines) |
Page Down |
Fast scroll down in results (10 lines) |
Home |
Jump to beginning of results |
End |
Jump to end of results |
q / Esc |
Quit application / Return from results |
Ctrl+C |
Force quit |
Note: Screen streaming opens in a separate window. Close the window or press Q/Esc in it to stop streaming.
The interface adapts based on navigation mode:
Main Menu Mode:
Child Menu Mode:
DroidTUI includes several standalone examples demonstrating different features:
# Main menu with all features
cargo run --example main_menu
# Screen streaming
cargo run --example streaming
# Device information
cargo run --example device_info
# Package manager
cargo run --example package_manager
# All examples (run sequentially)
cargo run --example all_examples
See examples/README.md for detailed information.
Animated terminal recordings showcasing DroidTUI in action:
main_menu.tape - Complete main menu navigationstreaming.tape - Screen streaming featuredevice_info.tape - Device information commandspackage_manager.tape - Package managementnavigation.tape - Keyboard navigation and scrollingfeatures_highlight.tape - All major featuresall_examples.tape - Running all examplesGenerate demos with VHS:
# Install VHS
go install github.com/charmbracelet/vhs@latest
# Generate a demo
vhs examples/vhs/main_menu.tape
# Generate all demos
./examples/vhs/generate_all.sh
See examples/vhs/README.md for more information.
The v0.3.0 refactoring replaced string-based ADB commands with the typed adb_client crate, providing:
See REFACTORING.md for the complete migration story.
DroidTUI follows an Elm-like architecture with clear separation of concerns:
src/model.rs)src/view.rs)src/update.rs)src/message.rs)src/event.rs)src/adb.rs)src/effects.rs)src/stream.rs)The new AdbManager provides a clean abstraction over adb_client:
pub enum AdbCommand {
ListDevices,
Shell(String),
GetProp(String),
GetState,
// ... 20+ typed commands
}
pub struct AdbManager {
// Manages ADB server connection
}
impl AdbManager {
pub async fn execute(&mut self, command: AdbCommand) -> Result<String, AdbError>
}
This design:
See QUICK_REFERENCE.md for usage examples.
droidtui/
├── src/
│ ├── main.rs # Application entry point
│ ├── app.rs # Main application logic
│ ├── model.rs # Application state
│ ├── view.rs # UI rendering
│ ├── update.rs # State update logic
│ ├── message.rs # Message types
│ ├── event.rs # Event handling
│ ├── menu.rs # Menu system
│ ├── adb.rs # ADB command abstraction (NEW in v0.3.0)
│ ├── effects.rs # Visual effects
│ └── stream.rs # Screen streaming
├── examples/
│ ├── main_menu.rs # Full menu example
│ ├── streaming.rs # Streaming example
│ ├── device_info.rs # Device info example
│ ├── package_manager.rs # Package manager example
│ ├── all_examples.rs # Run all examples
│ ├── vhs/ # VHS demo tapes
│ └── README.md # Examples documentation
├── tests/
│ ├── integration_tests.rs # Integration tests
│ └── adb_tests.rs # ADB layer tests
├── docs/
│ ├── REFACTORING.md # Refactoring story
│ ├── IMPLEMENTATION_SUMMARY.md # Implementation details
│ ├── QUICK_REFERENCE.md # Quick API reference
│ └── CHANGELOG.md # Version history
└── scripts/
└── bump_version.sh # Version management
To add a new ADB command:
src/adb.rs:pub enum AdbCommand {
// ... existing commands
YourNewCommand { param: String },
}
AdbManager::execute:AdbCommand::YourNewCommand { param } => {
// Use adb_client API
let result = self.client.shell_command(device_serial, &format!("your command {}", param))?;
Ok(result)
}
src/menu.rs:MenuItem {
label: "🔧 Your Command".to_string(),
description: "What it does".to_string(),
command: AdbCommand::YourNewCommand { param: "value".to_string() },
children: vec![],
}
tests/adb_tests.rsSee QUICK_REFERENCE.md for detailed examples.
Visual effects can be modified in src/effects.rs:
Run the comprehensive test suite:
# Run all tests
cargo test
# Run with output
cargo test -- --nocapture
# Run specific test
cargo test test_adb_manager
# Run integration tests
cargo test --test integration_tests
# Check code coverage (requires tarpaulin)
cargo tarpaulin --out Html
Current test coverage: 82% with 31 passing tests.
📚 See QUICK_RELEASE.md for a quick start guide!
DroidTUI includes automated tools for version management and releases.
Install just command runner:
cargo install just
Bump version and release in one command:
just release 0.3.0
just # Show all available commands
just version # Show current version
just bump 0.3.0 # Bump version to 0.3.0
just release 0.3.0 # Full release workflow
just check-all # Run all checks (fmt, clippy, test)
Use the provided script:
./scripts/bump_version.sh 0.3.0
📚 Documentation:
DroidTUI includes comprehensive documentation:
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)cargo fmt)AdbCommand enum for ADB operationscargo test)cargo clippy)See QUICK_REFERENCE.md for API usage examples.
Future enhancements planned:
DroidTUI v0.3.0 performance improvements:
Benchmarks run on: Ubuntu 22.04, Ryzen 7 5800X, 32GB RAM
"No devices found"
which adbadb devices"FFmpeg not found" (for streaming)
sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)which ffmpegScreen streaming doesn't work
Commands fail with "Connection refused"
adb kill-server && adb start-serverFor more issues, check GitHub Issues.
Copyright (c) Sorin Albu-Irimies mihaiirimies@gmail.com
This project is licensed under the MIT license (LICENSE or http://opensource.org/licenses/MIT)
Made with ❤️ and ☕ for Android developers
Powered by Rust 🦀 | Built with Ratatui 🐭 | Enhanced by TachyonFX ⚡