huddle 1.0: a unified, display-ready contact assembled from the durable
contacts address book joined with live, derived state. Unlike
KnownPeerStatus (one row per ephemeral libp2p multiaddr), this is
keyed by the stable fingerprint, so it survives a peer leaving the LAN —
the durable link that lets two people keep chatting over the relay.
huddle 1.0: how to reach the relay backend — the bundle of transport
inputs resolved by main.rs (CLI + config) and handed to the core. The
core turns these into the ordered set of TransportProfile doors.
huddle 1.0: how a conversation’s messages are currently reaching the
other side. Status only — the app always picks the path automatically;
this just makes the security context legible per chat.
huddle 1.1: the operator’s clearnet door onto the SAME relay backend as
DEFAULT_SERVER_URL, fronted by a cloudflared tunnel (valid TLS, no
domain of our own). Baked in so users who can’t reach Tor still connect with
zero config. It sits LAST in [default_fallback_order], so a working onion
is always preferred and a Tor user never dials clearnet — this only lights
up when the onion is unreachable.
huddle 0.8: the canonical centralized server, reachable only as a Tor
v3 onion. Baked in so the client connects to the operator’s relay by
default; override with the --server <ws-url> CLI flag, disable with
--no-server. Reached through the local Tor SOCKS5 proxy.
huddle 0.7: compute the deterministic room_id for a 1-1 DM between two
fingerprints. Both peers, regardless of who calls start_direct first,
derive identical IDs — no created_at mixing, no creator-fingerprint
asymmetry. The pair is sorted lexicographically so the function is
commutative.
huddle 0.5.1: parse input as a huddle ID — either HD--prefixed
or a bare 24-char hex run with or without dashes — and return it in
the canonical lowercase-dashed form xxxx-xxxx-...-xxxx that
matches identity::compute_fingerprint’s output. Returns None for
anything that isn’t a syntactic ID (the caller falls back to
username lookup).
Public accessor for the Argon2id salt length used when deriving room
passphrase keys. Exists so downstream tooling (status pages, debug
CLIs, integration tests) can confirm the expected size without
re-importing the constant from crypto::passphrase.