libdatadog
May 23, 2026 ยท View on GitHub
|
NOTE: If you're building a new Datadog library/profiler or want to contribute to Datadog's existing tools, you've come to the right place! Otherwise, this is possibly not the droid you were looking for. |
|
Development
Contributing
See CONTRIBUTING.md.
Building
Build libdatadog as usual with cargo build.
This repository uses git submodules for shared test data. If tests that depend on fixture data fail because files are missing, initialize submodules from the repository root:
git submodule update --init --recursive
Builder crate
You can generate a release using the builder crate. This will trigger all the necessary steps to create the libraries, binaries, headers and package config files needed to use a pre-built libdatadog binary in a (non-rust) project.
Here's one example of using the builder crate:
mkdir output-folder
cargo run --bin release -- --out output-folder
Build dependencies
- Rust 1.87.0 or newer with cargo. The exact version is pinned in
rust-toolchain.tomlat the workspace root and rustup installs it automatically. See the comment nearrust-versioninCargo.tomlfor the constraints to check when bumping this version. cbindgen0.29cmakeandprotoc
Running tests
This project uses cargo-nextest to run tests.
cargo nextest run
Installing cargo-nextest
The simplest way to install cargo-nextest is to use cargo install like this.
cargo install --locked 'cargo-nextest@0.9.96'
Dev Containers
Dev Containers allow you to use a Docker container as a full-featured development environment with VS Code.
Prerequisites
- Install the Dev Containers Extension in VS Code.
- Docker must be installed and running on your host machine.
Available Containers
We provide two Dev Container configurations:
- Ubuntu: Full-featured development environment with all dependencies installed
- Alpine: Lightweight alternative with minimal dependencies
Steps
- Open a local VS Code window on the cloned repository.
- Open the command palette (
Ctrl+Shift+PorCmd+Shift+Pon macOS) and select "Dev Containers: Reopen in Container". - Choose either Ubuntu or Alpine configuration when prompted.
- VS Code will build and connect to the selected container environment.
The container includes all necessary dependencies for building and testing libdatadog.
Docker container
A dockerfile is provided to run tests in a Ubuntu linux environment. This is particularly useful for running and debugging linux-only tests on macOS.
To build the docker image, from the root directory of the libdatadog project run
docker build -f local-linux.Dockerfile -t libdatadog-linux .
To start the docker container, you can run
docker run -it --privileged -v "$(pwd)":/libdatadog -v cargo-cache:/home/user/.cargo libdatadog-linux
This will:
- Start the container in privileged mode to allow the container to run docker-in-docker, which is necessary for some integration tests.
- Mount the current directory (the root of the libdatadog workspace) into the container at
/libdatadog. - Mount a named volume
cargo-cacheto cache the cargo dependencies at ~/.cargo. This is helpful to avoid re-downloading dependencies every time you start the container, but isn't absolutely necessary.
The $CARGO_TARGET_DIR environment variable is set to /libdatadog/docker-linux-target in the container, so cargo will use the target directory in the mounted volume to avoid conflicts with the host's default target directory of libdatadog/target.
Skipping tracing integration tests
Tracing integration tests require docker to be installed and running. If you don't have docker installed or you want to skip these tests, you can run:
cargo nextest run -E '!test(tracing_integration_tests::)'