From 488a77abd4f982325742d71c5496434c2346cc63 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cramfox=E2=80=9D?= <“kasey@n0.computer”>
Date: Tue, 21 Jul 2026 13:05:10 -0400
Subject: [PATCH 1/4] blog: iroh 1.0.3 and noq 1.1.0 release
---
src/app/blog/iroh-1-0-3/page.mdx | 55 ++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 src/app/blog/iroh-1-0-3/page.mdx
diff --git a/src/app/blog/iroh-1-0-3/page.mdx b/src/app/blog/iroh-1-0-3/page.mdx
new file mode 100644
index 00000000..ede3ba85
--- /dev/null
+++ b/src/app/blog/iroh-1-0-3/page.mdx
@@ -0,0 +1,55 @@
+import { BlogPostLayout } from '@/components/BlogPostLayout'
+import { MotionCanvas } from '@/components/MotionCanvas'
+
+export const post = {
+ draft: false,
+ author: 'ramfox',
+ date: '2026-07-21',
+ title: 'iroh 1.0.3 - Steadier Connections',
+ description: 'Release of iroh v1.0.3, alongside noq v1.1.0',
+}
+
+export const metadata = {
+ title: post.title,
+ description: post.description,
+ openGraph: {
+ title: post.title,
+ description: post.description,
+ images: [{
+ url: `/api/og?title=Blog&subtitle=${post.title}`,
+ width: 1200,
+ height: 630,
+ alt: post.title,
+ type: 'image/png',
+ }],
+ type: 'article'
+ }
+}
+
+export default (props) =>
+
+Welcome to a new release of `iroh`, a modular networking stack in Rust, for building direct connections between devices.
+
+After [last release's security fix](/blog/iroh-1-0-2), we're happy to be back to the good kind of boring. We've shipped iroh 1.0.3 together with [noq 1.1.0](https://github.com/n0-computer/noq/releases/tag/noq-v1.1.0) to give you a cleaner, smoother connection experience, without breaking any APIs.
+
+## Connections hold up better under real-world conditions
+
+This release closes up a handful of corner cases in noq: path validation is timed more correctly when a new path opens, stray packets from paths that have already been abandoned are no longer allowed to cause confusion, and a connection-accounting bug that could undercount active connections is fixed. Packet coalescing during the handshake is also more correct now, which matters most on networks that don't behave nicely.
+
+## Fewer confusing errors, less noise
+
+A couple of small changes make failures easier to reason about. Connecting with an empty ALPN now gives you a clear error instead of a panic. Logs are quieter in a couple of places. Small stuff, but it adds up to a better experience when looking through logs to debug.
+
+## Know when a connection is trustworthy
+
+noq adds a new `Connection::authenticated` method that succeeds as soon as an 0-RTT connection is proven to not be a replay attack (and always succeeds immediately in a 1-RTT connection). We still have `Connection::handshake_confirmed`, which waits longer for the client to confirm the client-side authentication. Read more [here](https://docs.rs/noq/latest/noq/struct.Connection.html#method.authenticated)
+
+## Better defaults out of the box
+
+The `n0` preset now includes a pkarr resolver. This means that we now, by default, have a fallback if our normal DNS resolver fails.
+
+## What's next?
+
+We expect the next few releases to keep this rhythm: happy maintenance releases every few weeks, with small fixes for corner cases and invisible improvements. As always, the full details are in the changelogs for [iroh](https://github.com/n0-computer/iroh/releases/tag/v1.0.3) and [noq](https://github.com/n0-computer/noq/releases/tag/noq-v1.1.0).
+
+See you at the next release, and keep [filing](https://github.com/n0-computer/iroh/issues) those bugs!
From 39bfb16bfe64c0f1544c7aceed51b40fe8f42f2e Mon Sep 17 00:00:00 2001
From: ramfox
Date: Wed, 22 Jul 2026 09:39:43 -0400
Subject: [PATCH 2/4] Update src/app/blog/iroh-1-0-3/page.mdx
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Diva Martínez <26765164+divagant-martian@users.noreply.github.com>
---
src/app/blog/iroh-1-0-3/page.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/blog/iroh-1-0-3/page.mdx b/src/app/blog/iroh-1-0-3/page.mdx
index ede3ba85..78a59957 100644
--- a/src/app/blog/iroh-1-0-3/page.mdx
+++ b/src/app/blog/iroh-1-0-3/page.mdx
@@ -34,7 +34,7 @@ After [last release's security fix](/blog/iroh-1-0-2), we're happy to be back to
## Connections hold up better under real-world conditions
-This release closes up a handful of corner cases in noq: path validation is timed more correctly when a new path opens, stray packets from paths that have already been abandoned are no longer allowed to cause confusion, and a connection-accounting bug that could undercount active connections is fixed. Packet coalescing during the handshake is also more correct now, which matters most on networks that don't behave nicely.
+This release closes up a handful of corner cases in noq: path validation is timed more consistently when a new path opens, better handling of received data referring to abandoned paths, and a connection-accounting bug that could undercount active connections is fixed. Packet coalescing during the handshake is also more correct now, which matters most on networks that don't behave nicely.
## Fewer confusing errors, less noise
From a1abf2f2373348f07907f0fae56e8d6cead4ae64 Mon Sep 17 00:00:00 2001
From: ramfox
Date: Wed, 22 Jul 2026 09:39:54 -0400
Subject: [PATCH 3/4] Update src/app/blog/iroh-1-0-3/page.mdx
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Philipp Krüger
---
src/app/blog/iroh-1-0-3/page.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/blog/iroh-1-0-3/page.mdx b/src/app/blog/iroh-1-0-3/page.mdx
index 78a59957..52bca4a2 100644
--- a/src/app/blog/iroh-1-0-3/page.mdx
+++ b/src/app/blog/iroh-1-0-3/page.mdx
@@ -46,7 +46,7 @@ noq adds a new `Connection::authenticated` method that succeeds as soon as an 0-
## Better defaults out of the box
-The `n0` preset now includes a pkarr resolver. This means that we now, by default, have a fallback if our normal DNS resolver fails.
+The `n0` preset now includes an HTTPS-based pkarr resolver. This means that we now, by default, have a fallback if our normal DNS-based resolver fails.
## What's next?
From bbeb1c661eeeb104e7af6ba3892328a3d243d975 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cramfox=E2=80=9D?= <“kasey@n0.computer”>
Date: Wed, 22 Jul 2026 10:04:32 -0400
Subject: [PATCH 4/4] blog: iroh 1.0.3 post, incorporate feedback
---
src/app/blog/iroh-1-0-3/page.mdx | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/app/blog/iroh-1-0-3/page.mdx b/src/app/blog/iroh-1-0-3/page.mdx
index 52bca4a2..633b0b8b 100644
--- a/src/app/blog/iroh-1-0-3/page.mdx
+++ b/src/app/blog/iroh-1-0-3/page.mdx
@@ -30,19 +30,24 @@ export default (props) =>
Welcome to a new release of `iroh`, a modular networking stack in Rust, for building direct connections between devices.
-After [last release's security fix](/blog/iroh-1-0-2), we're happy to be back to the good kind of boring. We've shipped iroh 1.0.3 together with [noq 1.1.0](https://github.com/n0-computer/noq/releases/tag/noq-v1.1.0) to give you a cleaner, smoother connection experience, without breaking any APIs.
+We've shipped iroh 1.0.3 together with [noq 1.1.0](https://github.com/n0-computer/noq/releases/tag/noq-v1.1.0) to give you a cleaner, smoother connection experience. Say "goodbye" to some pesky panics and "hello" to better error messaging.
## Connections hold up better under real-world conditions
This release closes up a handful of corner cases in noq: path validation is timed more consistently when a new path opens, better handling of received data referring to abandoned paths, and a connection-accounting bug that could undercount active connections is fixed. Packet coalescing during the handshake is also more correct now, which matters most on networks that don't behave nicely.
+Specifically, if you were seeing the following panics, they have been fixed!
+
+- `panicked at noq-1.0.1/src/endpoint.rs:648:17: attempt to subtract with overflow`
+- `panicked at noq-proto-1.0.1/src/connection/packet_builder.rs:159:9: assertion failed: max_size >= min_size`
+
## Fewer confusing errors, less noise
A couple of small changes make failures easier to reason about. Connecting with an empty ALPN now gives you a clear error instead of a panic. Logs are quieter in a couple of places. Small stuff, but it adds up to a better experience when looking through logs to debug.
-## Know when a connection is trustworthy
+## A win for us because of open source
-noq adds a new `Connection::authenticated` method that succeeds as soon as an 0-RTT connection is proven to not be a replay attack (and always succeeds immediately in a 1-RTT connection). We still have `Connection::handshake_confirmed`, which waits longer for the client to confirm the client-side authentication. Read more [here](https://docs.rs/noq/latest/noq/struct.Connection.html#method.authenticated)
+On top of the work we did to improve noq, we've also merged some extremely helpful upstream commits that were implemented by the folks working on [quinn](https://github.com/quinn-rs/quinn). Thank you!
## Better defaults out of the box