> we decided to test BSON and MessagePack due to their closeness to JSON
Then I'm surprised you overlooked Thrift so quickly given that it has several binary and a JSON encoding. There's also an official Go implementation in tree, and you get the comfort of a protobuf-like schema format (which with code-gen means you don't have to rewrite a bunch of code if you want to use it across languages).
Other nice options: Apache Avro (no code gen, json schemas, very dense encoding) and Cap'n Proto
Good points. Both thrift and protobuf (and Avro) seemed heavy weight due to their requirements. We wanted something lightweight, thus BSON and MsgPack.
In terms of rewriting a bunch of code, msgpack and bson both easily marshall/unmarshall in just a few lines of code so not a lot of rewriting. Libraries exist for all types of languages.
Maybe I need to update my criteria. Thx for the comment tho.
Then I'm surprised you overlooked Thrift so quickly given that it has several binary and a JSON encoding. There's also an official Go implementation in tree, and you get the comfort of a protobuf-like schema format (which with code-gen means you don't have to rewrite a bunch of code if you want to use it across languages).
Other nice options: Apache Avro (no code gen, json schemas, very dense encoding) and Cap'n Proto