Migrate your C codebase to idiomatic Rust
We migrate holistically
The codebase
The codebase
We port your C to Rust that a Rust engineer would recognize as Rust. That means setting up build systems and CI, redesigning ownership, error handling, and API surfaces to fit Rust's memory model, not wrapping the original structure in unsafe and calling it done.
The verification system
The verification system
We deploy a wide array of state of the art verification tooling: differential testing against the C implementation, fuzzing, sanitizers, property testing, and shadow deployments where the system allows it. Of course you get to keep that harness long after the migration ends.
Your team
Your team
We pair, review, and run workshops throughout the engagement. By the time we're done, your engineers are certified Rust experts
Migration, not transliteration
Automated C-to-Rust conversion tends to fall into the trap of just producing Rust that compiles but not Rust that's safer: it preserves the aliasing, lifetimes, and manual memory management of the original inside unsafe blocks, leaving you with the same bugs in a language you now also have to learn. We treat the migration as a redesign instead. A pointer and a length become a slice; a global with a documented locking convention becomes a type that makes the convention unrepresentable if you get it wrong; an error code half the callers ignored becomes a Result that warns callers when left unused.
The result is a codebase that's better than what you started with, not a translation of it. That takes longer than running a converter. It's also the only version of this work that pays back.
We’ll work with you to
Choose the migration strategy that fits the system: bottom-up from the leaf modules, or one focused rewrite.
Build the verification system the migration rests on, covering differential testing, fuzzing, sanitizers, and shadow deployment.
Execute the migration using coding agents where possible to move faster without giving up quality.
Mentor your team throughout, so they can finish the migration and evolve the codebase after we leave.
We are Rust experts
Mainmatter has been active in the Rust ecosystem for years, creating the 100 Exercises to Learn Rust course, organizing EuroRust, contributing to crates.io, and maintaining several other open-source projects. We are also a founding member of the Rust Commercial Network, where we work with ecosystem members to solve shared problems and advance Rust adoption.
Our team includes Jonas Kruckenberg, author of “The C to Rust Migration Book,” Henk Oordt, Senior engineering consultant, and Marco Otte-Witte, founder of Mainmatter and host of EuroRust.



Success stories
Our work spans C-to-Rust migrations and Rust systems development.
Working with Mainmatter's experts has been a great experience. They helped us develop a state-of-the-art data pipeline, mentored our internal team and introduced several improvements around our Rust code and infrastructure along the way.”
Senior Engineer at Aleph Alpha
FAQ
Can we keep shipping features during the migration?
Yes, and on most codebases you have to. Incremental migration means C and Rust coexist behind a stable FFI boundary for as long as you need.
What if our team doesn't know Rust?
That's the normal starting point. Mentoring is part of the engagement, not an add-on.
Do you use AI to do the migration?
We use coding agents for mechanical work, behind the verification system. The design decisions are ours, and every change is reviewed.
How long does it take?
Depends on the codebase. The first step of any engagement is an assessment that gives you a scoped answer instead of a guess.
Let’s talk!
Let's talk about the challenges you're facing. Our experts are ready to guide you through your next big move.
Send us a message
You might like...

The C to Rust Migration Book

Rust training and workshops

How do you rewrite C/C++ projects to Rust?