Install snapdir for C/C++

The C/C++ binding is a header-only RAII wrapper (snapdir.hpp) over the snapdir C ABI. It gives you the full snapdir core — the same BLAKE3 walk, manifests, and 64-character snapshot IDs as the CLI — built from source against the snapdir-ffi crate. There is no C++ package registry, so you compile the C ABI once and link your program against it.

Install

The published artifact is the snapdir-ffi source crate on crates.io. Build the static library, generate the C header with cbindgen, then compile your program against it with snapdir.hpp:

# needs a Rust toolchain + cbindgen (apk add rust cargo cbindgen on Alpine)
# fetch the snapdir-ffi source (e.g. `cargo fetch`/vendor), then:
cargo build --release                       # -> target/release/libsnapdir_ffi.a
cbindgen --config cbindgen.toml --crate snapdir-ffi --output snapdir.h .
g++ -std=c++20 app.cpp -I. -L. -lsnapdir_ffi -lpthread -ldl -lm -o app

You need a C17 compiler (C20 tested — the header uses std::optional, std::filesystem, and std::future), a Rust toolchain, and cbindgen. Drop snapdir.hpp next to snapdir.h and include it. This exact flow is CI-verified from crates.io on a blank-slate alpine:3.20 (musl) image before every release.

Platform support

Every binding runs on Linux (glibc and Alpine/musl, x64 and arm64) and macOS; Windows is unsupported, since snapdir is Unix-only.

Platform Supported
Linux glibc (x64 + arm64) yes
Linux musl / Alpine (x64 + arm64) yes
macOS yes
Windows no

The one binding-wide exception is Java, which is glibc-only today (musl support is planned for 1.11.1). The C/C++ binding has no such caveat — it builds and links on glibc and musl alike.

Next