v0.94.0

n0-computer/irohv0.94.0Oct 21, 2025by github-actions[bot]

AI Summary

Major naming refactor from Node to Endpoint terminology with significant API changes. Introduces dynamic RelayMap support, endpoint presets, and moves tickets to a separate crate.

Key Highlights

  • Complete rename from Node to Endpoint terminology (NodeAddr->EndpointAddr, NodeId->EndpointId, NodeTicket->EndpointTicket)
  • Dynamic RelayMap changing support at runtime
  • Endpoint presets for common configurations
  • Tickets moved to separate iroh-ticket crate
  • Transport generic EndpointAddr implementation
  • Removed stun-rs dependency
  • Wire-level breaking change for iroh-relay servers

Breaking Changes

  • iroh_relay::RelayNode renamed to RelayConfig
  • iroh_base::NodeAddr renamed to EndpointAddr
  • iroh_base::NodeId renamed to EndpointId
  • iroh_base::NodeTicket renamed to EndpointTicket
  • EndpointAddr type completely changed - use ip_addrs() and relay_urls() methods
  • direct_addresses renamed to ip_addresses
  • APIs normalized from addresses/addresse(s) to addr/addr(s)
  • iroh::Endpoint::add_node_addr_with_source removed - use discovery service
  • Removed Into/From conversions for PublicKey-ed25519_dalek::VerifyingKey
  • Removed Into/From conversions for SecretKey-ed25519_dalek::SigningKey
  • Tickets moved from iroh-base to new iroh-ticket crate
  • Wire-level: iroh-relay servers can't issue captive portal challenges to pre-0.93 nodes

New Features

  • Allow dynamic changing of RelayMap at runtime
  • Introduce endpoint presets
  • Reduce external types in iroh-base API for keys
  • Remove support for legacy headers in iroh-relay
  • Transport generic EndpointAddr
  • Allow provenance override for StaticProvider

Full Release Notes

## ⚠️ Breaking Changes

- `iroh`
    - renamed
        - `iroh_relay::RelayNode` -> `RelayConfig`
        - `iroh_base::NodeAddr` -> `EndpointAddr`
        - `iroh_base::NodeAddr.node_id` -> `endpoint_id`
        - `iroh_base::NodeId` -> `EndpointId`
        - `iroh_base::NodeTicket` -> `EndpointTicket`
        - `iroh::Endpoint::node_addr` -> `iroh::Endpoint::addr`
        - `iroh::Endpoint::watch_node_addr` -> `iroh::Endpoint::watchaddr`
        - `iroh::Endpoint::node_id` -> `iroh::Endpoint::id`
        - `iroh_relay::RelayMap::urls`
        - `iroh_relay::RelayMap::nodes`
        - `iroh_relay::RelayMap::get_node`
        - `direct_addresses` are now called `ip_addresses`
        - `EndpointAddr` type is completely changed
            - Use `EndpointAddr::ip_addrs` to get a list of ip addresses for this endpoint
            - Use `EndpointAddr::relay_urls` to 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
        - APIs with `addresse(s)` are now normalized to `addr(s)` to be consistent in the code base
    - removed
        - `iroh::Endpoint::add_node_addr_with_source` is removed. Use a discovery service instead.
    - added
        - `iroh_base::Signature` which replaces `ed25519_dalek::Signature` in the public API of `iroh_base`
        - `iroh::Endpoint::insert_relay`
        - `iroh::Endpoint::remove_relay`
        - `iroh::Endpoint::RelayMap::insert`
        - `iroh::Endpoint::RelayMap::remove`
- `iroh-relay`
    - wire-level breaking change
        - `iroh-relay` servers can no longer issue captive portal challenges to pre `0.93` iroh nodes
- `iroh-base`
    - changed
        - `iroh_base` error types have changed
    - removed
        - `Into` and `From` conversions for `PublicKey` - `ed25519_dalek::VerifyingKey`
        - `Into` and `From` conversions for `SecretKey` - `ed25519_dalek::SigningKey`
        - removed `ticket` s from `iroh-base` , they are now in their own `iroh-ticket` crate

## ⛰️  Features

