-
Notifications
You must be signed in to change notification settings - Fork 41
blog: iroh 1.0.3 and noq 1.1.0 release #504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -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) => <BlogPostLayout article={post} {...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. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
The change from correctness to consistency is one that I think more appropriately describes the change, but if it leaves the reader confused just ignore it
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually, it might make sense to mention the error messages that you'd used to see and say they're fixed.
For the other bugfix, I unfortunately don't know what a bad trace would look like... |
||||||
|
|
||||||
| ## 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) | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm on the fence about explicitly coming from the great work done in quinn. On one hand, the commit was cherry-picked and Benjamin is noted as main author, on the other.. the commit is not here, and I'm not sure it's worth doing that every time. Is it enough to link the commit with his name, is something like
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Given this blog post is about iroh 1.0.3, I'd consider perhaps not mentioning this at all as long as this API hasn't made it into iroh itself. There are very few people using noq directly. |
||||||
|
|
||||||
| ## 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. | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| ## 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! | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry to give critique without a concrete counterproposal - I'll come back to this tomorrow hopefully with one - but I'm not a fan of this paragraph. Perhaps I'm just not the right audience for it and it's quite fine for our users, but let me explain where my issue with it lies.
The overall tone: It feels apologetic and defensive. From this paragraph I wouldn't really know what the release is about, the "back to the good kind of boring" to me sounds like we are back in business after a shitshow that exposed users passwords or something quite serious, but it wasn't like that, we just dealt with it and it's fine. This will happen again, probably more than a couple of times. The part about "without breaking APIs" also isn't exactly encouraging: this is a minor/patch release and we are announcing we are doing the bare minimum in the semver contract with our users.
I would expect this paragraph to focus on why this release is one worth adopting, but writing this down I see it's hard to make it sound exciting and having a narrative. I think we could say the projects are settling into a stable maintenance cadence after 1.0 (and the previous security fix if you wish to acknowledge it explicitly), with incremental improvements to reliability (a bunch of bugs fixed between the previous minor now release and this one), developer experience (docs, logs, ci feedback, contributing), and overall ecosystem quality (like Adding pkarr resolver to n0 presets in iroh, for example)
I'll try to come back later with perhaps a more grounded suggestion