RSSAmplifier

Blog

seanmonstar

My name is Sean McArthur, and here I blabber on about Rust, networking, open source, and a better web.

seanmonstar.comRSS feed ↗30 posts

Latest posts

Micro: A trait for fluent Durations

I dislike the pattern in some languages to create durations by multiplying constants. It feels like a concession when it cannot be expressed more nicely. There’s a tracking issue to add such constants in libstd. How about a trait instead? (I suggested it in the tracking issue a long time ago, but it’s lost in the noise). Rust traits are awesome. They can be implemented on any other type, even…

Micro: I want your own words

If you choose to communicate with me, all I ask is that you use your own words. Bug reports and issues. Pull request descriptions and especially review comments. This isn’t new, but I wanted a link of my own. LLMs write way way too much. I don’t know if you understood it enough for me to ask questions back. They don’t use reasoning, so is it real? If you didn’t care enough to write it, do I care…

Micro: Accessors can reveal internal representation

As a library maintainer, it’s common to receive requests from users to add a “simple accessor”. The data is right there . But that accessor can end up revealing internal representation details that you can no longer change. This is one reason why it could be a better practice to return an impl Iterator instead of &[T] . The latter freezes you in place to always storing the data in consecutive…

Micro: Rust Errors generally shouldn't be PartialEq

Errors might have internal details that don’t make sense to compare. Like positional data, or a source chain. Even if you don’t have those details yet, committing to a public API of PartialEq can restrict you from internal refactoring. The common reason to want this is for testing purposes. People want to assert an error case matches what they expect. But that doesn’t need equality. matches! ,…

Micro: Owning my microblog with POSSE

POSSE is the practice of publishing on your own site first, and pushing that out to other services. To get the content where people are, while linking back to the original owned post. I now have a /micro blog on my own website, and automation (a GH action) to break up new posts and send them to Mastodon and Bluesky as threads. It even has it’s own rss feed . This new setup lets me nudge people…

hyper User Survey 2025 Results

hyper is the widely-used HTTP library for Rust. We ran the first user survey for hyper in November 2025 . Here’s the results and some analysis. 1 Why did we do a survey? We ran a survey to make sure we focus on the right things. It’s part of being user-driven, working backwards. The amount of work required to get some data has an outsized return on your investment. When you know nothing, just a…

2025 in review

Come along with me as I review the past year. Heh, I often start these kinds of posts right at the start of the year, but it takes a few weeks longer than I ever expect to think them through. 1 Two years of being independent After a second year of operating as an independent open source maintainer , it’s starting to feel more normal. In terms of personal execution, it felt pretty fantastic,…

reqwest v0.13 - rustls by default

To end out the year, here comes a new major release of reqwest , the opinionated higher-level HTTP client for Rust. We don’t really need major breaking versions to keep providing value. Improvements keep coming all the time. But we did need one to make one particular big adjustment, and we’ve taken the opportunity to clean up other things too. At the same time, we strove make it disrupt as little…

hyper-util Composable Pools

I’m so excited to announce hyper ’s new composable pool layers! 1 As part of making reqwest more modular , we’ve designed a new connection pool, and made the pieces available in hyper_util::client::pool . But this is more than just a “hey, we have a Pool, it moved over there.” We’ve literally pulled apart the pool, in a way I haven’t found elsewhere. Building a purpose‑specific pool is now…

hyper User Survey 2025

I’m excited to announce the inaugural hyper user survey! ( Update: it ended. ) Part of being user-driven is knowing what our users want , what they’re trying to do, and then we can figure out how best to help. This survey should only take about 5 minutes, no questions are required, and responses are anonymous. The survey will be open for a month, until December 17th, and then we’ll analyze the…

Podcast: Netstack.fm, story of Rust's networking with hyper

Last week I was a guest on the Netstack podcast . We talked abit about how I got into Rust, how async Rust developed, and the story behind hyper and its surrounding ecoystem. We started (and ended) with my goal of better software: On your about page, you say that “Rust is the least bad option.” Can you elaborate a bit on that? Yeah, I love Rust. I think Rust solves a ton of problems, but I also…

