For interfacing with Google systems sure, I could see that, that is an external defined API. But that library implies nothing of the sort and seems to be something more generic. For my erlang projects I tend to just use term_to_binary, I even use such things for many of my C projects (as I have a habit of integrating them to erlang things eventually anyway, plus it is convenient and fast). I never use REST/JSON for anything that is not strictly webserver oriented for external API's (and even then, depending on if tcp itself is allowed then I might make a better tcp level API that bypasses the webserver). If I truly need to pack data tightly then I always bit-twiddle it together, it is always possible to shave off some bits some-how and in such places as that then protobufs is a very heavyweight protocol.