Worth a read: @manishearth blogged about Diplomat, the multi-language FFI tool for Rust libraries.

https://manishearth.github.io/blog/2026/06/14/diplomat-multi-language-ffi-for-rust-libraries/

Contains some shoutouts to UniFFI, the tool I'm working on too.

Diplomat: Multi-language FFI for Rust Libraries - In Pursuit of Laziness

This is a post I’ve been meaning to write and publish for years, and only recently got around to doing it. I’m hoping to get back into writing more! …

@jer @manishearth you might want to look at Bazel or equivalent, so you can have the build system download all of the dependencies for Diplomat contributors.

Here's what I did for the tweet parser: https://sayrer.com/blog/whats-in-a-tweet/#bazel

What's in a Tweet?

An exploration of Twitter text parsing.

@sayrer @jer I'm a bit confused about this suggestion, diplomat is a rust project, if you have rust installed you can hack on it, you don't need dependency management beyond cargo.

Running tests for individual backend may need more deps but it's mostly like "if you're working on Dart you need a standard Dart environment" which like...fair. It's explicitly designed so that you don't need to care about backends you don't work on

@manishearth @jer doing it the way I have there lets you test all of the language bindings at once, without depending on the local environment at all. I read "most Diplomat developers are not familiar with Java, and setting up a Java development environment causes unnecessary friction" in diplomat-java. The approach I gave fixes all that.

@sayrer @jer I think you are trying to tell me to use a tool to solve a problem I do not have.

diplomat-java is a special case and not a general issue. you're extrapolating from a years-old README

@sayrer @jer diplomat-java is experimental, we're not sure about the approach, and it relies on *weird* java tooling, not regular stuff. putting that together, I wanted it prototyped outside.

"use bazel" is a strictly worse solution: people like me doing cross-language diplomat dev still have to set up a new tool, except now the people who were working on just their language *also* need to do that

@sayrer @jer like, I work at Google, I use Blaze, I love it, and I also think it is a very poor fit for Diplomat.

Right now we are a rust tool where the only additional dep is your language *if you want to run integration tests*, and cargo-make (not mandatory, just makes it easier). This is a desired state.

@manishearth @jer if you use Blaze, then I guess you know the deal. But I think you're overestimating the difficulty of using this approach on GitHub. My approach is that maintainers use Bazel or equivalent, while consumers get artifacts suited to their build system.
@sayrer @jer I don't want maintainers to be using a whole new build tool. And I want consumers to be able to use the tests in the repos as examples for end to end integration. Like, when it comes to ffi libs I am perennially annoyed when the linkage examples are not straightforwardly copyable.

@sayrer @jer here's things I, as a maintainer, don't want to do

- learn Bazel workflows for every language we target
- maintain these Bazel workflows
- deal with cargo-to-Bazel. It's easy, it's also Another Step

all for something that doesn't solve a problem I have

@manishearth @jer hmm, ok. I'm not trying to win an argument or anything. I'm genuinely surprised you are so opposed, but you know the type of tool I'm using. Maybe I'll try a bare VM and see how hard it is to build my project.

As for the Bazel workflows, they are all kind of the same, because the various rules_* maintainers have smoothed it all out .

Maybe I don't understand the problem. If you change the core, how do you test all of the language bindings? Maybe I am overweighing that.

@sayrer man, you typed up half a dozen toots after someone told you your tool does not solve any problem they are facing. It's time to stop. Please don't reply to me anymore.

@sayrer I'm opposed because you suggested I switch over to a tool to solve a problem I don't have.

Most changes to the core should not change generated code. If they do, there's a good chance that's a bug. We also have per-backend CI. I *like* it being easy to run all tests locally but it's less and less important these days for backends you're not working on.

@manishearth ok, I guess I didn't make it clear that I had switched to trying to understand your way. I wasn't doing advocacy in a "just asking questions" kind of way.