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.