tRPC is awesome - if you're writing full-stack TypeScript and don't care about other languages, it's very convenient.
Protobuf might be a more appealing choice if you want to support clients in other languages, or if you're interested in getting a bit more value out of your contract language (e.g., breaking change detection).