[package]
name = "huddle"
version.workspace = true
edition.workspace = true
description = "Terminal-native chat over a self-hosted Tor onion relay (opt-in LAN mDNS / direct dial), all Megolm end-to-end encrypted."
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "README.md"
keywords = ["chat", "tui", "tor", "onion", "encryption"]
categories = ["command-line-utilities", "network-programming"]

[[bin]]
name = "huddle"
path = "src/main.rs"

[features]
default = []
# huddle 1.0: build with the in-process Tor (Arti) `onion-arti` door.
arti = ["huddle-core/arti"]

[dependencies]
huddle-core = { workspace = true }
libp2p = { version = "0.56", features = ["ed25519"] }
ratatui = "0.30"
crossterm = "0.29"
tokio = { version = "1", features = ["full"] }
clap = { version = "4", features = ["derive"] }
anyhow = "1"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2"
dirs = "6"
qrcode = "0.14"
base64 = "0.22"
# huddle 2.0.0 (F6): scrub the imported seed phrase from memory on drop —
# `Zeroizing<String>` wraps the recovery-phrase input buffer so the crown-jewel
# secret doesn't linger in the TUI's heap after the import completes.
zeroize = "1"
# huddle 0.6: opt-in update detection. ureq is lean (blocking,
# rustls-based) — we call it from a tokio::spawn_blocking task once
# per 24 h and parse the JSON response by substring (no serde_json
# dep needed). The user opts in at first launch; default is off.
# huddle 1.1.4: `socks-proxy` lets the update check tunnel the crates.io
# request through the local Tor SOCKS5 proxy, so an onion-default user never
# leaks their clearnet IP to crates.io just to poll for a new version.
ureq = { version = "2", default-features = false, features = ["tls", "socks-proxy"] }
