This SDK uses several tools and checks to enforce code quality. All of these are also enforced in CI on PRs.
clang-tidy— static analysis. See .clang-tidy for the enabled checks. Enforced in CI on PR.clang-format— code formatting and style consistency. See .clang-format for the rules. Enforced in CI on PR.
Note (Windows):
clang-tidyis not currently driven by our scripts on Windows. The MSBuild CMake generator doesn't emitcompile_commands.json, whichclang-tidyrequires. The Ninja generator does, so manual invocation is possible.clang-formatsimilarly needs to be installed and run manually on Windows, pointing at the root.clang-format.
macOS:
brew install llvmThis installs clang-format, clang-tidy, and run-clang-tidy. Homebrew may
ask you to add /opt/homebrew/opt/llvm/bin (Apple Silicon) or
/usr/local/opt/llvm/bin (Intel) to your PATH.
Linux (Ubuntu/Debian):
sudo apt-get install clang-format clang-tidy clang-tools-
Generate
compile_commands.jsonand the protobuf headers via a release build:./build.sh release
-
Run the wrapper, which uses the same file set, regex filters, and
.clang-tidyconfig as CI:./scripts/clang-tidy.sh
The wrapper forwards extra arguments to run-clang-tidy:
./scripts/clang-tidy.sh -j 4 # Number of cores
./scripts/clang-tidy.sh -checks='-*,misc-const-correctness' # Only specific checks
./scripts/clang-tidy.sh -fix # Apply fixesOutput is captured to clang-tidy.log at the repo root, since the terminal
buffer often can't hold all of it.
./scripts/clang-format.shWith no arguments, runs against every relevant file in the repository against
the rules in .clang-format.
./scripts/clang-format.sh --fix # Rewrite files in place
./scripts/clang-format.sh src/room.cpp include/livekit/room.h # Check just these files
./scripts/clang-format.sh --fix src/room.cpp # Fix just this fileOutput is captured to clang-format.log at the repo root.
A simple pre-commit hook that auto-formats staged C/C++ files using the
project's .clang-format rules:
./scripts/install-pre-commit.shThis installs .git/hooks/pre-commit. Re-run after git clone on a fresh
checkout.
Run valgrind against the integration or stress test binaries to check for
memory leaks and other issues:
valgrind --leak-check=full ./build-debug/bin/livekit_integration_tests
valgrind --leak-check=full ./build-debug/bin/livekit_stress_testsvalgrind is Linux-only. On macOS, use leaks or Instruments instead.
API reference is generated from headers using Doxygen. To rebuild locally:
./scripts/generate-docs.shOutput lands under docs/doxygen/html/. The deployed reference is at
docs.livekit.io/reference/client-sdk-cpp/.
To view the generated documentation locally, open docs/doxygen/html/index.html in your browser.
For details on the Doxygen configuration and CI pipeline, see the doxygen/ folder.
cd client-sdk-cpp
git fetch origin
git switch -c try-rust-main origin/main
# Sync submodule URLs and check out what origin/main pins (recursively):
git submodule sync --recursive
git submodule update --init --recursive --checkout
# If the nested submodule under yuv-sys didn't materialize, force it:
git -C client-sdk-rust/yuv-sys submodule sync --recursive
git -C client-sdk-rust/yuv-sys submodule update --init --recursive --checkout
# Sanity check:
git submodule status --recursivecargo clean -p yuv-sys
cargo build -p yuv-sys -vvTo delete all build artifacts from both Rust and C++ folders, plus the local-install folder:
./build.sh clean-all