Install & build
fernweh runs on Linux desktop and Android. There is no hosted service — you build and run it yourself.
Desktop (Linux)
Prerequisites: Rust stable, trunk, tauri-cli, and webkit2gtk
(libwebkit2gtk-4.1-dev).
# Build the frontend (wasm)
(cd ui && trunk build --release)
# Run the desktop app
cargo tauri dev # or: cargo tauri build --no-bundle
Tests / CI gate
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace # 61 tests: protocol round-trips vs mocks
(cd ui && trunk build --release) # wasm compiles
Each backend has an integration test that pairs against its mock, persists the token, reconnects, sends keys, and asserts the exact wire bytes.
Android APK (sideload via USB)
Prerequisites: Android SDK + NDK, Java 17+, and the Android Rust targets
(rustup target add aarch64-linux-android).
cargo tauri android init # once
cargo tauri android build --debug --apk --target aarch64
adb install -r src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apk
Your phone and the target device must be on the same Wi-Fi. A --debug APK is
debug-signed and installs directly; a release build needs your own signing key —
see the Google Play release checklist.
Using the universal IR remote
There is no single "Samsung code" — vendors change IR protocols across models — so fernweh carries a code database and helps you find the match:
-
Pick the device type and brand (or choose Try every code for this device to sweep — see ADR-0011).
-
A wizard sends POWER for each code-set until the device reacts; that set is locked in.
-
Optionally scan the model-label sticker to jump straight to matching codes.
Codes are a curated import of the community
Flipper-IRDB (CC0), rendered from
(protocol, address, command) to on/off timings in tv-core::ir. Android’s IR API
is transmit-only — it cannot learn a code from your existing remote — see
ADR-0005.