Build Katzenpost 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 (
gccorclang).
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.