Tom MacWright

2025@macwright.com

Revisiting "Rust is a hard way to make a web API"

I wrote this article about building a normal web API with Rust in 2021. Four years have passed. Is it still correct?

Rust has a fair number of web server frameworks, database connectors, and parsers. But building authentication? You have only very low-level parts.

I think this is still mostly true: libreauth is still sporadically developed, but boringauth is long-abandoned.

How about SDKs? In mainstream languages, you’ll be able to plug into Google Cloud services, AWS, or Stripe by bringing in an official library… Not so with Rust. There are a few third-party libraries trying to fill in the blanks, which is great, but with the sheer velocity of those services, will they really be able to give a quality experience?

This seems to be improving! There's an AWS SDK for Rust. Still no Stripe SDK. Though surprisingly, I've seen that companies like Stainless, that generate SDKs and use Rust internally, don't generate Rust SDKs.

Rust’s compiler is faster than it was, but still slow

Still relatively true, and developer satisfaction with compiler speed is still meh.

The Rust async ecosystem is challenging, to say the least: there are different sorts of async, projects that span domains to do async implementations of unrelated stuff like tokio.

Still very true. Still lots of wrangling tokio, and general displeasure from the community about the ergonomics of async code.

Unfortunately, a lot of the incredibly exciting work in the Rust ecosystem has nothing to do with web application servers. There are some promising web frameworks - even a somewhat higher-level framework - but they’re undoubtedly in a niche. Even Actix, the main web framework, has a very top-heavy set of contributors.

Still true, as far as I can tell: Iron, the framework I linked to there, was abandoned that year. Actix web is still maintained and is pretty popular. Rocket is still developed, but seems to be potentially petering off.


Overall: I'd still probably avoid Rust if I were building a wide API with lots of endpoints and business logic, but I don't know exactly what I'd use instead.