Luca Palmieri

Luca Palmieri

@lpalmieri.com

Author of zero2prod.com, a book on backend development in Rust, and https://rust-exercises.com. Building pavex.dev, a new Rust web framework. Principal Engineer at Mainmatter. Opinions are my own. He/him. @algo_luca on Twitter.

3.1K followers178 following164 posts

Next Wednesday will be my last day at Mainmatter. I joined as the first Rust hire, with a simple goal: build a world-class consulting team for Rust. 3 years later, Mainmatter is a household name in the space—it wasn't always easy, but I learned a lot during the ride.

Now it's time to go back to building products! I'll be starting something of my own in the world of agentic engineering, with a focus on security and governance. (if that sounds interesting, stay tuned: we'll be building up the team over the coming weeks 🏗️)

Looking for your wisdom folks. I am increasingly interested in: - Better *single-user* tools for PR reviews. - Products to spin up multiple cloud-hosted agents for coding purposes. No need for long-running VMs, ephemeral is good enough. What should I be checking out?

On PR reviews: not something that the whole team must adopt; simply a more effective UI for me, which integrates back into GitHub's "native" PR review flow.

I've been spending quite some time working on a mixed C/Rust project over the past year. cbindgen is the established solution in this space, but we ran into enough friction during an incremental C→Rust migration that I started exploring a different approach.

That weird urge to go build a new CI platform. Pure control plane for task orchestration, plug-your-own-compute with a marketplace of vendors, easy to bridge to GHA for initial adoption.

Underrated agentic workflow: take a messy commit history and slowly rewrite it into atomic revisions that can be reviewed and merged independently. Works beautifully with jujutsu (jj), using a duplicated branch to ensure no destructive changes are made to the original PoC.

Latest occurrence: I'm currently working on a trait redesign which requires touching _every single impl_ in the project (>30). As you work through the impl, you realize some tweaks are needed to the design and start accumulating clean-up commits. It'd suck to review that.

But it also sucks to perform commit surgery on a branch with 80+ revisions, which you intentionally created to be able to split this into granular PRs which can be sanely reviewed. With a bit of AI support, you can improve the life of the reviewer with minimal overhead.

Little update on my reflection adventures: I have extracted the core components of Pavex's compile-time reflection engine as a set of standalone crates! It serves as a preliminary step ahead of another release in the coming weeks 🛠️

I was inspired to write this down by @oxide.computer's podcast episode on software rigour in the LLM age. There's a ton of interesting work in this area, but it gets drowned by the larger discourse. So here I am, trying to do my part in pushing it above the noise threshold!

New year, new vacancies: Mainmatter is looking (again!) for an experienced Rust developer to join our Rust migration projects. C, C++, Delphi. Different starting points, same target: Rust! If you're interested, send an email to the address in the screenshot.

Mainmatter is looking for a Rust backend engineer, either as a full time employee or a freelancer. You'll be working on cloud-native projects, helping clients either adopting Rust or scaling it successfully. If you're interested, send an email to the address in the screenshot!

Mainmatter is looking for an experienced Rust developer to join one of our projects as a freelancer. We're migrating a database from C to Rust. The project is complex and performance-sensitive. That's what makes it fun! If you're interested, send an email to the address in the screenshot.

Less than 10 days left before Rustlab! It's a conference that's close to my heart—one of the first I spoke at, back in 2019! Years have been passed, but the vibe and the community have only improved. Tickets are still available—use `SP20FR` for a last-minute 20% discount.

I'll be a busy bee! I'll kick off on November 2nd with a Rust-Python interoperability workshop. On November 4th I'll be @fasterthanlime's sparing partner in his unfair Rust quiz and I'll close down the conference schedule with a talk on dependency injection. Looking forward 🚀

Concrete goal: define a driver-agnostic way to configure a Postgres connection. Then you research the details, obsess over an aspect (i.e. SSL configuration) and end up working for several ways on a generic way to configure a TLS client policy. Cool, but slow.

Only two weeks to go!

EuroRust@eurorust.eu

We’re excited to announce that @lpalmieri.com is speaking at #EuroRust25! It's a "Rewrite It In Rust" talk: Luca will discuss strategy (and challenges) of migrating Redis Query Engine (65k C LoC) over to Rust. We can’t wait! 🦀 ✨ Check out the schedule 👉 eurorust.eu/schedule/?ut... #Rustlang

New Redis release, but with a twist. It includes our first Rust patches to Redis Query Engine! In particular, it ships the new TrieMap implementation I wrote with Henk Oordt, as part of @mainmatter.com's ongoing collaboration with Redis.

We have another opening at Mainmatter, this time for a *technical writer*. You'd be working directly with me on new Rust training material, blog posts and other kinds of technical long-form content. If you're interested, send your resume job AT mainmatter DOT com

Rust 1.89.0 will stabilize let-chains (yay 🎉). In the same release, clippy will flag `if` statements that can be collapsed further using a let-chain. Outcome: your CI will fail when 1.89.0 is released, and you can't fix it ahead of time because the feature clippy wants you to use isn't stable yet 🙃

An even better solution from @briansmith.bsky.social: you can set an MSRV *just for clippy* via clippy.toml. This will configure a variety of lints to behave as if you were using that version to run clippy, including the collapsible_if one. Back to fearless toolchain updates!

Rust 1.89.0 will stabilize let-chains (yay 🎉). In the same release, clippy will flag `if` statements that can be collapsed further using a let-chain. Outcome: your CI will fail when 1.89.0 is released, and you can't fix it ahead of time because the feature clippy wants you to use isn't stable yet 🙃

It's official now: I'll be a speaker at RustConf 2025 🎉 My talk falls into the "Interop & Migration" theme, covering the work we've been doing with Redis, supporting the migration of some of their C code to Rust. You'll get all the details when the full schedule is announced!

Two weeks left to submit your talk proposals for EuroRust 2025 ⏳ The CfP closes on June 2nd! We're looking for a wide range of contributions: beginner-friendly talks, reports on Rust industrial usage, deep-dives on language features or crates, tutorials, etc.

The Rust team at Mainmatter has grown, but we need to grow it further! We're looking for freelancers to help us migrate a database from C to Rust. It's an incremental rewrite: a module at a time, interfacing with the existing C code. European hours, full remote, 4 days a week.

In case you were wondering: work on Pavex continues! I'm reworking the public API to minimize friction. We're shifting towards attribute macros for component egistration. This removes the need to spell out raw paths, a major pain point of the first beta version.

The goal is for the API to be ~stable on release. The feedback I received (and keep receiving) during the beta is making that more and more of a possibility as we converge on a defensible design.

It took a few iterations, but the API for sessions in Pavex is _done_. The release includes a guide and two storage implementations (in-memory and Postgres-based). More storage options will follow.