Skip to content

Releases: n0-computer/iroh

v0.93.2

14 Oct 08:53

Choose a tag to compare

🐛 Bug Fixes

  • (iroh) Ensure initial addresses are published via discovery (#3525) - (ca85faa)

v0.93.1

13 Oct 09:41

Choose a tag to compare

📚 Documentation

v0.93.0

09 Oct 00:54

Choose a tag to compare

⚠️ Breaking Changes

  • iroh
    • removed

      • MdnsDiscovery::new is now private
      • MdnsDiscoveryBuilder::new is now private
        • Use MdnsDiscovery::builder() to create an MdnsDiscoveryBuilder
        • Use MdnsDiscoveryBuilder::default() to create an MdnsDiscoveryBuilder
      • iroh::Endpoint::direct_addresses
      • iroh::Endpoint::home_relay
      • iroh::Endpoint::add_node_addr
      • iroh::Endpoint::remote_info
      • iroh::Endpoint::remote_info_iter
      • iroh::RemoteInfo
      • iroh::discovery::DiscoveryItem
      • “examples” feature is removed, you no longer need to include it in the list of features to run an example
    • added

      • MdnsDiscoveryBuilder::service_name()
      • iroh::Endpoint::online
      • iroh::Endpoint::watch_node_addr
    • changed

      • API Changes
        • iroh::Endpoint::node_addr now returns synchronously the current addressing information

        • iroh::Endpoint::watch_node_addr now returns a watchable for NodeAddr not Option<NodeAddr>

        • iroh::discovery::mdns::DiscoveryItem

        • iroh::Endpoint::latency

        • iroh::PublicKey::fmt_short now returns a impl Display rather than a String

          To use it conveniently in tracing or logging precede the fmt_short() call with a %:

          tracing::info!(node_id = %node_id.fmt_short())
    • wire breaking changes

      • Default service name changed from iroh.local.swarm to irohv1
      • Provenance field name in DiscoveryItem changed from local.swarm.discovery to mdns
      • Switches to use X-Iroh headers for the captive portal challenges, this is currently backwards compatible and will remain so until the next release

⛰️ Features

🐛 Bug Fixes

🚜 Refactor

  • (iroh) [breaking] Remove Endpoint::add_node_addr (#3485) - (0ffadef)
  • Rename last two local_endpoints usages to direct_addresses (#3472) - (9c8540f)
  • [breaking] Switch to iroh headers for captive portal checks (#3488) - (d6f33f9)
  • [breaking] Move examples deps to non-wasm dev deps (#3509) - (81e340f)

📚 Documentation

  • (iroh) Add screening-connection example (#3360) - (797fae6)

⚙️ Miscellaneous Tasks

  • Bump some spans up to warn, to ensure they are logged (#3466) - (2e42085)
  • Enable dependabot for crates and docker (#3497) - (968a70b)

v0.92.0

18 Sep 19:40

Choose a tag to compare

⚠️ Breaking Changes

  • iroh
    • added
      • “passive” mode for mDNS discovery
        • MdnsDiscovery::new(node_id: NodeId) → MdnsDiscovery::new(node_id: NodeId, advertise: bool)
    • changed
      • The subscribe method for the Discovery trait now returns a stream of DiscoveryEvent rather than a DiscoveryItem. A discovery event now includes expiry events that notify you when a node that was passively discovered (usually by mDNS) can no longer be found.
        • fn subscribe(&self) -> Option<BoxStream<DiscoveryItem>>fn subscribe(&self) -> Option<BoxStream<DiscoveryEvent>>

⛰️ Features

  • (iroh) [breaking] Add passive mode for mdns discovery (#3401) (#3403) - (c5a623c)
  • (iroh) [breaking] Emit mDNS expiry events (#3409) - (150b841)
  • (iroh-base) Impl Deref for PublicKey (#3438) - (fa1e946)
  • Allow configuring the max number of TLS tickets (#3442) - (d6f4fa9)

🐛 Bug Fixes

🚜 Refactor

  • (iroh) Re-batch datagrams inside RelayTransport instead of the ActiveRelayActor (#3421) - (b791123)

📚 Documentation

  • (iroh-relay) Remove incorrect help text about default config file creation (#3258) (#3446) - (4583b12)

⚙️ Miscellaneous Tasks

Cargo

v0.91.2

25 Aug 16:38

Choose a tag to compare

chore: Release iroh-base version 0.91.2

v0.91.1

25 Aug 16:38

Choose a tag to compare

chore: Release iroh-base version 0.91.1

v0.91.0

30 Jul 22:19

Choose a tag to compare

⚠️ Breaking Changes

  • iroh

    • changed
      • edition is now set to edition2024

      • The relay wire protocol changed: All relayed messages now contain at least an additional ECN byte.

        They might be accidentally compatible when GSO is not enabled, but they're likely not.

        This means this version of iroh can't connect to older relays or older clients on newer relays.

        • ClientToRelayMsg::SendPacket was removed in favor of ClientToRelayMsg::Datagrams
        • RelayToClientMsg::ReceivedPacket was removed in favor of RelayToClientMsg::Datagrams
        • FrameType has changed variants:
          • SendPacket and RecvPacket were removed
          • ClientToRelayDatagram and ClientToRelayDatagramBatch were added
          • RelayToClientDatagram and RelayToClientDatagramBatch were added
      • The default relay URLs have changed. We are still maintaining relay URLs for version 0.90.0, those will be phased out next release.

      • Updated n0-watcher from version 0.2 to 0.3

        • Migration guide for users:
          • endpoint.node_addr().initialized().await? -> endpoint.node_addr().initialized().await (no ? needed anymore) and similarly for endpoint.home_relay() and other uses of Watchers.
          • endpoint.node_addr().get()? -> endpoint.node_addr().get() and similarly for endpoint.home_relay() and other uses of Watchers.
          • If all you have is a &impl Watcher but you need the current value, then you can't call Watcher::get anymore, as that now takes a &mut self instead of &self. You can work around this by .clone()ing to an intermediate watcher:watcher_ref.get() -> watcher_ref.clone().get()
    • removed
      • Removed iroh::discovery::pkarr::dht::Builder::initial_publish_delay
      • Removed iroh::endpoint::Builder::relay_conn_protocol. It's now always websockets
      • Removed the iroh::RelayProtocol re-export (the type was removed in iroh-relay)
  • iroh-relay

    • removed
      • Removed iroh_relay::client::SendMessage and iroh_relay::client::ReceivedMessage in favor of ClientToRelayMsg and RelayToClientMsg respectively.
      • Removed ClientBuilder::is_prober
      • Removed ClientBuilder::protocol
      • Removed http::Protocol type
      • Removed relay_accepts and websocket_accepts metrics
    • changed
      • impl Stream for Client now produces RelayToClientMsg instead of ReceivedMessage
      • Client now impl Sink<ClientToRelayMsg> instead of impl Sink<SendMessage>
      • Moved protos::relay::FrameType to protos::common::FrameType and adjusted frame types to those of the current set of protocols
      • Renamed frames_rx_ratelimited_total metric to bytes_rx_ratelimited_total, which now tracks bytes not frames

⛰️ Features

  • (iroh) Update to new relay servers (#3412) - (f3e4307)
  • (iroh,iroh-relay) [breaking] Use stride instead of custom split protocol, send ECN bits (#3389) - (f3fd988)
  • (iroh-relay) [breaking] Implement new handshake protocol, refactor frame types (#3331) - (3a1592a)
  • [breaking] Update to edition 2024 and update deps to latest (#3386) - (e2cfde7)
  • Add the timeout duration to the relay dial error (#3406) - (db36c65)

🐛 Bug Fixes

  • (iroh) Use std Mutex instead of tokio Mutex (#3374) - (eb383a6)
  • (iroh) Track path validity for all paths and replace BestAddr with PathValidity (#3400) - (a3187ca)
  • (iroh) Re-batch received relay datagram batches in case they exceed max_receive_segments (#3414) - (a8485ad)
  • (iroh) Only clear last_call_me_maybe when the best addr became invalid (#3415) - (bcb60d4)
  • (iroh-relay) Fix proptests, make Datagrams::segment_size be an Option<NonZeroU16> (#3404) - (75fd57c)
  • Fix dht publishing at startup (#3397) - (dd1d692)
  • Better tracing spans (#3399) - (f8f7f95)
  • Add missing use<> for wasm_browser (#3411) - (91c2e63)
  • Wait for at least one ipv6 and ipv4 qad report (#3413) - (b755db4)

🚜 Refactor

  • (iroh,iroh-relay) Remove legacy relay path, make websocket connections default (#3384) - (0776687)

📚 Documentation

  • (iroh) Use iroh::Watcher reexport in docs (#3375) - (9c023bf)

🧪 Testing

  • (iroh) Make endpoint_relay_connect_loop not flaky (#3402) - (8426241)

⚙️ Miscellaneous Tasks

v0.90.0

30 Jun 13:15

Choose a tag to compare

⚠️ Breaking Changes

  • iroh

    • removed

      • iroh::endpoint::Builder:: tls_x509 removed, this is the tls mechanism that has been removed
      • iroh::endpoint::Builder:: tls_raw_public_keys  removed, this is the default mechanism now, so not needed anymore
      • Display implementation was removed for SecretKey, use .to_bytes() and encode as hex to get the previous bytes explicitly, for example:
      let encoded_key = data_encoding::HEXLOWER.encode(&secret_key.to_bytes())
      • removed iroh_relay::protos::stun::StunError
      • removed iroh_relay::server::testing::stun_config
      • removed iroh_relay::protos::stun
      • removed iroh_relay::quic::QuicClient::get_addr_and_latency
      • removed DEFAULT_STUN_PORT
      • Removed iroh::discovery::dns::DnsDiscovery::new, use DnsDiscovery::builder instead
      • Removed iroh::discovery::pkarr::PkarrPublisher::new, use PkarrPublisher::builder instead
      • Removed iroh::discovery::pkarr::PkarrPublisher::with_options, use PkarrPublisher::builder instead
      • Removed iroh::discovery::pkarr::PkarrResolver::new, use PkarrResolver::builder instead
    • changed

      • all public APIs return concrete error types, rather than anyhow::Error
      • iroh::protocol::ProtocolHandler methods now return impl Future instead of BoxFuture. You can simply remove the Box::pin(async move {}) from the implementations and instead implement the methods as async fn. See the updated documentation for the iroh::protocol module for an example.
      • iroh::protocol::ProtocolHandler is no longer dyn-compatible. If you need a dyn-compatible version, you need to build your own dyn-compatible wrapper trait. See the (non-public) DynProtocolHandler in iroh::protocol as an example.
      • iroh::watcher is now its own crate n0-watcher, but the Watcher trait is still a top level export in iroh
      • iroh::endpoint::Endpoint::node_addr now returns impl Watcher<Value = Option<NodeAddr>>
      • iroh::endpoint::Endpoint::home_relay now returns impl Watcher<Value = Vec<RelayUrl>>
      • iroh::endpoint::Endpoint::bound_sockets now returns Vec<SocketAddr>
      • iroh-quinn is updated to 0.14.0
      • iroh::protocol::RouterBuilder::accept now takes impl Into<Box<dyn DynProtocolHandler>> instead of impl ProtocolHandler. Because of a blanket From impl this change does not need any changes by users: you can still pass any impl ProtocolHandler to accept. Additionally, if you have your own builder struct upstream, you can now also pass a Box<dyn DynProtocolHandler> to accept, which wasn't possible previously.
      • iroh::discovery::Lagged changed from a tuple to a struct
      • iroh::watcher::Disconnected is changed from a tuple to a struct
      • iroh::watcher::Disconnected is no longer UnwindSafe or RefUnwindSafe
      • iroh::watcher::InitializedFut is no longer RefUnwindSafeiroh-base
      • iroh::endpoint::Builder::add_discovery now takes an impl iroh::discovery::IntoDiscovery argument instead of a closure that returns a Discovery. You can implement that on a builder struct, and any T: Discovery has an auto-impl of IntoDiscovery.
      • iroh::discovery::Discovery::resolve no longer gets a &Endpoint argument. If you need an endpoint in your discovery service, add a builder struct and implement IntoDiscovery for it, which gives you an endpoint that you can clone into your service
      • iroh::discovery::pkarr::PkarrPublisher::n0_dns now takes no arguments and returns a PkarrPublisherBuilder. The secret key is set on PkarrPublisherBuilder::build instead.
  • iroh-base

    • changed
      • iroh_base::ticket::Error is renamed to iroh_base::ticket::ParseError
      • iroh_base::key::KeyParsingError has changed from a thiserror error to a snafu erroriroh-relay
  • iroh-relay

    • changed
      • iroh_relay::node_info::MaxLengthExceededError is no longer UnwindSafe or RefUnwindSafe
      • iroh_relay::node_info::MaxLengthExceededError was changed from a thiserror to a snafu error
      • iroh_relay::client::ConnSendError is now iroh_relay::client::SendError
      • iroh_relay::protos::stun::Error is now iroh_relay::protos::stun::StunError

⛰️ Features

  • (iroh) Allow protocols to gracefully shutdown connections (#3319) - (da571c1)
  • (iroh) [breaking] Make ProtocolHandler use async functions (#3320) - (e36ac77)
  • (iroh) [breaking] Remove deprecated x509 libp2p TLS authentication (#3330) - (136b855)
  • (iroh) [breaking] Introduce transport abstraction (#3279) - (d915bfd)
  • (iroh) Re-export n0_watcher::Watcher trait (#3356) - (bc6e9e3)
  • (iroh) [breaking] Expose DynProtocolHandler (#3366) - (056df1d)
  • Make Endpoint::node_addr watchable and add trait Watcher & combinators (#3045) - (7911255)
  • [breaking] Concrete errors (#3161) - (75eae87)
  • Add methods to create variants of the iroh-base::ticket::ParseError enum. (#3362) - (1859de3)

🐛 Bug Fixes

  • (iroh) Correctly hook up ipv6 addr lookups (#3342) - (b8b5bc3)
  • (iroh-base) [breaking] Remove display impl for SecretKey (#3364) - (19323e6)
  • Remove unneeded lifetime bound for watcher in wasm (#3354) - (84dd511)

🚜 Refactor

  • (iroh) [breaking] Simplify discovery errors (#3340) - (fad99ab)
  • (iroh) [breaking] Rename ProtocolError to AcceptError (#3339) - (d4de591)
  • (iroh) [breaking] Rework net_report (#3314) - (dcbebe9)
  • (iroh) [breaking] Add IntoDiscovery trait (#3327) - (7f2cdd1)
  • (iroh-relay,iroh) Slightly clean up staggered DNS errors (#3337) - (444c76b)

🧪 Testing

  • (iroh-relay) Add 300ms timeout to the test_qad_client_closes_unresponsive_fast test (#3332) - (b647af9)

⚙️ Miscellaneous Tasks

  • ()* Upgrade to the latest iroh-metrics, portmapper, and swarm-discovery (#3369) - (79bc05b)
  • (iroh) [breaking] Change default relays to new "canary" relays (#3368) - (6e72f20)
  • (iroh-relay) Make QAD test non-flaky by using tokio's paused time (#3341) - (2b6c258)
  • (iroh-relay) Fix cargo check warning (#3346) - (c7cf08d)
  • Make clippy 1.87 happy (#3318) - (02acba9)
  • Update project_sync workflow (#3325) - (518400b)

Bugfix

Read more

v0.35.0

12 May 15:47

Choose a tag to compare

⚠️ Breaking Changes

  • iroh
    • remove
      • pub fn default_from_node(url: RelayUrl, stun_port: u16) -> RelayMap
    • change
      • pub fn from_url(url: RelayUrl) -> RelayMap, use From<RelayUrl> instead
      • Router::spawn is now a plain function instead of an async fn
      • Router::spawn is now infallible, instead of returning anyhow::Result<()>
      • All metrics structs (iroh::metrics::{MagicsockMetrics, PortmapMetrics, NetReportMetrics}) now implement MetricsGroup from the new version 0.34 of iroh-metrics and no longer implement traits from [email protected].
      • Metrics are no longer registered onto the static superglobal Core. iroh does not use static_core feature of iroh-metrics. Metrics are now exposed from the subsystems that track them, see e.g. Endpoint::metrics.
      • Several methods now take a Metrics argument. You can always pass Default::default if you don't want to unify metrics tracking with other sections.
      • pkarr::SignedPacket, as used as a parameter in iroh::dns::node_info::NodeInfo::to_pkarr_signed_packet and iroh::dns::node_info::NodeInfo::from_pkarr_signed_packet is now expecting pkarr at major version 3 instead of 2
  • iroh-relay
    • change
      • Minor change in the From impls for ConnSendError due to changing the underlying library

⛰️ Features

  • (iroh) Allow connecting with "fallback" ALPNs (#3282) - (839bfaa)
  • (iroh) Add net-report method on the iroh::Endpoint that returns a Watchable<Report> (#3293) - (3448b4b)
  • (iroh,iroh-relay) Enable proxying and test-utils support for websockets, allow configuring websockets in endpoint::Builder (#3217) - (8a24a95)
  • (iroh-relay) [breaking] Adjust APIs to make it easier to create RelayMaps from lists of RelayUrls (#3292) - (cd0a47a)
  • Update to [email protected] (#3274) - (1d79f92)
  • [breaking] Metrics refactor (#3262) - (1957ca8)
  • Fix minimal crates selection (#3255) - (a62a2bd)
  • Improve transfer, publish, resolve examples (#3296) - (30577d3)

🐛 Bug Fixes

  • (iroh) [breaking] Update dependencies & fix 0-RTT with newer rustls by pulling the expected NodeId out of the ServerName in verifiers (#3290) - (af882a6)
  • (iroh-dns-server) Backwards compatibility for packets stored with iroh-dns-server v0.34 or lower (#3295) - (74b8baa)
  • (iroh-dns-server) Fixes for packet expiry (#3297) - (146f423)
  • (iroh-relay) Don't stop relay client actor if queues become full (#3294) - (f3c9af3)

⚙️ Miscellaneous Tasks

Deps

v0.34.1

07 Apr 16:33

Choose a tag to compare

✏️ Notes

With this patch release, we have updated from the alpha to the v0.25.1 version of hickory-resolver. If you have been pinning your own versions, you may have a conflict when updating to [email protected].

⛰️ Features

  • (iroh) Move iroh-net-report back into iroh (#3251) - (d6bc83f)
  • (iroh-relay) Allow to authenticate nodes via a HTTP POST request (#3246) - (592c3b5)

🐛 Bug Fixes

  • (iroh) Reduce log-level of unknown pong message (#3242) - (cf3e650)
  • (iroh) Reap ActiveRelayActor handles for idle relays (#3249) - (528a32c)
  • Backoff before retry if relay connection terminates (#3254) - (bc6e98c)

⚙️ Miscellaneous Tasks

  • (iroh) Update from alpha to release 0.25 hickory (#3256) - (26289ca)
  • (iroh) Don't depend on unused rustls-platform-verifier dependency (#3257) - (42b605e)
  • (iroh-relay) Fix README.md instuctions to enable server feature (#3239) - (7588135)

Deps