Editing instructions: In order to make sure that the wiki is not a complete mess, we are going to enforce some brutal cleanup policies. The main page (this page) serves as an organized directory of almost every wiki page; we will delete any orphan page by default.

General Note: In order to avoid multiple copies of the same information leading to inevitable consistency issues, we try to keep the information primarily in the source code repository and provide pointers to files within the repository from this wiki. Any appropriately formatted markdown files in the repository can be directly linked in a wiki page, see syntax guide.

This page describes the existing deployed version of the GDP that was in use at the October 2017 Terraswarm meeting. For information about the next generation, see GDP 2018.

How to contact us?

See Frequently Asked Questions


See Frequently Asked Questions

Getting started

Read the general philosophy first, here: source:doc/tutorial/ This should give you an idea of why we made certain design choices.

For ease of getting started, we maintain a basic server side infrastructure in Berkeley (see below). What this means is: in order to get started, you do not need to run a log-server or router. However, at the minimum, you will need the client side C-library. If you wish to use some other language bindings, you definitely need the bindings for that particular language, but you probably will still need the C-library. The reason for this is: in order to minimize developer effort in supporting multiple languages, we have created thin wrappers in languages (say Python) that internally call the C-library.

User Introduction

If you are a user of the GDP and you're not responsible for installing, developing, or maintaining the GDP infrastructure itself, see User Introduction to the GDP. This discusses how to connect to the GDP and other similar things.

Software installation

The supported platform is Linux (x86 and ARM v8), but the code has been known to work on Mac, FreeBSD by various people. In order to be able to write/run GDP applications, a user needs the C-library and/or language bindings as mentioned above.

  • We currently maintain prepackaged versions of C library and Python binding in form of .deb packages (see These usually are a little outdated than the most recent version from the repository.
  • For instructions on how to compile from source, see Compiling the GDP from Source. See Repo access for instructions on how to get access to source code.

The GDP router is in its own separate repository for historical reasons.


We have put together a tutorial to allow you to get started quickly without needing to dig around in the API documentation. However, note that the tutorial does not cover every possible usage.

Navigating the documentation

API documentation

Technical documentation

In-depth technical information, such as protocol details, etc. Note that we experimented a little bit with various document formats earlier, and there are still places where other formats (.dbk, .html, etc) need to be converted to markdown.

Infrastructure information

For users to get started without worrying about setting up their own log-servers and routers, we maintain a basic infrastructure at Berkeley. We have the following 4 machines:


Each of these machines runs both a router and a log-server. The router, by default, listens on TCP port 8007. If you use a prepackaged distribution, these are installed by default in /etc/ep_adm_params/gdp. If you are starting from source, see elsewhere.

The log-servers do not listen on a TCP/UDP port. They can be referenced by their 256-bit GDP name. For the moment, the GDP names are derived by taking a SHA256 hash of a human readable string. The convention we use is a reverse-DNS style notation. For example, the log-server running on is named edu.berkeley.eecs.gdp-01.gdplogd (note the gdplogd at the end).

Urban Heartbeat

This ideally should be moved to it's own sub-project in long term

RESTful Interface

GDP Version 2 Transition

Useful links