In this talk, I will give a brief overview of Protocol Buffers, and when it makes sense to use them versus other data serialization formats such as JSON. We will then dive into ScalaPB, explore its API and see how the use of lensing enables a very elegant syntax of updating deeply nested immutable data structures. I will show some unique features of ScalaPB such as custom type mappers. Finally, as protocol buffers can represent arbitrarily complex data structures, I will show how ScalaCheck is used to generate increasingly large protocol buffer structures (and fill them in with random data) to validate the correctness of the library by way of property checking. If there's time left, I will also give a sneak peek of the upcoming release that supports the new proto3 syntax.