But that’s my question, if you choose a binary format, what are the issues to look out for?
Example, I work with Java, Rust, Go, and Python at work. I have specifically had issues with Avro (not my choice) which is really well supported in Java, but not much else.
Binary data support is pretty nice too for avoiding multipart request bodies.
That said, there was a comment in their post about not wanting to tightly couple the Go and Rust since they weren't sure they could accurately represent their structures in both langs.
I don't know anything about this turbo tool, but it seems relatively low-throughput, and they intend to migrate it all to Rust anyway, so it's probably not a big deal.
That said; I'd have done this with binary comms and not JSON, ProtoBuf or not.
For example, it prioritizes backwards and forwards compatibility -- which is not a concern for IPC where you control both ends. So no real optional or required fields. Comparing structures (Go) is awkward and uses reflection. Structs embed a mutex and preserve bytes for unknown fields etc...
MessagePack seems to make a better set of tradeoffs by comparison.