You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
iroh reached its first stable 1.0 release. The original target here was the v1.0.0-rc.0 candidate (May 11 2026); that and the later RCs are now obsolete — stable 1.0.0 shipped 2026-06-15 and 1.0.2 is the current latest (2026-07-06). This upgrade now targets stable 1.0.2 directly and skips all release candidates.
Three repos need work:
Repo
What changes
datum-cloud/iroh-gateway
Rust crate bump + API migration + Dockerfile MSRV bump
Note:datum-cloud/network-services-operator has no Rust iroh code — iroh resources are managed via Kubernetes manifests in datum-cloud/infra. This issue tracks the overall upgrade; child issues are filed in each affected repo.
Status (2026-07-08)
Target retargetedv1.0.0-rc.0 → stable 1.0.2 across all three repos.
Step 0 pre-flight complete — every companion crate has a published release compatible with iroh 1.0.x (see checked boxes below). The iroh-proxy-utils / iroh-services blocking risk is cleared; the scaffolded [patch] escape hatch is no longer needed.
iroh-services version skew resolved upstream — both app and iroh-gateway converge on 1.0.0 (no more 0.12 vs 0.13 split).
app (Step 2):merged (feat: upgrade iroh to 1.0.2 app#165) and released v0.1.0; the macOS desktop bundle notarized successfully (an earlier Apple legal-agreement 403 that had blocked bundles since 2026-07-02, unrelated to this upgrade, has since been resolved).
infra (Step 3):merged (datum-cloud/infra#3212). Staging iroh-relay verified live on v1.0.2 (1/1 ready, restartCount 0). Edge rollout pending (Talos fleet, out of infra-MCP reach).
Dependency Map: Current → Target
Crate / Image
Used In
Current
Target (latest verified)
iroh
app, iroh-gateway
0.97.0
1.0.2
iroh-base
app, iroh-gateway
0.97.0
1.0.2
iroh-relay (Rust crate)
app, iroh-gateway
0.97.0
1.0.2
iroh-metrics
app, iroh-gateway
0.38.3
1.0.1
iroh-blobs
app/lib
0.99.0
0.103.0
iroh-proxy-utils
app, iroh-gateway
0.1.0
0.3.0
iroh-services
app (0.12), iroh-gateway (0.13)
0.12/0.13
1.0.0 (unified)
iroh-n0des
app/n0des-local
0.10
0.10.0
irpc-iroh
app/n0des-local
0.13
0.17.0
n0computer/iroh-relay (Docker)
infra
v0.97.0
v1.0.2 ✅ image published
Rust base image
iroh-gateway Dockerfile
rust:1.89-bookworm
rust:1.91-bookworm (MSRV bump)
MSRV for iroh 1.0.2 is Rust 1.91 (unchanged from the RC target).
The breaking-change surface above was compiled against rc.0; re-verify against the stable 1.0.2 changelog before/while doing the Rust work, as APIs may have shifted further between the RC and stable.
Implementation Sequence
Step 0 — Pre-flight (blocking check before any edits)
Companion crates all have published releases compatible with iroh 1.0.x (verified on crates.io 2026-07-08):
iroh-proxy-utils → 0.3.0 published
iroh-services → 1.0.0 published (supersedes the 0.12/0.13 split)
iroh-metrics → 1.0.1 published
iroh-n0des (0.10.0), irpc-iroh (0.17.0) published
relay.toml config format unchanged for iroh-relay:v1.0.x — current config uses manual TLS cert paths (cert_mode = "Manual"), and enable_relay / [tls] / [metrics] keys are all still valid.
Step 1 — datum-cloud/iroh-gateway(do first — simpler, unblocks infra rollout)
apps/network-services-operator/downstream/base/iroh-relay/deployment.yaml: v0.97.0 → v1.0.2 — merged in datum-cloud/infra#3212 (also adds the relay image to Renovate)
Review relay.toml ConfigMap for any format changes — unchanged, manual-TLS keys valid on v1.0.x
iroh-gateway image updates are handled automatically by FluxCD ImageUpdateAutomation once Step 1 releases
Tracked in: datum-cloud/infra#2563
Step 4 — Verification
CI green in all three repos (gateway build/clippy/test, app 34 tests, infra kustomize)
iroh-relay pod starts cleanly with new image — stagingdatum-downstream-gateway/iroh-relay on v1.0.2, 1/1 ready, restartCount 0, new ReplicaSet progressed 2026-07-08T13:45
iroh-gateway DaemonSet rolls out on edge — verified on us-central-1-alice after cutting infra v0.67.9 (the gateway image-updater commit missed the v0.67.8 tag; edge Flux tracks semver >=0.0.0, so it needed a new tag). DS on v0.1.0, 2/2, restartCount 0; endpoint 47fed51bfd bound, live QUIC-over-relay, no errors.
Prometheus scrape on port 9090 — iroh-relay:9090/metrics scraped directly on edge (relayserver_* series present, got_ping/sent_pong incrementing). iroh-gateway exposes :9090 (--metrics-port 9090) and is scraped by its PodMonitor; direct ad-hoc curl is correctly blocked by the namespace NetworkPolicy.
Post-upgrade finding (edge log volume): the v0.1.0 gateway emits TRACE-level QUIC packet logs. RUST_LOG=iroh=debug,iroh_proxy_utils=debug,datum_connect=debug no longer muzzles the QUIC stack because iroh 1.0 replaced quinn with its own fork crate noq/noq_proto, which the iroh= directive doesn't match. Recommend adding noq=warn,noq_proto=warn (or =info) to RUST_LOG in the downstream base/edge overlay. Tracked separately — does not block the upgrade.
Risks
Risk
Mitigation
Status
iroh-proxy-utils not yet updated
Local [patch] override or wait for release
✅ Cleared — 0.3.0 published
relay.toml format changed
Test staging first; keep v0.97.0 manifest on a branch as rollback
✅ Cleared — format unchanged
#[non_exhaustive] compile failures in match blocks
Summary
iroh reached its first stable 1.0 release. The original target here was the
v1.0.0-rc.0candidate (May 11 2026); that and the later RCs are now obsolete — stable1.0.0shipped 2026-06-15 and1.0.2is the current latest (2026-07-06). This upgrade now targets stable1.0.2directly and skips all release candidates.Three repos need work:
datum-cloud/iroh-gatewaydatum-cloud/appdatum-cloud/infran0computer/iroh-relayDocker imagev0.97.0→v1.0.2Status (2026-07-08)
v1.0.0-rc.0→ stable1.0.2across all three repos.iroh-proxy-utils/iroh-servicesblocking risk is cleared; the scaffolded[patch]escape hatch is no longer needed.iroh-servicesversion skew resolved upstream — both app and iroh-gateway converge on1.0.0(no more 0.12 vs 0.13 split).iroh-relayverified live onv1.0.2(1/1 ready, restartCount 0). Edge rollout pending (Talos fleet, out of infra-MCP reach).Dependency Map: Current → Target
irohiroh-baseiroh-relay(Rust crate)iroh-metricsiroh-blobsiroh-proxy-utilsiroh-servicesiroh-n0desirpc-irohn0computer/iroh-relay(Docker)MSRV for iroh
1.0.2is Rust 1.91 (unchanged from the RC target).Breaking API Changes (iroh 0.97 → 1.0.x)
PathWatcherConnection::paths()(snapshot) +Connection::path_events()→PathEventStreamConnection::to_info()→ConnectionInfoConnection::weak_handle()Incoming::local_ipIncoming::local_addr(returnsIncomingLocalAddr)SourcetypeCertConfig::ReloadingAcmeConfigbuilderiroh_relay::dns::*modules#[non_exhaustive]— add_ =>armsImplementation Sequence
Step 0 — Pre-flight (blocking check before any edits)
Companion crates all have published releases compatible with iroh 1.0.x (verified on crates.io 2026-07-08):
iroh-proxy-utils→ 0.3.0 publishediroh-services→ 1.0.0 published (supersedes the 0.12/0.13 split)iroh-metrics→ 1.0.1 publishediroh-n0des(0.10.0),irpc-iroh(0.17.0) publishedrelay.tomlconfig format unchanged foriroh-relay:v1.0.x— current config uses manual TLS cert paths (cert_mode = "Manual"), andenable_relay/[tls]/[metrics]keys are all still valid.Step 1 —
datum-cloud/iroh-gateway(do first — simpler, unblocks infra rollout)Cargo.toml:iroh/iroh-base/iroh-relay→ 1.0,iroh-metrics1.0,iroh-proxy-utils0.3,iroh-services1.0,n0-error1.0Dockerfile:rust:1.89-bookworm→rust:1.91-bookwormsrc/endpoint.rs:iroh_relay::dns::*→iroh::dns,Endpoint::empty_builder()→builder(presets::Empty)gateway.rs/diagnostics.rsAnyError/context()errors resolved by then0-error1.0 bump (version skew, no source edit);SecretKey::generate()arg dropped, unusedrandremovedcargo build && cargo clippy && cargo testcleanpublish-docker.ymlpublishes the ghcr image → FluxCD auto-rolls iroh-gatewayTracked in: datum-cloud/iroh-gateway#11 — PR datum-cloud/iroh-gateway#13 open
Step 2 —
datum-cloud/appCargo.toml:iroh/iroh-base/iroh-relay/iroh-tickets→ 1.0,iroh-metrics1.0,iroh-proxy-utils0.3,iroh-services1.0,n0-error1.0app/lib/Cargo.toml:iroh-blobs→ 0.103.0 (also removed the obsoletepkcs8 = "=0.11.0-rc.11"pin)app/n0des-local/Cargo.toml:irpc/irpc-iroh→ 0.17PathWatcher/conn.to_info()sites not present in current codebaseiroh_relay::dns→iroh::dns,Endpoint::empty_builder()→builder(presets::Empty)(node.rs)iroh-servicesnet_diagnostics/client_hostfeatures removed (now unconditional) — dropped features listiroh_tickets::Ticket:to_bytes/from_bytes→encode_bytes/decode_bytes,deserialize→decode_string(state.rs)SecretKey::generate()arg dropped (repo.rs,n0des-local)cargo check --workspaceclean,cargo test --workspace34 passed,cargo clippycleaniroh-servicesversion between app and iroh-gateway — upstream unified on1.0.0, so both target the same versionTracked in: datum-cloud/app#161 — PR datum-cloud/app#165 open
Step 3 —
datum-cloud/infraapps/network-services-operator/downstream/base/iroh-relay/deployment.yaml:v0.97.0→v1.0.2— merged in datum-cloud/infra#3212 (also adds the relay image to Renovate)relay.tomlConfigMap for any format changes — unchanged, manual-TLS keys valid on v1.0.xTracked in: datum-cloud/infra#2563
Step 4 — Verification
datum-downstream-gateway/iroh-relayonv1.0.2, 1/1 ready, restartCount 0, new ReplicaSet progressed 2026-07-08T13:45us-central-1-aliceafter cutting infra v0.67.9 (the gateway image-updater commit missed the v0.67.8 tag; edge Flux trackssemver >=0.0.0, so it needed a new tag). DS onv0.1.0, 2/2, restartCount 0; endpoint47fed51bfdbound, live QUIC-over-relay, no errors.:9090/metricsscraped directly on edge (relayserver_* series present,got_ping/sent_pongincrementing). iroh-gateway exposes:9090(--metrics-port 9090) and is scraped by its PodMonitor; direct ad-hoc curl is correctly blocked by the namespace NetworkPolicy.Post-upgrade finding (edge log volume): the v0.1.0 gateway emits TRACE-level QUIC packet logs.
RUST_LOG=iroh=debug,iroh_proxy_utils=debug,datum_connect=debugno longer muzzles the QUIC stack because iroh 1.0 replacedquinnwith its own fork cratenoq/noq_proto, which theiroh=directive doesn't match. Recommend addingnoq=warn,noq_proto=warn(or=info) toRUST_LOGin the downstream base/edge overlay. Tracked separately — does not block the upgrade.Risks
iroh-proxy-utilsnot yet updated[patch]override or wait for releaserelay.tomlformat changed#[non_exhaustive]compile failures in match blockscargo checkfirst; fix exhaustive patterns systematicallyiroh-services0.12 (app) vs 0.13 (iroh-gateway)