DistSoc
Available for Android and Linux
Last updated: March 10, 2026
Changelog
March 10, 2026 (v2)
- Anchor advertised address — Anchors now advertise their stable bind address in the initial exchange, so peers always store the correct reconnection address instead of stale iroh-discovered IPs.
- Observed address notification — Every peer tells its new mesh partner "I see you at <ip:port>" during initial exchange — a lightweight STUN-like "who am I" on every connection.
March 10, 2026
- UPnP port mapping — Devices behind NAT routers automatically request a port forward via UPnP, becoming directly reachable without manual configuration.
- Auto-anchor promotion — Devices with a successful UPnP mapping self-declare as anchors, improving bootstrap diversity for all peers.
- Hole punch fix — Target-side hole punch connections were silently discarded; now properly registered as sessions so both sides of a NAT punch succeed.
February 24, 2026 (v2)
- Request Referrals button — On-demand anchor referral requesting in Network Diagnostics. Helps cycle out stale peers and discover current ones without waiting for the 10-minute automatic cycle.
- Docker bridge IP filtering — Relay introductions no longer leak Docker bridge IPs (172.17.x.x, 172.18.x.x), fixing connection failures through anchors running in Docker.
- Keepalive fix — Sender-side last_activity update prevents false zombie detection on connections where we send keepalives but the remote stops responding.
- Message threads — DM conversations grouped by partner with expandable thread view.
- Mesh/reach diagnostics — Peer cards show reach level badges (Mesh/N1/N2/N3) in diagnostics.
February 24, 2026
- Audience request button — "Ask to join audience" button on followed peers in the People tab. Shows status badges (requested/approved) for existing requests.
- DMs filtered from feed — Direct messages no longer appear in the Feed tab; they show only in the Messages tab.
- Peer bios displayed — Bio text now shown below peer names in People tab (peers list and follows list).
- People tab auto-refresh — Follows, peers, and audience now refresh every 10 seconds, so display names update automatically after profile sync.
- Button feedback — Diagnostics Refresh button now shows loading state and toast confirmation on completion.
February 23, 2026
- Fix connection lock contention — QUIC connect attempts no longer block all other tasks (diff cycle, accept loop, keepalive, rebalance). Previously one unreachable peer could freeze the entire node for 60+ seconds.
- Image attachments display — Fixed Content Security Policy blocking blob: URLs, so image attachments now render in post previews and feeds.
- Non-blocking startup — Referral peer connections now run in the background instead of blocking node startup.
- Connect timeout — 15-second cap on connection attempts during rebalance prevents prolonged lock holding.
- Android foreground service — Mesh connections stay alive when the app is in the background.
February 20, 2026
- IPv4-mapped address fix — Anchor's dual-stack socket reported peer addresses as IPv4-mapped IPv6 (e.g. [::ffff:1.2.3.4]) which IPv4-only clients couldn't reach. Now normalized to plain IPv4, fixing hole punching through NAT.
- Mesh keepalive — 30-second lightweight pings on mesh connections prevent zombie detection from killing idle connections and keep NAT UDP mappings alive. Zombie timeout raised from 2 to 10 minutes.
- Audience management — People tab now shows pending and approved audience members with Approve/Deny/Remove actions.
- Network diagnostics overhaul — Summary grid showing connection breakdown (Preferred/Local/Wide) and N2/N3 reach counts. Mesh connections list with slot badges. Peer cards replace flat list. 10-second auto-refresh while open.
- Manual rebalance — Trigger immediate mesh rebalancing from Settings for debugging.
- Reset all data — Danger Zone in Settings to clear all local data (posts, peers, blobs) while preserving identity key. Takes effect on restart.
February 19, 2026
- Reactive mesh growth loop — New peers connect within seconds instead of waiting up to 10 minutes. After each new connection, the node immediately seeks the most diverse next peer using N2 candidate scoring.
- Anchor matchmaking only — Anchors now exclusively matchmake (introduce peers) and never proxy bytes. Clearer separation of relay vs. introduction roles.
- Parallel hole punching — NAT traversal now tries all known addresses simultaneously, retrying every 2 seconds for a 30-second window. Both sides begin attempting to reach each other from the moment of introduction.
- Relay-observed address injection — Anchor now injects each peer's real public address (as seen from the QUIC connection) into introductions. Fixes NAT-to-NAT hole punching where peers only knew each other's private LAN addresses.
- Growth loop introduction fallback — When the growth loop's direct connect to an N2 peer fails (NAT), it now requests an introduction through the reporting peer for bilateral hole punching.