Releases: n0-computer/iroh
v0.94.0
⚠️ Breaking Changes
iroh- renamed
iroh_relay::RelayNode->RelayConfigiroh_base::NodeAddr->EndpointAddriroh_base::NodeAddr.node_id->endpoint_idiroh_base::NodeId->EndpointIdiroh_base::NodeTicket->EndpointTicketiroh::Endpoint::node_addr->iroh::Endpoint::addriroh::Endpoint::watch_node_addr->iroh::Endpoint::watchaddriroh::Endpoint::node_id->iroh::Endpoint::idiroh_relay::RelayMap::urlsiroh_relay::RelayMap::nodesiroh_relay::RelayMap::get_nodedirect_addressesare now calledip_addressesEndpointAddrtype is completely changed- Use
EndpointAddr::ip_addrsto get a list of ip addresses for this endpoint - Use
EndpointAddr::relay_urlsto get a list of relay urls for this endpoint- currently, there will only be one relay url per endpoint, but in the future, beyond 1.0, we will potentially have multiple
- Use
- APIs with
addresse(s)are now normalized toaddr(s)to be consistent in the code base
- removed
iroh::Endpoint::add_node_addr_with_sourceis removed. Use a discovery service instead.
- added
iroh_base::Signaturewhich replacesed25519_dalek::Signaturein the public API ofiroh_baseiroh::Endpoint::insert_relayiroh::Endpoint::remove_relayiroh::Endpoint::RelayMap::insertiroh::Endpoint::RelayMap::remove
- renamed
iroh-relay- wire-level breaking change
iroh-relayservers can no longer issue captive portal challenges to pre0.93iroh nodes
- wire-level breaking change
iroh-base- changed
iroh_baseerror types have changed
- removed
IntoandFromconversions forPublicKey-ed25519_dalek::VerifyingKeyIntoandFromconversions forSecretKey-ed25519_dalek::SigningKey- removed
tickets fromiroh-base, they are now in their owniroh-ticketcrate
- changed
⛰️ Features
- (iroh) Allow to override provenance for StaticProvider (#3527) - (3d92f6b)
- (iroh) [breaking] Allow dynamic changing of the
RelayMapof an endpoint (#3522) - (7a0644f) - (iroh) Introduce endpoint presets (#3523) - (2d367f9)
- (iroh-base) [breaking] Reduce external types in the iroh-base API for keys (#3529) - (b45ae27)
- (iroh-relay) [breaking] Remove support for legacy headers (#3539) - (f7692df)
- [breaking] Transport generic EndpointAddr (#3554) - (9cb4020)
🐛 Bug Fixes
- (iroh) Improve reusing of QAD reports (#3512) - (b2a55bf)
- Flakey test
simple_node_id_based_connection_transfer(#3534) - (0f86c38)
🚜 Refactor
- (iroh) [breaking] Finish removal of add_node_addr from public api (#3528) - (c2fce51)
- (iroh) Remove stun-rs (#3546) - (bafde6f)
- (iroh-base) [breaking] Move tickets into their own crate (#3544) - (25cea67)
- (iroh-relay) [breaking] Improve relay map api (#3563) - (a6b8456)
- [breaking] Rename Node to Endpoint in all cases (#3542) - (bfc6ba0)
📚 Documentation
🧪 Testing
- (iroh) Fix flaky test_active_relay_inactive - (b29c158)
⚙️ Miscellaneous Tasks
v0.93.2
v0.93.1
v0.93.0
⚠️ Breaking Changes
- iroh
-
removed
MdnsDiscovery::newis now privateMdnsDiscoveryBuilder::newis now private- Use
MdnsDiscovery::builder()to create anMdnsDiscoveryBuilder - Use
MdnsDiscoveryBuilder::default()to create anMdnsDiscoveryBuilder
- Use
iroh::Endpoint::direct_addressesiroh::Endpoint::home_relayiroh::Endpoint::add_node_addriroh::Endpoint::remote_infoiroh::Endpoint::remote_info_iteriroh::RemoteInfoiroh::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::onlineiroh::Endpoint::watch_node_addr
-
changed
- API Changes
-
iroh::Endpoint::node_addrnow returns synchronously the current addressing information -
iroh::Endpoint::watch_node_addrnow returns a watchable forNodeAddrnotOption<NodeAddr> -
iroh::discovery::mdns::DiscoveryItem -
iroh::Endpoint::latency -
iroh::PublicKey::fmt_shortnow returns aimpl Displayrather than aStringTo use it conveniently in
tracingorloggingprecede thefmt_short()call with a%:tracing::info!(node_id = %node_id.fmt_short())
-
- API Changes
-
wire breaking changes
- Default service name changed from
iroh.local.swarmtoirohv1 - Provenance field name in
DiscoveryItemchanged fromlocal.swarm.discoverytomdns - Switches to use
X-Irohheaders for the captive portal challenges, this is currently backwards compatible and will remain so until the next release
- Default service name changed from
-
⛰️ Features
- (iroh) [breaking] Add
MdnsDiscoveryBuilder::service_namemethod (#3482) - (9a88cc5) - (iroh) [breaking] Introduce
onlinemethod (#3467) - (d815cae) - (iroh) [breaking] Make direct_addresses always be initialised (#3505) - (33aca18)
- Make fmt_short return an impl Display so we can avoid an allocation. (#3460) - (5285cc0)
- Upgrade redb to v3 compatible format (#3483) - (2b36b77)
- Add a DNS resolver trait (#3473) - (7bd657e)
- Add a builder for DnsResolver (#3475) - (1fb68ef)
- Upgrade to [email protected] (#3465) - (78649a3)
- Congestion metrics (#3491) - (b6c60d3)
🐛 Bug Fixes
- (iroh) Convert to canonical IP address in IpSender (#3506) - (44c3c27)
- (iroh) Updated relays, and transfer example fixes (#3510) - (da311a6)
- (relay) Respect enable_relay flag (#3481) - (427fcad)
- Force reqwest to always use rustls backend (#3486) - (60d5310)
impl<T: Discovery> Discovery for Arc<T>(#3495) - (f5381bc)- 0rtt flakes (#3496) - (9e61af5)
🚜 Refactor
- (iroh) [breaking] Remove Endpoint::add_node_addr (#3485) - (0ffadef)
- Rename last two
local_endpointsusages todirect_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
⚙️ Miscellaneous Tasks
v0.92.0
⚠️ Breaking Changes
iroh- added
- “passive” mode for mDNS discovery
MdnsDiscovery::new(node_id: NodeId)→MdnsDiscovery::new(node_id: NodeId, advertise: bool)
- “passive” mode for mDNS discovery
- changed
- The
subscribemethod for theDiscoverytrait now returns a stream ofDiscoveryEventrather than aDiscoveryItem. 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>>
- The
- added
⛰️ 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
📚 Documentation
- (iroh-relay) Remove incorrect help text about default config file creation (#3258) (#3446) - (4583b12)
⚙️ Miscellaneous Tasks
- (github) Update issue template (#3450) - (5e185bd)
- Update some dependencies (#3453) - (048001d)
- Make net reports serde (#3454) - (e8eb1dd)
- Add
test-utilscfg forinsecure_certcall in the transfer example (#3458) - (c81fe21)
Cargo
v0.91.2
chore: Release iroh-base version 0.91.2
v0.91.1
chore: Release iroh-base version 0.91.1
v0.91.0
⚠️ 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::SendPacketwas removed in favor ofClientToRelayMsg::DatagramsRelayToClientMsg::ReceivedPacketwas removed in favor ofRelayToClientMsg::DatagramsFrameTypehas changed variants:SendPacketandRecvPacketwere removedClientToRelayDatagramandClientToRelayDatagramBatchwere addedRelayToClientDatagramandRelayToClientDatagramBatchwere 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-watcherfrom version0.2to0.3- Migration guide for users:
endpoint.node_addr().initialized().await?->endpoint.node_addr().initialized().await(no?needed anymore) and similarly forendpoint.home_relay()and other uses ofWatchers.endpoint.node_addr().get()?->endpoint.node_addr().get()and similarly forendpoint.home_relay()and other uses ofWatchers.- If all you have is a
&impl Watcherbut you need the current value, then you can't callWatcher::getanymore, as that now takes a&mut selfinstead of&self. You can work around this by.clone()ing to an intermediate watcher:watcher_ref.get()->watcher_ref.clone().get()
- Migration guide for users:
-
- 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::RelayProtocolre-export (the type was removed iniroh-relay)
- Removed
- changed
-
iroh-relay- removed
- Removed
iroh_relay::client::SendMessageandiroh_relay::client::ReceivedMessagein favor ofClientToRelayMsgandRelayToClientMsgrespectively. - Removed
ClientBuilder::is_prober - Removed
ClientBuilder::protocol - Removed
http::Protocoltype - Removed
relay_acceptsandwebsocket_acceptsmetrics
- Removed
- changed
impl Stream for Clientnow producesRelayToClientMsginstead ofReceivedMessageClientnowimpl Sink<ClientToRelayMsg>instead ofimpl Sink<SendMessage>- Moved
protos::relay::FrameTypetoprotos::common::FrameTypeand adjusted frame types to those of the current set of protocols - Renamed
frames_rx_ratelimited_totalmetric tobytes_rx_ratelimited_total, which now tracks bytes not frames
- removed
⛰️ 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
BestAddrwithPathValidity(#3400) - (a3187ca) - (iroh) Re-batch received relay datagram batches in case they exceed
max_receive_segments(#3414) - (a8485ad) - (iroh) Only clear
last_call_me_maybewhen the best addr became invalid (#3415) - (bcb60d4) - (iroh-relay) Fix proptests, make
Datagrams::segment_sizebe anOption<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
📚 Documentation
🧪 Testing
⚙️ Miscellaneous Tasks
v0.90.0
⚠️ Breaking Changes
-
iroh
-
removed
iroh::endpoint::Builder:: tls_x509removed, this is the tls mechanism that has been removediroh::endpoint::Builder:: tls_raw_public_keysremoved, this is the default mechanism now, so not needed anymoreDisplayimplementation was removed forSecretKey, 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, useDnsDiscovery::builderinstead - Removed
iroh::discovery::pkarr::PkarrPublisher::new, usePkarrPublisher::builderinstead - Removed
iroh::discovery::pkarr::PkarrPublisher::with_options, usePkarrPublisher::builderinstead - Removed
iroh::discovery::pkarr::PkarrResolver::new, usePkarrResolver::builderinstead
-
changed
- all public APIs return concrete error types, rather than
anyhow::Error iroh::protocol::ProtocolHandlermethods now returnimpl Futureinstead ofBoxFuture. You can simply remove theBox::pin(async move {})from the implementations and instead implement the methods asasync fn. See the updated documentation for theiroh::protocolmodule for an example.iroh::protocol::ProtocolHandleris 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)DynProtocolHandleriniroh::protocolas an example.iroh::watcheris now its own craten0-watcher, but theWatchertrait is still a top level export inirohiroh::endpoint::Endpoint::node_addrnow returnsimpl Watcher<Value = Option<NodeAddr>>iroh::endpoint::Endpoint::home_relaynow returnsimpl Watcher<Value = Vec<RelayUrl>>iroh::endpoint::Endpoint::bound_socketsnow returnsVec<SocketAddr>iroh-quinnis updated to0.14.0iroh::protocol::RouterBuilder::acceptnow takesimpl Into<Box<dyn DynProtocolHandler>>instead ofimpl ProtocolHandler. Because of a blanketFromimpl this change does not need any changes by users: you can still pass anyimpl ProtocolHandlertoaccept. Additionally, if you have your own builder struct upstream, you can now also pass aBox<dyn DynProtocolHandler>toaccept, which wasn't possible previously.iroh::discovery::Laggedchanged from a tuple to a structiroh::watcher::Disconnectedis changed from a tuple to a structiroh::watcher::Disconnectedis no longerUnwindSafeorRefUnwindSafeiroh::watcher::InitializedFutis no longerRefUnwindSafeiroh-baseiroh::endpoint::Builder::add_discoverynow takes animpl iroh::discovery::IntoDiscoveryargument instead of a closure that returns aDiscovery. You can implement that on a builder struct, and anyT: Discoveryhas an auto-impl ofIntoDiscovery.iroh::discovery::Discovery::resolveno longer gets a&Endpointargument. If you need an endpoint in your discovery service, add a builder struct and implementIntoDiscoveryfor it, which gives you an endpoint that you can clone into your serviceiroh::discovery::pkarr::PkarrPublisher::n0_dnsnow takes no arguments and returns aPkarrPublisherBuilder. The secret key is set onPkarrPublisherBuilder::buildinstead.
- all public APIs return concrete error types, rather than
-
-
iroh-basechangediroh_base::ticket::Erroris renamed toiroh_base::ticket::ParseErroriroh_base::key::KeyParsingErrorhas changed from athiserrorerror to asnafuerroriroh-relay
-
iroh-relaychangediroh_relay::node_info::MaxLengthExceededErroris no longerUnwindSafeorRefUnwindSafeiroh_relay::node_info::MaxLengthExceededErrorwas changed from athiserrorto asnafuerroriroh_relay::client::ConnSendErroris nowiroh_relay::client::SendErroriroh_relay::protos::stun::Erroris nowiroh_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::Watchertrait (#3356) - (bc6e9e3) - (iroh) [breaking] Expose
DynProtocolHandler(#3366) - (056df1d) - Make
Endpoint::node_addrwatchable and addtrait Watcher& combinators (#3045) - (7911255) - [breaking] Concrete errors (#3161) - (75eae87)
- Add methods to create variants of the
iroh-base::ticket::ParseErrorenum. (#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
IntoDiscoverytrait (#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_fasttest (#3332) - (b647af9)
⚙️ Miscellaneous Tasks
- ()* Upgrade to the latest
iroh-metrics,portmapper, andswarm-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
- Use staging relay in n0_dns_pkarr_relay (#3335) - ([aebbc72](aebbc727ffbb...
v0.35.0
⚠️ Breaking Changes
iroh- remove
pub fn default_from_node(url: RelayUrl, stun_port: u16) -> RelayMap
- change
pub fn from_url(url: RelayUrl) -> RelayMap, useFrom<RelayUrl>insteadRouter::spawnis now a plain function instead of anasync fnRouter::spawnis now infallible, instead of returninganyhow::Result<()>- All metrics structs (
iroh::metrics::{MagicsockMetrics, PortmapMetrics, NetReportMetrics}) now implementMetricsGroupfrom the new version0.34ofiroh-metricsand no longer implement traits from[email protected]. - Metrics are no longer registered onto the static superglobal
Core.irohdoes not usestatic_corefeature ofiroh-metrics. Metrics are now exposed from the subsystems that track them, see e.g.Endpoint::metrics. - Several methods now take a
Metricsargument. You can always passDefault::defaultif you don't want to unify metrics tracking with other sections. pkarr::SignedPacket, as used as a parameter iniroh::dns::node_info::NodeInfo::to_pkarr_signed_packetandiroh::dns::node_info::NodeInfo::from_pkarr_signed_packetis now expectingpkarrat major version3instead of2
- remove
iroh-relay- change
- Minor change in the
Fromimpls forConnSendErrordue to changing the underlying library
- Minor change in the
- change
⛰️ Features
- (iroh) Allow connecting with "fallback" ALPNs (#3282) - (839bfaa)
- (iroh) Add
net-reportmethod on theiroh::Endpointthat returns aWatchable<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 ofRelayUrls(#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
NodeIdout of theServerNamein 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
- (iroh) Add
echo-no-router.rsexample (#3267) - (7e13aa3) - Update to mozilla-actions/[email protected] (#3268) - (792e6c4)