fernweh — overview

An ad-free, tracking-free, local-first universal TV/AV remote. fernweh discovers devices on your Wi-Fi, pairs with them, and controls them — over the network or your phone’s infrared blaster. Built with Rust, Tauri v2, and Leptos; runs on Linux desktop and Android.

Every "TV remote" on the app stores is adware: full-screen video ads between button presses, "premium" paywalls to unlock the number pad, analytics SDKs that phone home your device list. fernweh opens no network sockets except to devices on your own LAN (plus SSDP/mDNS discovery and Wake-on-LAN broadcast). No accounts, no ads, no telemetry, no cloud. Ever. It is MIT-licensed — fork it, audit it, keep it.

What it controls

Honest status: ✅ works · ◐ partial · ✖ not possible over LAN · ⚠ built, not yet hardware-verified.

Device Control

Samsung (Tizen 2016+)

✅ Network (WebSocket + Wake-on-LAN); on-TV pairing prompt → token.

Roku

✅ Network (ECP REST); no pairing needed.

LG (webOS)

✅ Network (WebSocket + pointer socket); prompt → client-key.

PS4 / PS5

◐ Wake / standby over DDP (needs a PSN credential); no d-pad over LAN.

Fire TV (Fire OS)

⚠ ADB backend (input keyevent); requires ADB debugging enabled on the device.

Android TV (Sony / Shield / Chromecast / Philips / TCL)

⚠ Android TV Remote v2 (protobuf over TLS), PIN pairing.

Universal IR (phone blaster)

✅ 3576 CC0 code-sets across 47 categories (Flipper-IRDB); find-code wizard + power-code sweep.

⚠ backends are wired end-to-end and mock/unit-tested but await a live hardware round-trip — see Known gaps.

Beyond single devices

  • Per-button editing and macros / activities.

  • Bridge (composite) remotes — route each button to a different device and method (a TV over IR, a Fire TV over ADB…), including multi-target fan-out. See ADR-0008.

  • Model-label OCR — scan a device’s model sticker on-device to find its IR codes.

  • Global search across the whole device / brand catalogue.

How it’s built

tv-core (protocols + IR DB) · tv-mock (test servers) · src-tauri (Tauri v2 shell) · ui (Leptos wasm). See Architecture for the crate layout and the TvBackend trait, Install & build to run it, and the Architecture Decisions for why each non-obvious choice was made.

Privacy

fernweh makes zero external network calls. The only HTTP client lives in tv-core and only ever targets LAN devices; the frontend and mocks have no HTTP client at all. No analytics, no crash reporting, no update pings. The single outbound action anywhere is the optional Support fernweh button, which opens Ko-fi in your own browser — see ADR-0010.