Protocol Buffers for Clojure
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Protocol Buffers for Clojure

Build Status

Disclaimer: This project is a work in progress. Please use the issue tracker to report any questions, enhancements or issues you encounter.

This library aims to provide a pure Clojure implementation for reading and writing Google's binary Protocol Buffer format. Currently there exists already a library clojure-protobuf for this which is based on generated Java classes. Please use that library for now if you need Protocol Buffer support in Clojure.


FIXME: write

See Also


We are a small group of individuals, coming together once a month at the Hackergarten in Lucerne, Switzerland.

We choose to implement a clojure library for the Google Protocol Buffer. There is already an existing clojure library. Despite this, we are working on our own version for the following reasons:

  • So far no project member ever did something in Clojure. For us, it is an easy enough project to learn Clojure. Therefore don't expect anything from our solution.
  • The existing implementation seems no to be Clojure-like enough. Calling a tool first, for the conversion of the *.proto files, written in C, doesn't feel clojure-eseque enough. This feeling may be inadequate, but are based on the following thoughts:
    • Using Protocol Buffer in the REPL should be as easy as possible.
    • Creating a dynamic webpage which allows to play around with Protocol Buffers, whould be easy either.


We defined an interfaced which consits of several functions and how a schema looks.


Read/write a protobuf byte stream, based on an intermeidate representation of the schema:


For debugging purpose. Read/write a protobuf byte stream to a string. Use the same format as the protoc tool from Google.


Read/write *.proto files and convert them into the intermediate schema:



TODO (see examples and tests)

protoc Command Line examples

Convert text reperesentation to binary representation:

protoc.exe simple.proto --encode=Person < simple.txt

Convert text reperesentation to binary representation:

protoc.exe simple.proto --decode=Person < simple.bin


Copyright (C) 2015 Remo Arpagaus

Distributed under the Eclipse Public License, the same as Clojure.