The main use-case is different: gRPC and Cap'n'Proto are designed for networked servers, while D-Bus and Varlink are designed for local IPC. Varlink is a lot simpler than other alternatives.
It's JSON with some simple idea of RPC added to it. With the main idea apparently being that it is human-readable.
We've been using Varlink for one project, but I've never found myself in a situation where I had any benefit from the data being JSON. You rarely read the raw data. But compared to gRPC or CapnProto, you lost compile-time type checking and now you need 10mins of testing a vending machine before you get a "key not found"-error because you missed one spot on renaming.
Also, I've written varlink-cpp building on asio and nl-json at some point: https://github.com/wolletd/varlink-cpp.
But as our varlink usage declined, it never found much usage and isn't maintained.
"you lost compile-time type checking" makes it sound like you haven't been using code generation? Varlink has an interface definition language which makes everything type-safe.
Simpler is pretty subjective. A lot of people have already ingrained the complexity of grpc and/or capnproto. And more importantly, there are a lot of well maintained libraries for those protocols.
At the end of the day, local or remote, it is all just pushing data over sockets, no?