Datadog shared rust-based library. For now only used in other products (e.g. Ruby or PHP libraries).
69
stars
2,072
commits
Rust
primary language
Sep 10, 2026
updated
libdatadog|
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. |
|
See CONTRIBUTING.md.
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
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
rust-toolchain.toml at the workspace root and rustup installs it automatically. See the comment near rust-version in Cargo.toml for the constraints to check when bumping this version.cbindgen 0.29cmake and protocThis project uses cargo-nextest to run tests.
cargo nextest run
The simplest way to install cargo-nextest is to use cargo install like this.
cargo install --locked 'cargo-nextest@0.9.96'
Dev Containers allow you to use a Docker container as a full-featured development environment with VS Code.
We provide two Dev Container configurations:
Ctrl+Shift+P or Cmd+Shift+P on macOS) and select "Dev Containers: Reopen in Container".The container includes all necessary dependencies for building and testing libdatadog.
The Nix flake provides a reproducible, pinned shell with Rust, cbindgen, and native build tools.
This works natively under both Linux and Darwin.
This one-liner installs Nix isolated in /nix:
curl --proto '=https' --tlsv1.2 --location https://nixos.org/nix/install | sh -s -- --daemon
Enable the modern CLI and flakes in /etc/nix/nix.conf:
echo "experimental-features = nix-command flakes" | sudo tee -a /etc/nix/nix.conf
See the Nix manual for more information.
Spawn a shell with an environment set up to expose the tooling:
nix develop
Note: legacy nix-shell and nix-build are also available via the flake-compat shims.
Alternatively, run individual commands:
nix develop --command cargo build --workspace --exclude builder
nix develop .#nightly --command cargo fmt --all -- --check
nix develop --command cargo build --workspace --exclude builder.rust-toolchain.toml or nightly-toolchain.toml, then refresh flake.lock with nix flake update.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:
/libdatadog.cargo-cache to 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.
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::)'
(top 30 of 93)
Rust
97.0%
C
1.8%
Datadog shared rust-based library. For now only used in other products (e.g. Ruby or PHP libraries).
69
stars
2,072
commits
Rust
primary language
Sep 10, 2026
updated
libdatadog|
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. |
|
See CONTRIBUTING.md.
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
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
rust-toolchain.toml at the workspace root and rustup installs it automatically. See the comment near rust-version in Cargo.toml for the constraints to check when bumping this version.cbindgen 0.29cmake and protocThis project uses cargo-nextest to run tests.
cargo nextest run
The simplest way to install cargo-nextest is to use cargo install like this.
cargo install --locked 'cargo-nextest@0.9.96'
Dev Containers allow you to use a Docker container as a full-featured development environment with VS Code.
We provide two Dev Container configurations:
Ctrl+Shift+P or Cmd+Shift+P on macOS) and select "Dev Containers: Reopen in Container".The container includes all necessary dependencies for building and testing libdatadog.
The Nix flake provides a reproducible, pinned shell with Rust, cbindgen, and native build tools.
This works natively under both Linux and Darwin.
This one-liner installs Nix isolated in /nix:
curl --proto '=https' --tlsv1.2 --location https://nixos.org/nix/install | sh -s -- --daemon
Enable the modern CLI and flakes in /etc/nix/nix.conf:
echo "experimental-features = nix-command flakes" | sudo tee -a /etc/nix/nix.conf
See the Nix manual for more information.
Spawn a shell with an environment set up to expose the tooling:
nix develop
Note: legacy nix-shell and nix-build are also available via the flake-compat shims.
Alternatively, run individual commands:
nix develop --command cargo build --workspace --exclude builder
nix develop .#nightly --command cargo fmt --all -- --check
nix develop --command cargo build --workspace --exclude builder.rust-toolchain.toml or nightly-toolchain.toml, then refresh flake.lock with nix flake update.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:
/libdatadog.cargo-cache to 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.
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::)'
(top 30 of 93)
Rust
97.0%
C
1.8%