Contributing
Wisp is open source. Contributions, bug reports, and relay operators are all welcome at github.com/xmahdi1/Wisp.
Project layout
Section titled “Project layout”core/ Rust workspace — all protocol logic (crypto, networking, storage, engine, relay)app/ Flutter app (Android, Linux, Windows) + the flutter_rust_bridge FFI in app/rustrelay/ Docker deployment for the standalone wisp-relay binaryThe 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 proto → core depends on all → app/rust, relay, and cli sit on top.
Prerequisites
Section titled “Prerequisites”- Flutter SDK
- Rust toolchain
- Linux desktop only: GTK 3,
libsecret, andlibnotifydevelopment packages - Windows desktop only: Visual Studio 2022 with the “Desktop development with C++” workload
Build the Rust core
Section titled “Build the Rust core”cd corecargo build # whole workspacecargo test # run the test suitecargo build -p wisp-core # scope to one crateBuild the app
Section titled “Build the app”cd appflutter pub get
flutter run -d linux # or: -d windows, -d androidflutter build apk --release --split-per-abiflutter build linux --releaseflutter build windows --releaseThe FFI bridge
Section titled “The FFI bridge”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:
flutter_rust_bridge_codegen generateThe generated files under app/lib/src/rust/ are otherwise not hand-edited.
A note on style
Section titled “A note on style”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.
