I recently evaluated different protocol libraries for inter-language IPC. The state of Cap'n Proto is sadly quite a bit worse than Protobuf. Many languages either don't have an implementation, or it hasn't been updated for several years.
But it's such a good system, I wish we could use it.
Some language implementations are under active development, like C++, Go and Rust. Others not so much. As language support comes, these are major ones. Let's hope they can drive the ecosystem forwards into more popular use.
I don't think it's going to happen with only a couple languages with good support. Messaging is fundamental enough that you don't want to swap libraries if not necessary, which means I won't choose it if the languages our products use are not well-supported. Just as a couple of examples:
- Node (& JS in general) have three implementations. One[1] mentions in the README that it's a hacky wrapper, the interface isn't final and the implementation is slow - for 9 years now. Another one[2] without support for RPC hasn't been updated in 4 years, and the last one[3] for 10 years.
- Lua[4] has been updated sporadically over the last couple of years, but the README mentions it ONLY works with LuaJIT v2.1, not with current Lua versions.
Currently it's hard to justify using it in a long-term project, considering how much broader the language implementations for Protobuf are. They also aren't perfect, but there is a lot more buy-in.
A tough road ahead, I agree. Currently there is other work going, by the Spritely Institute [0] non-profit. They are working on standard specifications fo the Object Capability Network (OCapN) [1] and Cap'n Proto may align with that. Spritely's object capabilities vision [2] looks very promising. Their open standards approach is very early stages still [3].
But it's such a good system, I wish we could use it.