Skip to content

Contributing

Wisp is open source. Contributions, bug reports, and relay operators are all welcome at github.com/xmahdi1/Wisp.

core/ Rust workspace — all protocol logic (crypto, networking, storage, engine, relay)
app/ Flutter app (Android, Linux, Windows) + the flutter_rust_bridge FFI in app/rust
relay/ Docker deployment for the standalone wisp-relay binary

The Rust core does all the real work — cryptography, networking, storage, and the messaging engine — and the Flutter UI is a thin, swappable layer on top, bridged with flutter_rust_bridge.

Crate Role
wisp-crypto identity, seed phrase, Noise handshake, double ratchet, dead-drop derivation, safety numbers
wisp-proto versioned wire formats: presence, message frame, drop/wake protocols, payloads
wisp-net libp2p: QUIC/TCP + Noise, Kademlia DHT, NAT traversal, presence
wisp-relay-store blob mailbox with TTL, size caps, per-drop quotas (SQLite)
wisp-relay-node / wisp-relay the blind public node: relay + DHT + drop store + wake
wisp-core pairing, sessions, send decision, dead-drops, in-order receive, retry, search
wisp-cli headless client for testing the whole protocol without a UI

Dependency direction never points back up: crypto and proto are leaves → net depends on protocore depends on all → app/rust, relay, and cli sit on top.

  • Flutter SDK
  • Rust toolchain
  • Linux desktop only: GTK 3, libsecret, and libnotify development packages
  • Windows desktop only: Visual Studio 2022 with the “Desktop development with C++” workload
Terminal window
cd core
cargo build # whole workspace
cargo test # run the test suite
cargo build -p wisp-core # scope to one crate
Terminal window
cd app
flutter pub get
flutter run -d linux # or: -d windows, -d android
flutter build apk --release --split-per-abi
flutter build linux --release
flutter build windows --release

The Rust ↔ Dart bridge is generated. After changing anything under app/rust/src/api/, regenerate the bindings before touching the Dart that calls into it:

Terminal window
flutter_rust_bridge_codegen generate

The generated files under app/lib/src/rust/ are otherwise not hand-edited.

The codebase has no code comments by convention — names carry the meaning, and anything genuinely non-obvious goes in a commit message. Please match that when contributing.