2026-09-10 01:02:33 -04:00
|
|
|
[package]
|
|
|
|
|
name = "onionwire"
|
2026-09-10 14:50:01 -04:00
|
|
|
version = "0.2.0"
|
2026-09-10 01:02:33 -04:00
|
|
|
edition = "2024"
|
2026-09-10 13:14:55 -04:00
|
|
|
rust-version = "1.91"
|
2026-09-10 01:02:33 -04:00
|
|
|
description = "Lean Tor messenger: Arti in-process, identity=pubkey, onion=locator. No XMPP."
|
|
|
|
|
license = "MIT"
|
|
|
|
|
publish = false
|
2026-09-10 03:04:56 -04:00
|
|
|
repository = "https://github.com/sirius0xdev/onionwire"
|
2026-09-10 01:02:33 -04:00
|
|
|
|
feat(android): SDK AAR (UniFFI) + Compose APK, Arti rustls feature split
Adds the Android product alongside the existing Linux TUI, in one repo.
SDK — crates/onionwire-sdk is a UniFFI facade over the very same `onionwire`
crate the TUI runs on. Identity, invite, friend upsert, send/receive, rotate
and wipe all delegate; no protocol is reimplemented, so an Android peer and a
Linux peer interoperate. It is its own Cargo workspace because Arti's TLS
backends are non-additive: the TUI keeps native-tls (OpenSSL), Android needs
rustls + static-sqlite (no OpenSSL, no system libsqlite3 in the NDK).
android/ — Gradle project. :sdk produces the AAR (Kotlin bindings generated at
build time + libonionwire_sdk.so via cargo-ndk), :app is a Kotlin/Compose/M3
messenger depending on :sdk only. minSdk 26, targetSdk/compileSdk 36,
INTERNET-only, data in filesDir, backups excluded.
Root Cargo.toml grows `native-tls` (default) and `rustls` features so exactly
one Arti TLS backend is selected per build graph. The default build is
unchanged: same backend, ratatui still a normal dependency, src/tui.rs
untouched.
Also: Store::self_fingerprint/set_petname + Node wrappers (additive only),
scripts/build-android-local.sh, README sections, .gitignore for local SDK paths.
2026-09-10 18:20:19 -04:00
|
|
|
# The Linux TUI build is unchanged: `default` keeps Arti's native-tls
|
|
|
|
|
# (OpenSSL) backend exactly as before, and ratatui remains a normal
|
|
|
|
|
# dependency so `src/tui.rs` is untouched.
|
|
|
|
|
#
|
|
|
|
|
# Android has no OpenSSL in the NDK, so the SDK crate depends on this crate
|
|
|
|
|
# with `default-features = false, features = ["rustls"]`. Arti marks these two
|
|
|
|
|
# backends non-additive, so exactly one may be selected per build graph — hence
|
|
|
|
|
# exposing them as crate features.
|
|
|
|
|
[features]
|
|
|
|
|
default = ["native-tls"]
|
|
|
|
|
native-tls = ["arti-client/native-tls"]
|
|
|
|
|
rustls = ["arti-client/rustls"]
|
|
|
|
|
|
2026-09-10 01:02:33 -04:00
|
|
|
[dependencies]
|
feat(android): SDK AAR (UniFFI) + Compose APK, Arti rustls feature split
Adds the Android product alongside the existing Linux TUI, in one repo.
SDK — crates/onionwire-sdk is a UniFFI facade over the very same `onionwire`
crate the TUI runs on. Identity, invite, friend upsert, send/receive, rotate
and wipe all delegate; no protocol is reimplemented, so an Android peer and a
Linux peer interoperate. It is its own Cargo workspace because Arti's TLS
backends are non-additive: the TUI keeps native-tls (OpenSSL), Android needs
rustls + static-sqlite (no OpenSSL, no system libsqlite3 in the NDK).
android/ — Gradle project. :sdk produces the AAR (Kotlin bindings generated at
build time + libonionwire_sdk.so via cargo-ndk), :app is a Kotlin/Compose/M3
messenger depending on :sdk only. minSdk 26, targetSdk/compileSdk 36,
INTERNET-only, data in filesDir, backups excluded.
Root Cargo.toml grows `native-tls` (default) and `rustls` features so exactly
one Arti TLS backend is selected per build graph. The default build is
unchanged: same backend, ratatui still a normal dependency, src/tui.rs
untouched.
Also: Store::self_fingerprint/set_petname + Node wrappers (additive only),
scripts/build-android-local.sh, README sections, .gitignore for local SDK paths.
2026-09-10 18:20:19 -04:00
|
|
|
arti-client = { version = "0.46", default-features = false, features = [
|
|
|
|
|
"tokio",
|
|
|
|
|
"onion-service-client",
|
|
|
|
|
"onion-service-service",
|
|
|
|
|
"compression",
|
|
|
|
|
] }
|
2026-09-10 01:18:28 -04:00
|
|
|
futures = "0.3"
|
|
|
|
|
safelog = "0.9"
|
2026-09-10 01:43:02 -04:00
|
|
|
ed25519-dalek = { version = "2", features = ["rand_core"] }
|
|
|
|
|
rand = "0.8"
|
|
|
|
|
rusqlite = { version = "0.36", features = ["bundled"] }
|
2026-09-10 14:37:43 -04:00
|
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-util", "time", "net"] }
|
2026-09-10 01:18:28 -04:00
|
|
|
tor-cell = "0.46"
|
|
|
|
|
tor-hsservice = "0.46"
|
|
|
|
|
tor-rtcompat = { version = "0.46", features = ["tokio"] }
|
2026-09-10 01:54:19 -04:00
|
|
|
ratatui = { version = "0.30.2", default-features = false, features = ["crossterm"] }
|
2026-09-10 02:07:40 -04:00
|
|
|
x25519-dalek = { version = "2", features = ["static_secrets"] }
|
|
|
|
|
snow = "0.10"
|
2026-09-10 14:37:43 -04:00
|
|
|
serde_json = "1"
|
2026-09-10 14:50:01 -04:00
|
|
|
argon2 = "0.5"
|
|
|
|
|
chacha20poly1305 = "0.10"
|
2026-09-10 20:01:45 -04:00
|
|
|
sha3 = "0.10"
|
2026-09-10 01:18:28 -04:00
|
|
|
|
|
|
|
|
[dev-dependencies]
|
|
|
|
|
tempfile = "3"
|
|
|
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|