Skip to content

Releases: n0-computer/iroh

v0.91.2

25 Aug 16:38
Compare
Choose a tag to compare
chore: Release iroh-base version 0.91.2

v0.91.1

25 Aug 16:38
Compare
Choose a tag to compare
chore: Release iroh-base version 0.91.1

v0.91.0

30 Jul 22:19
Compare
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
Compare
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
Compare
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
Compare
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

v0.34.0

17 Mar 21:26
Compare
Choose a tag to compare

⚠️ Breaking Changes

  • iroh
    • added:
      • endpoint::Builder::tls_x509 to enable using X.509 TLS certificates.
        By default iroh endpoints will now use the new RawPublicKey TLS configuration. This means they will not be able to talk to older iroh nodes. If needed, the old mechanism can still be used by configuring the endpoint like this:
let endpoint = Endpoint::builder()
   .tls_x509() // <--- this enables the old style TLS authentication
   // ...
   .bind();
  • changed:

    • renamed iroh::discovery::local_swarm_discovery to iroh::discovery::mdns
    • renamed iroh::discovery::local_swarm_discovery::LocalSwarmDiscovery to iroh::discovery::mdns::MdnsDiscovery
    • changed the default cert format for Reloading certificate mode from DER to PEM
    • trait method ProtocolHandler::accept(&self, connection: iroh::endpoint::Connection) used to take an iroh::endpoint::Connecting, now takes a iroh::endpoint::Connection.
  • iroh-net-report

    • removed:
      • iroh-base: We removed the unused getrandom optional dependency. As such, there doesn't exist a getrandom feature flag in iroh-base anymore.
      • MAPPED_ADDR_PORT is removed.
    • changed:
      • IpMappedAddr::socket_addr -> IpMappedAddr::private_socket_addr

