Skip to content

v0.9.0-rc.20

Choose a tag to compare

@github-actions github-actions released this 24 May 02:00
· 83 commits to main since this release
9c9e78f

iroh ecosystem bump from 0.98 → 1.0.0-rc.0, addressing the Android SIGABRT observed under iroh 0.98 in peat-ffi's Android Surface Test (defenseunicorns/peat#923). Active QUIC crypto provider remains aws-lc-rs (FIPS-approved); the bump is API-migration work plus the swarm-discovery + bionic-libc compatibility improvements that landed between iroh 0.98 and 1.0.

⚠ Breaking — public re-export surface change

peat_mesh::storage::iroh_types previously re-exported PathInfo and PathWatcher from iroh. iroh 1.0.0-rc.0 retired both types in favor of a borrowed Path<'a> + owned PathStats split, with Connection::paths_stream() returning a PathListStream (a Stream<Item = PathList<'_>>) where the prior PathWatcher::updated().await polling shape used to live. The re-exports now expose Path, PathEvent, PathEventStream, PathList, PathListStream, PathStats (in addition to Connection, EndpointHooks, PathId which were already there).

Downstream consumers (peat-protocol, peat-ffi, peat-mesh-node integrators) that imported peat_mesh::storage::iroh_types::PathInfo or PathWatcher directly must migrate:

  • PathInfoPath<'a> for borrowed access or peat_mesh::storage::mesh_sync_transport::PathSnapshot (a new owned struct introduced in this release; see Added below) when the snapshot needs to outlive the iteration.
  • PathWatcher::updated()Connection::paths_stream() consumed via Stream::next() (from tokio_stream::Stream or any equivalent StreamExt). The stream ends on connection close, replacing the prior Result-based loop termination.

⚠ Semantics change — MeshSyncTransport::peer_rtt

Path::rtt() returns Duration directly in iroh 1.0.0-rc.0 (was Option<Duration> on the retired PathInfo). MeshSyncTransport::peer_rtt's outer Option now means strictly "no selected path" — pre-rc.20 it could also mean "RTT not yet measured." Callers that branched on is_some() to detect "do we have telemetry yet?" should switch to comparing the inner Duration against zero / a small threshold. The new docstring on peer_rtt calls this out explicitly.

Added

  • peat_mesh::storage::mesh_sync_transport::PathSnapshot — owned per-path struct (id, is_selected, is_ip, is_relay, rtt, stats) returned by MeshSyncTransport::peer_paths. iroh 1.0.0-rc.0's Path<'a> borrows from a PathList<'_> snapshot, which would force callers to thread the snapshot's lifetime through their own code. PathSnapshot captures the borrowed predicates + PathStats at the moment of peer_paths() so callers can hold a Vec<PathSnapshot> indefinitely.
  • iroh-mdns-address-lookup = "=0.2.0" as a new direct dep. iroh 1.0.0-rc.0 extracted the mDNS support from iroh = { features = ["address-lookup-mdns"] } into a separate crate. The type name (MdnsAddressLookup) and behavior are unchanged; only the import path moved.
  • test_path_snapshot_id_and_stats_pin — structural pin on PathSnapshot.id (PathId: Copy + Eq + Hash) and PathSnapshot.stats (PathStats::udp_tx / udp_rx field shape from noq-proto). Catches future iroh-side refactors that change Path::id() / Path::stats() return types.

Changed

  • iroh = "=1.0.0-rc.0" (was 0.98). Exact-pinned during the iroh 1.0 rc-cycle.
  • iroh-blobs = "=0.101.0" (was 0.100). Same.
  • iroh-mdns-address-lookup = "=0.2.0" exact-pinned alongside iroh (extracted in the 1.0 cut, pre-1.0 SemVer applies to it).
  • Removed ed25519 = "=3.0.0-rc.4" + pkcs8 = "=0.11.0-rc.11" pre-release pins. iroh 1.0.0-rc.0's ed25519-dalek 3.0.0-pre.7 requires stable ed25519 ^3 which the resolver picks cleanly without our intervention.
  • iroh::endpoint::ConnectionInfoiroh::endpoint::Connection (rename in iroh 1.0). Affects IrohBlobStore's EndpointHooks::after_handshake impl (formation-member check is byte-for-byte preserved).
  • MeshSyncTransport::start_sync_connection — path-watcher loop rewired from PathWatcher::updated().await to Connection::paths_stream() + Stream::next(). The stream ends naturally on connection close, replacing the prior Result-based loop termination.

CI

No CI config changes vs. rc.19. The same --ignore RUSTSEC-2026-0118 / -0119 / -0120 advisory-set carries forward; iroh 1.0.0-rc.0's hickory transitive may resolve some of these on a future patch — revisit then.