Skip to content

Tenzir uses CMake as build system with a C++23 compiler.

Clone the repository:

Terminal window
git clone --recursive https://github.com/tenzir/tenzir
cd tenzir

Ensure all dependencies are available, then configure and build using a preset:

Terminal window
cmake --list-presets # discover available presets
cmake --preset <preset-name>
cmake --build --preset <preset-name>

For example, to build a release on macOS:

Terminal window
cmake --preset macos-clang-release
cmake --build --preset macos-clang-release

For custom configurations without presets:

Terminal window
cmake -B build -G Ninja
cmake --build build

Run unit tests via CTest:

Terminal window
ctest --test-dir build

Run integration tests via tenzir-test:

Terminal window
cd test
uvx tenzir-test

Install Tenzir system-wide:

Terminal window
cmake --install build

Options:

  • --prefix /path/to/prefix — custom install location
  • --strip — remove debug symbols
  • --component Runtime — install only runtime files, not development headers

Delete the build tree to start fresh:

Terminal window
rm -rf build

This avoids configuration glitches when switching build types.

The Dockerfile provides multiple build targets.

Build the default image:

Terminal window
docker build -t tenzir/tenzir .

Build the node image (runs tenzir-node as entrypoint):

Terminal window
docker build -t tenzir/tenzir-node --target tenzir-node .

Build the development image with all build-time dependencies for creating custom plugins:

Terminal window
docker build -t tenzir/tenzir-dev --target development .

We use Nix for reproducible builds on Linux and macOS. The flake provides all dependencies:

Terminal window
nix develop
cmake --preset nix-clang-release
cmake --build --preset nix-clang-release

For pre-built dependencies, configure the Tenzir binary cache:

Terminal window
nix run nixpkgs#cachix -- use tenzir

You can also delegate the entire build to Nix with nix build .#tenzir-de, but this doesn’t support incremental builds.

To build static binaries on Linux:

Terminal window
nix develop .#tenzir-static.unchecked
cmake --preset nix-static-release
cmake --build --preset nix-static-release
RequiredDependencyVersionDescription
C++ CompilerC++23 requiredTenzir is tested to compile with GCC >= 14.0 and Clang >= 19.0.
CMake>= 3.30Cross-platform tool for building, testing and packaging software.
CAF>= 1.1.0Implementation of the actor model in C++. (Bundled as submodule.)
OpenSSLUtilities for secure networking and cryptography.
FlatBuffers>= 2.0.8Memory-efficient cross-platform serialization library.
Boost>= 1.83.0Required as a general utility library.
Apache Arrow>= 18.0.0Required for in-memory data representation. Must be built with Compute, Filesystem, S3, Zstd and Parquet enabled. For the gcs plugin, GCS needs to be enabled.
re2Required for regular expression evaluation.
yaml-cpp>= 0.6.2Required for reading YAML configuration files.
simdjson>= 4.0.0Required for high-performance JSON parsing. (Bundled as submodule.)
spdlog>= 1.5Required for logging.
fmt>= 10.0.0Required for formatted text output.
xxHash>= 0.8.0Required for computing fast hash digests.
robin-map>= 0.6.3Fast hash map and hash set using robin hood hashing. (Bundled as subtree.)
fast_float>= 3.2.0Required for parsing floating point numbers. (Bundled as submodule.)
libbacktrace>= 1.0Required for generating stack traces. (Only on Linux.)
libmaxminddb>= 1.8.0Required for the geoip context.
reproc++>= v14.2.5Required for subprocess control.
libpcapRequired for building the pcap plugin.
librdkafkaRequired for building the kafka plugin.
http-parserRequired for building the web plugin.
cppzmqRequired for building the zmq plugin.
clickhouse-cpp>= fbd7945Required for building the clickhouse plugin. (Bundled as submodule.)
pfsRequired for the processes and sockets operators on Linux.
Protocol Buffers>= 1.4.1Required for building the velociraptor plugin.
gRPC>= 1.51Required for building the velociraptor plugin.
rabbitmq-cRequired for building the rabbitmq plugin.
yara>= 4.4.0Required for building the yara plugin.
poetryRequired for building the Python bindings.
DoxygenRequired to build documentation for libtenzir.
PandocRequired to build the manpage for Tenzir.
bash>= 4.0.0Required to run the integration tests.
bats>= 1.8.0Required to run the integration tests.
uv>= 0.7.2Required to run the python operator.

The minimum specified versions reflect those used in CI and manual testing. Older versions may still work.

Every release includes an SBOM in SPDX format listing all dependencies and their versions:

Last updated: