Skip to content

Serialize Ruby objects to Protocol Buffers


Notifications You must be signed in to change notification settings


Repository files navigation


CI codecov Gem Version License

Pb::Serializer is Protocol Buffers serializer for Ruby objects.




The following is an example of a message definition and ActiveRecord model for Protocol Buffers.

syntax = "proto3";

package example;

option ruby_package = "ExamplesPb";

message User {
  uint64 id = 1;
  string name = 2;
# Schema: [id(integer), name(string)]
class User < ActiveRecord::Base

Implements a PbSerializer for the User message defined in .proto. You need to declare the generated class and all defined fields in the PbSerializer.

class UserPbSerializer < Pb::Serializer::Base
  message ExamplesPb::User

  attribute :id
  attribute :name

You can serialize Ruby objects to protobuf message object with the implemented PbSerializer.

user = User.find(123)
# => <ExamplesPb::User: id: 123, name: "someuser">

The value of each attribute is determined from the PbSerializer instance or the object passed to the constructor.

Next read


Add this line to your application's Gemfile:

gem 'pb-serializer'

And then execute:

$ bundle

Or install it yourself as:

$ gem install pb-serializer


After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to


Bug reports and pull requests are welcome on GitHub at This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.


The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Pb::Serializer project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.