hyper HTTP/2 (Didn't) MadeYouReset

A new HTTP/2 attack vector was disclosed today called MadeYouReset. hyper ’s h2 is negligably affected, weathering the attack well. But, we have provided patches just in case. We published patches weeks ago, so if you’ve been keeping up-to-date, you’re fine! If not, you’re most likely fine, but you can upgrade now. No CVE or security advisory is included with this. This sort of work is supported…

warp v0.4

Yesterday, warp v0.4 was released. warp is a Rust web server framework, with a focus on functional programming and type system routing. Upgrading is likely pretty simple, the main API stayed very similar. The biggest deal is that it should be easier for you to stay up-to-date on dependencies. You could stop there. But if you want to know what else happened, off we go! Filters remain the focus The…

reqwest retries

One part of working on a more modular reqwest was adding support for retries. Intermittent failures are a fact of life, and a simple retry could have made things so much better. It’s a somewhat frequent feature request for reqwest . It’s also a very common pattern to implement manually, and far too easy to do incorrectly. Since reqwest ’s internals are shifting more and more to a stack of…

Body::poll_progress

This describes a proposal for a cancelation problem with hyper’s request and response bodies. hyper is an HTTP library for the Rust language. Background: what is the Body trait? The Body trait used by hyper is meant to represent a potentially streaming (asynchronous) body of a request or response. It sorta looks like Stream or AsyncIterator . The biggest reason for a different trait was because we…

A More Modular reqwest

reqwest came out 8 years ago . It was meant to be a higher-level HTTP client, with batteries and opinions included. And it continues to fulfill that role very well. To do so, reqwest combined or implemented a lot of features that weren’t easily accessible elsewhere in Rust. Things like redirect handling, connection proxies, and compression. People love it. It’s the most popular HTTP client used in…

2024 in review

I want to go through some highlights of the year. Thanks for coming along for the ride! 1 A year of being independent This was my first entire year of my being an independent open source maintainer . I’m very happy with how it turned out! I highly appreciate all who sponsor some amount each month, thank you all! It adds up. <3 I’ve found setting up advisor retainers to be very effective: I get to…

hyper Roadmap 2025

After a year since hyper 1.0 , we’re updating the ROADMAP. hyper is an HTTP library written in Rust, used by many in production. The purpose of the ROADMAP is to highlight what is highest priority in order to continue orienting hyper towards its VISION. It’s based on interviewing our users to see make sure what the most important things are. Writing it down is a way of letting users know what’s…

hyper in curl Needs a Champion

tl;dr - hyper in curl is nearly complete, but it needs a champion. Without a partner actively engaged that wants to enable and ship, it’s now on the path for being deprecated and removed. It needs a champion, a backing vendor or distro. Will that be you? UPDATE 2024-12-21 : curl has dropped hyper . Why would you put a hyper in a curl? Why would you? Memory safety. Company after company , product…

hyper HTTP/2 Continuation Flood

Patches are available for h2 , v0.4.4 and v0.3.26, to harden against a newly disclosed HTTP/2 attack vector, mostly for servers. If you need help, reach out for support . If you’re curious about more, read on. What is the attack? In HTTP/2, there are a bunch of frame types. Some of those frames are related to sending headers (or fields). Since there is a maximum frame size, in order to send more…

Podcast: Rustacean Station, hyper 1.0, and independent maintainership

I was recently a guest on the Rustacean Station podcast . It was nice to catch up after a couple years since my last appearance on the show. We spoke about hyper, how and why it became v1.0, becoming an independent maintainer, future work, and more. I thought I’d grab a few fun and interesting quotes, with their timestamps: Sponsoring is not the Mafia (11:48) The lowest engagement is sponsorship…

reqwest v0.12

Today marks the v0.12 release of reqwest , a higher-level, batteries-included HTTP client for the Rust language. What’s new The headline feature of reqwest v0.12 is the upgrade to hyper v1. reqwest does a lot of custom work to add features to hyper internally, but doesn’t need to expose too much of it publicly. This was what took the majority of the work to upgrade. Still, as outlined in the the…

2023 in review

A year of change, and of stability. Let me briefly reminisce and highlight what happened in 2023. Independent I became an independent maintainer in June 2023. This was a somewhat scary decision, but it did exactly what I hoped it would: my work-life balance feels fantastic. I’m also glad to be able to do similar to what I did at AWS—meeting with and advising teams with serious deployments—but with…

hyper v1

I’m excited to announce v1.0 of hyper , a protective and efficient HTTP library written in the Rust programming language. hyper provides asynchronous HTTP/1 and HTTP/2 server and client APIs, allowing you to bring your own IO and runtime. It’s been exciting and humbling to watch users build awesome things. Cloudflare uses hyper within Oxy, its next generation proxy framework to handle traffic at…

hyper HTTP/2 Rapid Reset Attack: Unaffected

Today, the world has been made aware of a potential vulnerability affecting most HTTP/2 implementations, sending a rapid amount of streams and resets. If you use hyper , even just it’s h2 dependency, you are safe. hyper is not affected . Especially if you have h2 v0.3.18 or newer. We manually verified that an example hyper server responds correctly. Big thanks to @Noah-Kennedy for all the help. If…

Was async fn a mistake?

This stabilization PR for async fn in traits made me think: was async fn in Rust a mistake? I mean, I dunno . Maybe it wasn’t . But play along for a moment. By the way, I don’t mean that async / await in Rust itself is a mistake. That’s a Big Deal. It allows companies to deploy some serious stuff to production. And async and await syntax is a huge save. I don’t want to lose that. Writing manual…

I'm an independent open source maintainer

tl;dr - I’m independent, sponsor me! I’m doing something new. I’m an independent open source maintainer! In the beginning of June, I left my position at AWS . 1 I’m still focused on Rust, async, and HTTP stuff. Projects like hyper , reqwest, h3, tower, and any other new ideas that come along. I just won’t be doing so as an employee. So, then how do I get paid? Let me just clear up a couple ways…

Report on Surprise hyper CVE from 2023-04-11

Meta This document is meant to help publicize the learnings from a recent emergency in hyper. Documents like these are common within various organizations. Some call them “postmortems”, others say “incident reports”. I quite like what Amazon calls them, since it aptly describes the purpose: Correction of Error . There was an error that caused an emergency, and we want to correct that error.…

This Month in hyper: March 2023

The days are growing longer up here, and work to make hyper better and better continues onwards! There was some particularly exciting releases, and a bunch of conversations had in March 2023. hyper 1.0 Preparing users for upgrading to 1.0 One of the important parts of the hyper 1.0 polish period is making sure upgrading from 0.14 to 1.0 is as smooth as we can make it. hyper v0.14.25 is here to…

This Month in hyper: February 2023

After recapping the 2022 year , here’s what the amazing contributors have been doing to make hyper ever better during January and February of 2023. Releases hyper v0.14.24 : fixes some expect-continue behavior, and reduces the internal max allocation in to_bytes . h2 v0.3.16 : adds a missing piece for Extended CONNECT, and several bug fixes (memory reduction, panics) reqwest v0.11.14 : adds…