Warning
This repository is under active development, and it has not been audited. Do not use it for any production use case. Do use it to experiment with the protocol 💖
iOS and Android clients using Anymone UniFFI bindings.
- Remote: phone-hosted protocol client, paired with a desktop by code.
- Room: broadcast chat.
- Bench: on-device crypto benchmarks.
- Attest: App Attest on iOS; hardware key attestation on Android.
Requires Rust. Build scripts expect a sibling ../anymone checkout; override
with ANYMONE_DIR or ANYMONE_MANIFEST. Keep its revision aligned with
Cargo.toml and CI's ANYMONE_REF.
Requires JDK 17, Android SDK 35, Gradle 8.9, and an NDK selected by
ANDROID_NDK_HOME.
cargo install cargo-ndk --locked
./scripts/build-android.sh
cd android
gradle --no-daemon assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkFor an x86-64 emulator, set WITH_EMULATOR=1 on the build script and pass
-Pemulator to Gradle. Minimum Android API: 29.
Requires macOS, Xcode and XcodeGen.
./scripts/build-ios.sh
cd ios/AnymoneApp
xcodegen generateOpen the generated project in Xcode to build and run.
scripts/archive-ios.sh produces an unsigned archive and
Release.entitlements. TestFlight distribution requires signing with those
entitlements, a distribution certificate and a provisioning profile.
Follow the remote client guide for a local demo, code pairing and ADB forwarding. On iOS, keep Remote foregrounded. Restart and pair again after restarting the desktop. On Android, Remote runs as a foreground service and reports its activity or latest issue in a notification, so locking the screen does not stop the session. Remote uses developer keys without platform attestation.
Room needs a bootstrap configuration with relay addresses reachable from the phone. Desktop loopback addresses will not work.
For Attest, configure the relay's policy with the iOS team and bundle IDs or Android package and signing-certificate digest. App Attest requires a physical device; TestFlight uses the production policy. Client identities are stored through iOS Keychain or Android Keystore.
Export CSV from Bench. The detailed suite uses four workers; core sweep tests 1, 2, 4 and 8 workers. Smoke and core-sweep CSVs cannot be merged into host timings.
To merge a detailed handset result with a matching Panetiere host benchmark:
cargo run --manifest-path tools/panetiere-mobile/Cargo.toml --release \
--bin panetiere-mobile-merge -- mobile.csv host.csv mobile-merged.csvServer count, clients, payload, encoding geometry and RS plan must match. The merge replaces client timings and preserves host server/verifier timings.
MIT — see LICENSE.