This is LibPaxos3! A complete rewrite of LibPaxos2. LibPaxos3 has been improved in the following aspects:

  • Doesn't make use of multicast
  • Has a cleaner design
  • Has a better build system based on CMake
  • Comes with unit tests

LibPaxos3 is divided in two libraries: libpaxos and libevpaxos.

Libpaxos (see libpaxos/paxos) implements the core of the Paxos consensus protocol, and is not cluttered with network specific code. That is, libpaxos does not depend on any particular networking library.

Libevpaxos (see libpaxos/evpaxos) is the actual networked Paxos implementation. This library is built on top of the libpaxos and libevent.


These are the basic steps required to get and compile LibPaxos3

git clone
mkdir libpaxos/build
cd libpaxos/build
cmake ..

LibPaxos3 depends on libevent and msgpack. By default, LibPaxos3 uses an in-memory storage, with support for a storage backend based on LMDB (see paxos.conf and build options below).

LibPaxos3 should compile on Linux and OS X.

Useful build options

You pass options to cmake as follows: cmake -DOPTION=VALUE

  • LMDB_ROOT=PATH - point it to your installation of LMDB
  • LIBEVENT_ROOT=PATH - point it to your installation of Libevent
  • MSGPACK_ROOT=PATH - point it to your installation of MessagePack

Running the examples

cd libpaxos/build
./sample/acceptor 0 ../paxos.conf > /dev/null &
./sample/acceptor 1 ../paxos.conf > /dev/null &
./sample/proposer 0 ../paxos.conf > /dev/null &
./sample/learner ../paxos.conf > learner.txt &
./sample/client 1


See paxos.conf for a sample configuration file.

Unit tests

Unit tests depend on the Google Test library. Execute the tests using make test in your build directory, or run runtest from build/unit for detailed output.


LibPaxos project page

LibPaxos3 repository

Mailing list


LibPaxos3 is distributed under the terms of the 3-clause BSD license. LibPaxos3 has been developed at the University of Lugano, by Daniele Sciascia.