Build Katzenpost from source

Pinned versions of the Katzenpost stack and how to build each component from source.

Build Katzenpost from source


This page is the canonical reference for the pinned versions of the Katzenpost stack, together with brief instructions for building and running each component from source. It is intended for users and mixnet node operators who wish to run the software ahead of binary packages becoming available. The pinned-versions table below is the full compatibility set across repositories and serves application developers as well; for the thin client library APIs themselves, consult the Thin Client API Reference.

Pinned versions

The following git tags are the current recommended versions for running the stack, and they are one mutually compatible set: this katzenpost with this thin_client with this katzenqt. Components in the same row of the same repository should be built from the same tag.

Component Repository Path Branch Tag
Server-side components (mix server, dirauth, courier, replica) katzenpost cmd/server, cmd/dirauth, cmd/courier, cmd/replica main v0.0.90
kpclientd (client daemon) katzenpost cmd/kpclientd main v0.0.90
Thin client libraries (Rust, Python; the Go thin client lives in the katzenpost repository at the katzenpost tag) thin_client src, katzenpost_thinclient main 0.0.23
katzenqt (Qt group chat client) katzenqt (root) main 0.0.2

The hpqc cryptography library needs no row here: it is pinned by the katzenpost repository’s go.mod and go.sum.

Prerequisites

  • Go 1.23 or newer.

  • Make, git, and a C toolchain (gcc or clang).

For users

kpclientd (the client daemon)

Client applications such as katzenqt do not, by themselves, speak to the mix network. They communicate over a local socket with the kpclientd daemon, which performs all cryptographic and network operations.

git clone https://github.com/katzenpost/katzenpost
cd katzenpost
git checkout v0.0.90
make kpclientd

The resulting cmd/kpclientd/kpclientd binary is run with a TOML configuration file:

./kpclientd -c /path/to/client.toml

A configuration file is required. For testing, the Docker test mixnet generates one automatically; for joining a public network, you would obtain the configuration from that network’s operators.

katzenqt (Qt group chat client)

A decentralised group chat client built atop Qt. It depends solely on the Katzenpost mix network and the Pigeonhole storage services; no central server is involved. The Group Chat Design spec describes some of katzenqt’s design; for the storage concept, see Understanding Pigeonhole.

Warning. katzenqt is in active development; it is not appropriate to rely on it for anonymity, security, or privacy at this stage.

sudo apt install -y git make libxcb-cursor0 libegl1
git clone https://github.com/katzenpost/katzenqt
cd katzenqt
git checkout 0.0.2
make deps
make run

Out of the box, make run builds kpclientd, installs it as a systemd user service, and connects to the namenlos public mixnet: the Makefile installs a kpclientd configuration that dials namenlos and a thin client configuration that reaches the daemon over a local socket. No configuration editing is required. If the application cannot connect or messages fail to move, first check the network’s health on the namenlos status page.

For step-by-step setup, troubleshooting, and details on persistent state, see the repository’s README at the pinned tag.

For operators

The backend components (mix server, dirauth, courier, replica) are built from the katzenpost repository’s top-level Makefile, which provides a target per component. Several of the targets, among them make server and make dirauth, produce deterministic, reproducible binaries; work is underway to make every component build reproducibly, the replica being the furthest out.

git clone https://github.com/katzenpost/katzenpost
cd katzenpost
git checkout v0.0.90
make server
make dirauth
make courier
make replica

The replica requires RocksDB; its Makefile target installs that dependency first. For deployment guidance, configuration, and operating practice, see the Admin Guide.