Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/BestProjectTeam/BestClient/llms.txt

Use this file to discover all available pages before exploring further.

Building BestClient 1.9.1 beta from source gives you full control over the compiled output — enabling custom flags, headless builds, and local patches. The project is a C++20/Rust/Python codebase driven by CMake and assembled with Ninja, so you will need a matching toolchain before invoking any build commands. This page walks through every required and optional tool, with platform-specific install instructions, so you can reach a clean CMake configure step on Linux, Windows, or macOS.

Required Tools

ToolMinimum VersionNotes
CMake3.12cmake_minimum_required(VERSION 3.12...3.27.4) in CMakeLists.txt
NinjaAny recentRequired by all documented build commands (-G Ninja)
C++ compilerC++20 capableGCC / Clang on Linux & macOS; MSVC on Windows
Rust & CargoStableWorkspace members in src/base, src/engine, src/engine/shared, src/rust-bridge/test
Python 3Any recent 3.xUsed by code-generation scripts; CMake will error if absent
GitAny with submodule supportNeeded to clone and initialize vendored submodules
CMake enforces all of the above at configure time. If Python 3, Rust/Cargo, or several system libraries (libcurl, libpng, SQLite3) are missing, the configure step will emit a fatal error and stop immediately.

Platform Installation

The CI pipeline targets Ubuntu 22.04 with the following packages. Adjust package names for your distro (Arch, Fedora, etc.) as needed.
sudo apt-get update && sudo apt-get install -y \
  git cmake ninja-build \
  clang rustc cargo \
  pkg-config \
  libfreetype6-dev libnotify-dev libsdl2-dev \
  libsqlite3-dev libvulkan-dev glslang-tools spirv-tools \
  libavcodec-dev libavformat-dev libavutil-dev \
  libswresample-dev libswscale-dev libx264-dev \
  libpng-dev \
  libcurl4-openssl-dev libcurlpp-dev \
  libogg-dev libopus-dev libopusfile-dev \
  python3
Verify your toolchain after installing:
cmake --version      # should report 3.12 or newer
ninja --version
rustc --version
python3 --version

Git Submodules

BestClient ships vendored third-party libraries as Git submodules under ddnet-libs/. These must be initialized before CMake can locate bundled headers and link libraries. Run the following command once after cloning, and again any time you pull commits that update submodule references:
git submodule update --init --recursive
Skipping submodule initialization will cause the CMake configure step to fail immediately — bundled library paths referenced in CMakeLists.txt will not exist on disk. Always run git submodule update --init --recursive before your first build and after any rebase or merge that touches .gitmodules.

Optional: Nix Flake Environment

A flake.nix is included in the repository root. If you have Nix with flakes enabled, you can drop into a fully-provisioned development shell without touching your system packages:
nix develop
This shell provides all runtime libraries needed to run BestClient (SDL2, freetype, libGL, curl, openssl, vulkan-loader, libnotify) via autoPatchelfHook and makeWrapper. It is primarily oriented toward running pre-built binaries, but can serve as a convenient dependency sandbox during development on NixOS or systems with Nix installed.

Build docs developers (and LLMs) love