A sleek macOS desktop application for browsing Android device files via ADB (Android Debug Bridge).
π Visit DroidDock Website | π¦ Download Latest Release
- π± Device Detection: Automatically detects connected Android devices
- π File Browsing: Navigate through your Android device's file system with an intuitive interface
- ποΈ Multiple View Modes: Choose between Table, Grid, List, or Column (Miller) view with keyboard shortcuts
- π File Search: Search for files by name with case-insensitive matching and recursive search
- ποΈ File Deletion: Delete files and folders with confirmation dialogs and safety checks
- π₯ File Download: Download files from device to Mac with save dialog
- π€ File Upload: Upload files from Mac to device via floating action button
- β Multi-Select: Select multiple files with checkboxes, Ctrl/Cmd+click, and Shift+click range selection
- πΌοΈ Thumbnails: Automatic thumbnail generation for images and videos with lazy loading
- π Smart Breadcrumbs: Clean navigation with "Internal storage" labels and arrow separators
- ποΈ Hidden Files Toggle: Show or hide dot files with a single click
- π File Information: View file permissions, sizes, and modification dates
- πΎ Storage Info: Real-time storage usage display in VSCode-style status bar
- π― Contextual Actions: File actions (download/delete) appear in a slide-up bar when files are selected
- β¨οΈ Keyboard Shortcuts: Full keyboard navigation with arrow keys, view switching, and file operations
- π¨ Dark Mode Support: Beautiful dark mode with muted, cohesive color palette
- π οΈ Smart ADB Detection: Automatically finds ADB in common installation locations
- βοΈ Custom ADB Path: Set a custom ADB path if it's not automatically detected
DroidDock with grid view showing image thumbnails, contextual action bar, and floating upload button
Before running DroidDock, you need to have:
Install via Homebrew (Recommended):
brew install android-platform-toolsOr download manually:
- Download from: Android Platform Tools
DroidDock automatically checks these common ADB locations:
/opt/homebrew/bin/adb(Apple Silicon Homebrew)/usr/local/bin/adb(Intel Mac Homebrew)/opt/local/bin/adb(MacPorts)~/Library/Android/sdk/platform-tools/adb(Android Studio)
- Version: 20.19+ or 22.12+
- Download from: https://nodejs.org/
- Install from: https://rustup.rs/
-
Download: Get the latest
.dmgfile from the Releases page or DroidDock website. -
Install: Open the DMG and drag DroidDock to your Applications folder.
-
Launch: Since the app is currently unsigned, you need to:
- Right-click the app and select "Open"
- Click "Open" in the security dialog
- (Future releases will be code-signed to remove this step)
-
Auto-Updates: DroidDock will automatically check for updates on launch and notify you when new versions are available.
-
Clone the repository:
git clone https://github.com/rajivm1991/DroidDock.git cd droiddock -
Install dependencies:
npm install
-
Run in development mode:
npm run tauri dev
-
Or build for production:
npm run tauri build
The compiled app will be in
src-tauri/target/release/bundle/.
Enable USB debugging on your Android device:
- Go to Settings β About Phone
- Tap Build Number 7 times to enable Developer Options
- Go to Settings β Developer Options
- Enable USB Debugging
- Connect your device via USB
adb devicesYou should see your device listed.
- The app will automatically detect your device
- Select it from the dropdown menu
- Browse files starting from
/storage/emulated/0(main storage)
- Single-click folder names to open them
- Use breadcrumb navigation or the β Up button to go back
- Switch Views: Use view toggle buttons or keyboard shortcuts (Cmd+1/2/3/4) to switch between Table, Grid, List, or Column view
- Toggle Show Hidden Files in settings to view dot files
- Toggle Show Thumbnails in settings to enable/disable image and video previews
- Click Refresh to reload the device list
- Upload Files: Click the floating action button (bottom-right) to upload files to current directory
- File Actions: Select files to reveal the contextual action bar with Download and Delete options
- Type in the search bar to find files by name (case-insensitive)
- Check All subdirectories to search recursively through all folders
- Click Search or press Enter to execute the search
- Search results show full file paths
- Click Clear to exit search mode
- Click checkbox or click row to select files
- Ctrl/Cmd + Click: Toggle individual files for multi-select
- Shift + Click: Select a range of files between two clicks
- Ctrl/Cmd + A: Select all visible files
- Press Delete or Backspace key to delete selected files
- Confirm deletion in the dialog that appears
- The app prevents deletion of critical system directories
- Frontend: React + TypeScript + Vite
- Backend: Rust + Tauri
- Styling: Custom CSS with dark mode support
droiddock/
βββ src/ # React frontend
β βββ App.tsx # Main application component
β βββ App.css # Styles
β βββ main.tsx # Entry point
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ lib.rs # ADB commands and core logic
β β βββ main.rs # Application entry point
β βββ Cargo.toml # Rust dependencies
β βββ tauri.conf.json # Tauri configuration
βββ package.json # Node.js dependencies
The app implements these Tauri commands:
check_adb()- Verify ADB installationget_devices()- List all connected deviceslist_files(device_id, path)- List files in a directorydelete_file(device_id, file_path, is_directory)- Delete files and folders with safety checkssearch_files(device_id, search_path, pattern, recursive)- Search for files by nameget_thumbnail(device_id, file_path, extension, file_size)- Generate thumbnails for images and videosdetect_storage_path(device_id)- Automatically detect the primary storage pathget_storage_info(device_id, path)- Get storage usage statistics for devicedownload_file(device_id, device_path, local_path)- Download file from device to Macupload_file(device_id, local_path, device_path)- Upload file from Mac to deviceset_adb_path(path)- Set custom ADB pathget_current_adb_path()- Get current ADB path
DroidDock supports these keyboard shortcuts for faster navigation and file management:
| Shortcut | Action |
|---|---|
Ctrl/Cmd + F |
Focus search bar |
Ctrl/Cmd + A |
Select all visible files |
Ctrl/Cmd + 1 |
Switch to Table view |
Ctrl/Cmd + 2 |
Switch to Grid view |
Ctrl/Cmd + 3 |
Switch to List view |
Ctrl/Cmd + 4 |
Switch to Column view |
Arrow Keys |
Navigate between files (Up/Down in table/list, all directions in grid) |
Space |
Toggle selection on focused file |
Enter |
Open focused folder or execute search |
Delete or Backspace |
Delete selected files (shows confirmation dialog) |
Escape |
Clear selection or exit search mode |
If the app can't find ADB:
-
Install ADB via Homebrew:
brew install android-platform-tools
-
Or set a custom path:
- The app will show a setup screen
- Enter the full path to your ADB executable (e.g.,
/opt/homebrew/bin/adb) - Click "Set Path"
- Ensure USB debugging is enabled on your device
- Check if device is recognized:
adb devices - Try clicking the "Refresh" button in the app
- You may need to accept the debugging authorization prompt on your device
- Some system directories require root access
- Try browsing user-accessible directories like
/storage/emulated/0or/sdcard
- Single-click on the folder name (the blue text) to open it
- Wait for the loading indicator to finish
- Note: Clicking elsewhere on the row selects the folder instead of opening it
npm run tauri devChanges to React files will hot-reload automatically. Changes to Rust files will trigger recompilation.
npm run tauri build# Frontend tests
npm test
# Rust tests
cd src-tauri && cargo testTo preview the website (docs/index.html) locally:
# Using Python (built-in on macOS)
cd docs && python3 -m http.server 8080
# Or using npx
cd docs && npx serveThen open http://localhost:8080 in your browser.
To stop the server: Press Ctrl+C or run pkill -f "python3 -m http.server 8080"
DroidDock uses an automated release workflow:
-
Prepare the release (updates versions and creates git tag):
npm run release:prepare 0.2.0
-
Push the changes and tag:
git push origin <branch-name> git push origin v0.2.0
-
Automated build: GitHub Actions will:
- Build a universal macOS binary (Apple Silicon + Intel)
- Create a DMG installer
- Generate updater manifest with signature
- Create a GitHub Release with the DMG attached
-
Auto-update: Users with existing installations will be notified of the update.
- Workflow file:
.github/workflows/release.yml - Version script:
scripts/release-prepare.js - Updater config:
src-tauri/tauri.conf.json(plugins.updater) - Signing: Uses Tauri updater signatures (stored in GitHub Secrets)
To remove macOS security warnings, code signing requires:
- Apple Developer Program membership ($99/year)
- Code signing certificate
- Notarization workflow
Potential features for future releases:
- π· File Preview - Preview images and text files in-app
- πΎ Drag & Drop - Drag files to/from the app
- π± Multiple Devices - View multiple devices simultaneously
- β±οΈ File Sync - Sync files between Mac and Android
- π Sortable Columns - Sort files by name, size, date, etc.
- π Transfer Progress - Show progress bars for file transfers
- π Folder Download/Upload - Support for transferring entire directories
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
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
MIT License - see LICENSE file for details.
- Built with Tauri - A framework for building desktop applications with web technologies
- Icons from system emoji set
- Inspired by the need for a simple, native Android file browser on macOS
If you encounter any issues or have questions:
- Open an issue on GitHub Issues
- Check the Troubleshooting section above
Note: DroidDock requires USB debugging to be enabled on your Android device. This app does not collect or transmit any personal data.