Releases: n0-computer/iroh
v0.95.0
⚠️ Breaking Changes
iroh-dns-server- upgraded to redb version 3 - you much run with version 0.93 at least once to upgrade the database
iroh- changed
- All errors have changed from
snafuerrors ton0-errorerrors. ConnectError::Connection- fields changedAcceptError::Connection- fields changedAcceptError::MissingRemoteEndpointId- fields changedAcceptError::NotAllowed- fields changedAcceptError::User- fields changedConnecting::into_0rtt-> returnsResult<OutgoingZeroRttConnection, Connecting>
- All errors have changed from
removedProtocolHandler::on_connecting()removed - implementon_accepting()instead, which takesAcceptingrather thanConnectingDynProtocolHandler::on_connecting()removed - implementon_accepting()insteadiroh::endpoint::IncomingFuture- useAcceptinginsteadiroh::endpoint::ZeroRttAccepted- replaced by explicit 0-RTT connection types
- changed
⛰️ Features
- (iroh-relay) Allow for extension of
RelayMaps (#3575) - (45e1f48) - Add new NA west default relay (#3599) - (828789a)
- Make
Connection::remote_idandConnection::alpninfallible (#3556) - (e2dc591)
🐛 Bug Fixes
- Remove "https" from NA west url (#3600) - (c2bdbe2)
- Stop relay actor on endpoint close (#3601) - (30c23e8)
🚜 Refactor
📚 Documentation
- (iroh) Fix documentation on endpoint::Builder::empty (#3592) - (71d5136)
- (iroh) Clarify ProtocolHandler::accept (#3567) - (406bfde)
⚙️ Miscellaneous Tasks
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...