Android control application for the Manafish ROV built with
Tauri, SolidJS, and Rust. It is an
Android-focused adaptation of the desktop app in ../app: it speaks
the exact same WebSocket protocol to the ROV firmware and renders the same HUD
and settings, but replaces keyboard/gamepad input with on-screen touch
controls (virtual joysticks and sliders).
- Touch controls replace the keyboard/gamepad tabs: two virtual joysticks (left = surge/sway, right = pitch/yaw) with sliders above them for heave and roll, rendered over the camera feed. They can be toggled in Settings → Touch Controls.
- HUD touch buttons for functions that are keybind-only on desktop: record, desired-depth stepping, auxiliary action axes, and custom actions.
- No updater, SD-card flashing, or window chrome — these are desktop-only features.
- Recording saves the MediaRecorder output directly (no FFmpeg remux).
Use an ethernet-to-USB-C adapter. The ROV firmware runs a DHCP server on its
ethernet port, so the phone gets an address automatically; the app then
connects to the same ws://10.10.10.10:9000 and WebRTC endpoints as the
desktop app.
- Bun
- Rust with the Android targets
(
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android) - Android SDK + NDK, with
ANDROID_HOMEandNDK_HOMEset - JDK 17+
bun install
bun run tauri android initbun run tauri android devbun run tauri android buildNote
On Windows, Tauri links the built Rust library into the Gradle project with
a symbolic link, which requires Developer Mode (or
SeCreateSymbolicLinkPrivilege). Without it the build fails after the Rust
compile step. Either enable Developer Mode, or copy the built library
manually and finish with Gradle:
Copy-Item src-tauri\target\aarch64-linux-android\debug\libmanafish_lib.so `
src-tauri\gen\android\app\src\main\jniLibs\arm64-v8a\
cd src-tauri\gen\android
.\gradlew.bat assembleArm64Debug -x rustBuildArm64Debug| Script | Description |
|---|---|
bun run dev |
Start Vite dev server |
bun run build |
Build frontend |
bun run test |
Run frontend tests (vitest) |
bun run lint |
Lint TypeScript |
bun run lint:fix |
Lint and auto-fix TypeScript |
bun run fmt |
Format TypeScript |
bun run fmt:check |
Check TypeScript formatting |
bun run lint:rs |
Lint Rust |
bun run lint:rs:fix |
Lint and auto-fix Rust |
bun run fmt:rs |
Format Rust |
bun run fmt:rs:check |
Check Rust formatting |
Rust tests: cargo test --manifest-path src-tauri/Cargo.toml.
This project is licensed under the GNU Affero General Public License v3.0 or later - see the LICENSE file for details.