184 Stars
Updated Last
7 Months Ago
Started In
February 2014


This is a Julia package that provides a compiler and a codec for Protocol Buffers.

Protocol Buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.


Given a test.proto file in your current working directory:

syntax = "proto3";

message MyMessage {
    sint32 a = 1;
    repeated string b = 2;

You can generate Julia bindings with the protojl function:

using ProtoBuf
protojl("test.proto", ".", "output_dir")

This will create a Julia file at output_dir/test_pb.jl which you can simply include and start using it to encode and decode messages:

# Main.test_pb

io = IOBuffer();

e = ProtoEncoder(io);

encode(e, test_pb.MyMessage(-1, ["a", "b"]))
# 8


d = ProtoDecoder(io);

decode(d, test_pb.MyMessage)
# Main.test_pb.MyMessage(-1, ["a", "b"])


We'd like to thank the authors of the following packages, as we took inspiration from their projects:

  • We used Tokenize.jl as a reference when implementing the Lexer/Parser.
  • We used the pre-1.0 version of ProtoBuf.jl as a giant shoulder to stand on:).