A lightweight, cross-platform Tor bridge reachability scanner with a modern UI.

BridgeHop tests whether Tor bridges are reachable from your network across all bridge
types — vanilla, obfs4, webtunnel, snowflake, meek, conjure, and dnstt — so
you can quickly find bridges that actually work where you are. It ships with built-in bridge
lists and live sources, and you can add your own.
Built with Tauri (a small Rust core + web UI) and a matching command-line companion that shares the same engine.
vanilla, obfs4, …).:443 for fronted/broker transports (snowflake, meek,
conjure, dnstt, webtunnel) — a completed TLS handshake confirms fronting works.torrc, JSON files, and per-bridge QR codes for sharing.crates/bridgehop-core # parsing, scanning engine, sources, storage, import/export
crates/bridgehop-cli # command-line companion (binary: `bridgehop`)
src-tauri # Tauri desktop shell (thin command/event layer)
ui # SvelteKit + Tailwind front end (static SPA)
All logic lives in bridgehop-core; the desktop app and CLI are thin shells over it.
Requirements: a recent stable Rust toolchain and Node.js 20+. (Linux also needs the WebKitGTK dev packages — see the release workflow for the exact list.)
# Install dependencies
npm install # root: Tauri CLI
npm --prefix ui install
# Run the desktop app in dev mode
npm run dev
# Build the desktop app (installer/bundle)
npm run build
# Build & use the CLI
cargo build --release -p bridgehop-cli
target/release/bridgehop sources --list
target/release/bridgehop scan --source obfs4 --category tested
cargo test --workspace --exclude bridgehop-app
BridgeHop also builds for Android (arm64). The desktop-only pieces — native file dialogs and deep verify, which spawns pluggable-transport clients — are compiled out; everything else (scanning every transport, live sources, history, QR) works on mobile.
Requires the Android SDK + NDK and a JDK 17. With ANDROID_HOME and NDK_HOME set:
rustup target add aarch64-linux-android
npm run tauri -- android init
npm run tauri -- android build --apk --debug --target aarch64
# → src-tauri/gen/android/app/build/outputs/apk/.../*.apk
bridgehop scan --file bridges.txt # scan lines from a file
bridgehop scan --source all --category tested # fetch from a source, then scan
cat bridges.txt | bridgehop scan # scan from stdin
bridgehop scan --file bridges.txt --format torrc > working.torrc # save only working bridges
bridgehop sources obfs4 --category full-archive # fetch a list
bridgehop export --source snowflake --format torrc
bridgehop history # recent scan runs
bridgehop history --reliability # per-bridge uptime leaderboard
The release workflow (run on a v* tag or manually) builds the desktop bundles for Windows,
Linux, and macOS, the CLI for each platform, and an Android arm64 APK, and uploads them all to a
draft GitHub Release. Code signing is left to the maintainer (configure the relevant secrets in
the workflow); the Android APK is debug-signed for sideloading.
BridgeHop is free software, licensed under the GNU General Public License v3.0 or later.
$ claude mcp add BridgeHop \
-- python -m otcore.mcp_server <graph>