Building from source
This page covers building all three components of VideoNode from source: the Go daemon, the React UI, and the native C++ binaries (videonode-source, videonode-sink, videonode-composer).
Prerequisites
Install the following before building:
- Go 1.25 or later
- Node.js 22.15 or later, pnpm 10
- CMake 3.25 or later for a bare configure (the presets used below require 3.30), Ninja, a C++20-capable compiler (GCC 10+ or Clang 10+)
Building the Go daemon
To produce the videonode binary in the repo root:
go build -o videonode .To verify the build and run tests:
go test ./...
golangci-lint run ./...Integration tests need real hardware and longer timeouts, so they are gated behind a build tag and excluded from the default run:
go test -tags=integration ./...Building the UI
To compile the React frontend into ui/dist/ (embedded into the daemon at build time):
cd ui && pnpm install && pnpm buildTo check types and lint without building:
cd ui && pnpm typecheck
cd ui && pnpm lintBuilding the native binaries
Use the relwithdebinfo preset for daily installs: it produces optimized binaries with readable stack traces. The dev preset (Debug, unoptimized) is only necessary when stepping through code with a debugger.
To configure, build, and install to ~/.local/bin/:
cmake --preset relwithdebinfo
cmake --build --preset relwithdebinfo
cmake --install composer/build/relwithdebinfoThe Go daemon looks for videonode-source, videonode-sink, and videonode-composer in ~/.local/bin/ by default. The install step is required for the daemon to pick up your changes.
To run tests and linters against the dev preset:
cmake --preset dev
cmake --build --preset dev
ctest --preset dev --output-on-failure
cmake --build build/dev --target lint