⛰️ Features

  • (iroh) Enable netwatch::netmon::Monitor and the metrics feature in Wasm (#3206) - (7acfe39)
  • (iroh) [breaking] Allow for limiting incoming connections on the router (#3157) - (3e16848)
  • (iroh) [breaking] Switch TLS authentication to raw public keys (#2937) - (d8c8c8e)
  • [breaking] Add DiscoveryItem::user_data method and adjust locally-discovered-nodes example (#3215) - (f6b5f5c)

🐛 Bug Fixes

  • (iroh) Don't cause re-stuns all the time in browsers (#3234) - (ef3645e)
  • (iroh-base) [breaking] Remove unused getrandom dependency (#3202) - (0c7a122)
  • (iroh-relay) Report round-trip-latency instead of single-trip for QAD (#3230) - (00f8309)
  • (relay) [breaking] Change default cert format from der to pem (#3204) - (4930837)
  • Update project_sync (#3213) - (aa7463b)

🚜 Refactor

  • (iroh) Factor out socket-related state & construction into magicsock::SocketState and ActorSocketState (#3203) - (2a49265)
  • (iroh, iroh-net-report) [breaking] Make ports more private (#3207) - (906250b)

📚 Documentation

⚙️ Miscellaneous Tasks

v0.33.0

24 Feb 23:16
Compare
Choose a tag to compare

⚠️ Breaking Changes

  • iroh
    • removed
      • iroh::test_utils::create_dns_resolver is removed, use iroh::dns::DnsResolver::new instead
      • iroh::dns::resolver and iroh::dns::default_resolver are removed. There is no static, global DNS resolver anymore. If you want to share a DNS resolver between endpoints, create the resolver yourself with iroh::dns::DnsResolver::new and clone it into the endpoint builders (in EndpointBuilder::dns_resolver). If you want to reuse the DNS resolver from an endpoint, you can access it with Endpoint::dns_resolver and clone it to wherever you need it.
      • iroh::dns::node_info::{IrohAttr, TxtAttrs, node_id_from_hickory_name} are no longer public. Use iroh::dns::DnsResolver::lookup_node_by_id or iroh::dns::DnsResolver::lookup_node_by_domain_name to lookup node info from DNS.
      • iroh::dns::node_info::{to_z32, from_z32}are removed. Use the methods on iroh::dns::node_info::NodeIdExt trait instead.
      • iroh::dns::ResolverExt is removed. Use the methods on iroh::dns::DnsResolver instead.
      • iroh::discovery::Discovery::publish now takes data: &NodeData as its single argument. iroh::discovery::NodeData is a re-export of iroh_relay::dns::node_info::NodeData, and contains relay URL and direct addresses. See docs for NodeData for details.
      • iroh::Endpoint::connect_with was removed, use iroh::Endpoint::connect_with_opts instead
    • changed
      • iroh::dns::DnsResolver used to be a type alias and now is a reexport of iroh_relay::dns::DnsResolver struct
      • iroh::dns::node_info module is now a reexport of iroh_relay::dns::node_info
      • iroh::discovery::dns::{N0_DNS_NODE_ORIGIN_PROD, N0_DNS_NODE_ORIGIN_STAGING} are now reexports of iroh_relay::dns::{N0_DNS_NODE_ORIGIN_PROD, N0_DNS_NODE_ORIGIN_STAGING}
      • The methods in iroh::dns::DnsResolver now take an impl ToString instead of impl hickory_proto::rr::domain::IntoName for their host argument
      • iroh::discovery::DiscoveryItem no longer has any public fields. There are now getters for the contained data, and constructors for createing a DiscoveryItem from a NodeInfo.
      • iroh_relay::dns::node_info::NodeInfo is changed.
        • NodeInfo::new now has a single NodeId argument. Use NodeInfo::with_direct_addresses and NodeInfo::with_relay_url to set addresses and relay URL. Alternatively, use NodeInfo::from_parts and pass a NodeData struct.
        • NodeInfo now has two public fields node_id: NodeId and data: NodeData, and setter and getter methods for the relay URL and direct addresses.
      • iroh::discovery::pkarr::PkarrPublisher::update_addr_info now takes a NodeData argument
      • iroh::endpoint::Connection::into_0rtt now returns iroh::endpoint::ZeroRttAccepted, instead of iroh_quinn::ZeroRttAccepted

⛰️ Features

  • (iroh) Enable applications to establish 0-RTT connections (#3163) - (f0abede)
  • (iroh) Add subscription stream to watch all discovery results (#3181) - (695f7c1)
  • (iroh) Publish and resolve user-defined data in discovery (#3176) - (ac78cf2)
  • (iroh) Make iroh compile to wasm32-unknown-unknown (#3189) - (247b891)
  • (iroh-net-report) Support wasm32 building & running (#3139) - (6f923a3)
  • (iroh-relay) Make Endpoint::close faster by aborting QAD connections faster (#3182) - (f640e83)

🐛 Bug Fixes

  • (iroh) Allow gracefully closing connections (#3170) - (d9a5b8e)
  • (iroh-relay) Fix the number of active relay connections (#3194) - (397d08d)
  • (iroh-relay) Bring back unique node counts (#3197) - (892c767)
  • Update hickory resolver to 0.25.0-.alpha.5 (#3178) - (a4fcaaa)

🚜 Refactor

  • (iroh) Store quic config, instead of recreating (#3171) - (9eccb05)
  • [breaking] Use a single DNS resolver (#3167) - (c39b998)
  • [breaking] Streamline discovery and node info types (#3175) - (3e3798f)

🧪 Testing

  • (iroh-net-report) Do not ping hosts on the internet (#3172) - (d43d474)

⚙️ Miscellaneous Tasks

  • Add additional todos in the "change checklist" (#3180) - (31efead)

v0.32.1

05 Feb 16:09
Compare
Choose a tag to compare

🐛 Bug Fixes

  • (iroh) Ensure passing a crpyto provider to rustls clients (#3169) - (34c10bc)

v0.32.0

04 Feb 06:19
Compare
Choose a tag to compare

⚠️ Breaking Changes

  • iroh

    • removed
      • iroh::endpoint::get_remote_node_id has been removed. Use iroh::endpoint::Connection::remote_node_id instead.
      • iroh::endpoint::Connecting::local_ip is removed.
      • iroh::endpoint::Connecting::remote_address is removed.
      • iroh::endpoint::Connection::local_ip is removed.
      • iroh::endpoint::Connection::remote_address is removed.
      • discovery-pkarr-dht feature became non-default (moved from opt-out to opt-in).
    • changed
      • iroh::Endpoint::connect returns an iroh::endpoint::Connection
  • iroh-net-report

    • changed
      • iroh_net_report::Client::new now takes additional parameter mapped_addrs: Option
  • iroh-test

    • whole crate is removed:
      • iroh_test::parse_hexdump is replaced with data_encoding::HEXLOWER.decode
      • iroh_test::CallOnDrop is replaced with tokio_util::task::AbortOnDropHandle
      • iroh-test::logging is replaced with tracing-test

⛰️ Features

  • (iroh) Allow customising the TransportConfig for connections (#3111) - (2b92db4)
  • (iroh) [breaking] Wrap the Connection struct so we own the type (#3110) - (2e61ff2)
  • (iroh) [breaking] Remove access to local and remote IP addresses (#3148) - (08bd2a1)
  • (iroh-relay) Make the client side of iroh-relay compile & run in browsers (#3119) - (03e3e3c)
  • [breaking] Add QUIC Address Discovery to iroh (#3049) - (243a04a)

🐛 Bug Fixes

  • (iroh) Remove quinn::Endpoint::wait_idle from iroh::Endpoint::close process (#3165) - (a1d21c6)
  • (iroh-net-report) Only add QUIC ipv6 probes if we have an ipv6 interface (#3133) - (9275d22)
  • (iroh-relay) Fix client actors not closing (#3134) - (e5bbbe1)
  • Handle invalid input length when parsing a node id (#3155) - (a8d058f)

🚜 Refactor

  • (iroh) Replace timer module with AbortOnDropHandle and sleep (#3141) - (43e9805)
  • Use n0-future in favor of futures-* libraries and tokio::{spawn,task,time} (#3156) - (617fa50)
  • [breaking] Remove iroh-test crate (#3162) - (7b6884f)
  • Cleaning up unnecessary logs (#3164) - (9a75d14)

📚 Documentation

⚙️ Miscellaneous Tasks