- *(iroh)* Allow to override provenance for StaticProvider ([#3527](https://github.com/n0-computer/iroh/issues/3527)) - ([3d92f6b](https://github.com/n0-computer/iroh/commit/3d92f6ba27f7a098953ea80c72318a616760c78c))
- *(iroh)* [**breaking**] Allow dynamic changing of the `RelayMap` of an endpoint ([#3522](https://github.com/n0-computer/iroh/issues/3522)) - ([7a0644f](https://github.com/n0-computer/iroh/commit/7a0644fee4e8ab96f73f58e4909fb9797bd9f2da))
- *(iroh)* Introduce endpoint presets ([#3523](https://github.com/n0-computer/iroh/issues/3523)) - ([2d367f9](https://github.com/n0-computer/iroh/commit/2d367f93656bc487980b7f846fa79b931cb3466b))
- *(iroh-base)* [**breaking**] Reduce external types in the iroh-base API for keys ([#3529](https://github.com/n0-computer/iroh/issues/3529)) - ([b45ae27](https://github.com/n0-computer/iroh/commit/b45ae2701140ee0fd43ee330502b9ef26907ce4d))
- *(iroh-relay)* [**breaking**] Remove support for legacy headers ([#3539](https://github.com/n0-computer/iroh/issues/3539)) - ([f7692df](https://github.com/n0-computer/iroh/commit/f7692dfe0afa4cc51a2df804ad8203c379dce6fe))
- [**breaking**] Transport generic EndpointAddr ([#3554](https://github.com/n0-computer/iroh/issues/3554)) - ([9cb4020](https://github.com/n0-computer/iroh/commit/9cb4020cc33945596bca1339344372a8134b6cc0))

## 🐛 Bug Fixes

- *(iroh)* Improve reusing of QAD reports ([#3512](https://github.com/n0-computer/iroh/issues/3512)) - ([b2a55bf](https://github.com/n0-computer/iroh/commit/b2a55bfd99dfb27825f94ff25b38f0aba1841ddf))
- Flakey test `simple_node_id_based_connection_transfer` ([#3534](https://github.com/n0-computer/iroh/issues/3534)) - ([0f86c38](https://github.com/n0-computer/iroh/commit/0f86c3840b4c107a2ad2dad52c449d7ea86e71d1))

## 🚜 Refactor

- *(iroh)* [**breaking**] Finish removal of add_node_addr from public api ([#3528](https://github.com/n0-computer/iroh/issues/3528)) - ([c2fce51](https://github.com/n0-computer/iroh/commit/c2fce512b249c12a163cda5787d3f7e9f12c6d48))
- *(iroh)* Remove stun-rs ([#3546](https://github.com/n0-computer/iroh/issues/3546)) - ([bafde6f](https://github.com/n0-computer/iroh/commit/bafde6f67bdce3e72c1a5b9b23145386224bb4e6))
- *(iroh-base)* [**breaking**] Move tickets into their own crate ([#3544](https://github.com/n0-computer/iroh/issues/3544)) - ([25cea67](https://github.com/n0-computer/iroh/commit/25cea678cbb122326a0b45489b8d2a39bf4db8c7))
- *(iroh-relay)* [**breaking**] Improve relay map api ([#3563](https://github.com/n0-computer/iroh/issues/3563)) - ([a6b8456](https://github.com/n0-computer/iroh/commit/a6b845662fe7ab7c42a8c11204fafe80f8df9b74))
- [**breaking**] Rename Node to Endpoint in all cases ([#3542](https://github.com/n0-computer/iroh/issues/3542)) - ([bfc6ba0](https://github.com/n0-computer/iroh/commit/bfc6ba0b2c02588a38eec6be94bc75a78eb9969a))

## 📚 Documentation

- *(iroh)* Fix docstring for ProtocolHandler ([#3558](https://github.com/n0-computer/iroh/issues/3558)) - ([b7baaeb](https://github.com/n0-computer/iroh/commit/b7baaebbe0a7782f5509112cdf81f77700ecb933))

## 🧪 Testing

- *(iroh)* Fix flaky test_active_relay_inactive - ([b29c158](https://github.com/n0-computer/iroh/commit/b29c158fc4bbcd80c92a61aa7f283f7dc9ccc0e3))

## ⚙️ Miscellaneous Tasks

- *(dpes)* Bump iroh-relay deps ([#3547](https://github.com/n0-computer/iroh/issues/3547)) - ([4ed700e](https://github.com/n0-computer/iroh/commit/4ed700e8da8daf6bb3d897ceadea52a4dad6952c))
- Update copyright dates ([#3543](https://github.com/n0-computer/iroh/issues/3543)) - ([5eaf52a](https://github.com/n0-computer/iroh/commit/5eaf52adc4097894dc3f6f08c23cfcdfef024fab))
- Update deps & remove unused deps ([#3564](https://github.com/n0-computer/iroh/issues/3564)) - ([a63bcfd](https://github.com/n0-computer/iroh/commit/a63bcfdfe588fb9a9682a26a2f4c5e2ae2ce8a97))