Development Setup
August 4, 2026 ยท View on GitHub
This document describes the baseline development environment for the VEY workspace.
Rust Toolchain
The workspace requires Rust 1.94.0 or newer. Use the latest stable toolchain unless you have a specific reason not to.
Install rustup
Install rustup from rustup.rs. A non-root installation is recommended.
cargo, rustc, rustup, and related binaries are typically installed into $HOME/.cargo/bin. Make sure that
directory is in your PATH.
Bash
The installer usually adds this line to $HOME/.profile:
source "$HOME/.cargo/env"
Fish
Run:
set -U fish_user_paths $HOME/.cargo/bin $fish_user_paths
Update rustup
rustup self update
Install the stable toolchain and components
List available components:
rustup component list
The project expects these components to be installed:
rustcrust-stdcargorustfmtclippy
llvm-tools is recommended:
rustup component add llvm-tools
Install a nightly toolchain
Nightly is optional for normal builds, but useful for some IDE workflows and tools such as cargo-expand.
rustup toolchain install nightly
rustup component list --toolchain nightly
Update installed toolchains
rustup update
Recommended Cargo Tools
Install a cargo subcommand with:
cargo install --locked <crate-name>
Update an installed subcommand with:
cargo install --locked --force <crate-name>
Recommended tools:
cargo-expand: useful for macro expansion in IDEs and debugging; typically used with nightlycargo-audit: auditsCargo.lockfor known vulnerabilitiescargo-binutils: exposes LLVM utilities installed throughllvm-toolscargo-cache: manages Cargo cachescargo-deny: checks dependency licenses and supply-chain policy
System Dependencies
Core build dependencies
Most builds need:
- a C toolchain such as
gccorclang makepkg-configorpkgconfcapnproto- OpenSSL development headers
Some targets or features also need:
c-ares- Lua development headers if you enable a Lua feature such as
lua54,lua55, orluajit - Python development headers if you enable the default
pythonfeature cmakewhen building vendoredc-ares
Project feature notes
vey-proxy enables these features by default:
pythonc-aresquicrustls-ring
If your platform does not provide all native dependencies, disable the unsupported defaults or use vendored features where appropriate.
Example minimal build without Lua and Python:
cargo build --no-default-features --features rustls-ring,quic,c-ares
Platform Guides
Debian-based Linux
Debian or Ubuntu is the recommended development platform.
apt-get install gcc pkgconf make capnproto
apt-get install curl git jq tar xz-utils
apt-get install libssl-dev libc-ares-dev
# install a Lua dev package that exists on your distro, for example lua5.4 or lua5.5
apt-get install lua5.4-dev
apt-get install libpython3-dev
apt-get install python3-toml python3-requests python3-pycurl python3-semver python3-socks python3-dnspython
apt-get install python3-maxminddb python3-location
apt-get install python3-sphinx python3-sphinx-rtd-theme
apt-get install lsb-release dpkg-dev debhelper
RHEL-based Linux
Some development packages may live in optional repositories. Check the files under /etc/yum.repos.d/ and enable the
required repositories first. See EPEL Quickstart.
# enable EPEL first
dnf install epel-release
dnf update
dnf install gcc pkgconf make capnproto
dnf install curl git jq tar xz
dnf install openssl-devel c-ares-devel lua-devel
dnf install python3-devel
dnf install python3-toml python3-requests python3-pycurl python3-semver
dnf install python3-maxminddb
dnf install python3-sphinx python3-sphinx_rtd_theme
dnf install rpmdevtools rpm-build
Some scripting or test dependencies may not be available in every repository set.
macOS
brew install pkgconf capnp
brew install openssl c-ares
brew install lua
brew install python
The system toolchain from Xcode is also required.
Windows Native
Native Windows builds are possible, but they usually require disabling some default features or using vendored dependencies.
# Rust MSVC toolchain
winget install Rustlang.Rust.MSVC
# Core tools
winget install capnproto.capnproto
# Option 1:
# vendored native libraries
winget install Kitware.CMake NASM.NASM Ninja-build.Ninja
# build without Python and Lua
cargo build --no-default-features --features vendored-openssl,rustls-ring,quic,vendored-c-ares
# Option 2:
# vcpkg-managed libraries
vcpkg install --triplet=x64-windows-static-md openssl c-ares jemalloc
$Env:VCPKG_ROOT = "C:\path\to\vcpkg"
# build without Python and Lua
cargo build --no-default-features --features jemalloc,rustls-ring,quic,c-ares
Tips:
- If
wingetis unavailable, install it from the winget-cli releases. - If you need a standalone
vcpkgcheckout:
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
Then add the installation directory to Path and set VCPKG_ROOT.
Windows MSYS2
pacman -S mingw-w64-ucrt-x86_64-rust
pacman -S mingw-w64-ucrt-x86_64-capnproto
# install tools for vendored build
pacman -S make mingw-w64-ucrt-x86_64-cmake
# build without Python and Lua
export RUSTFLAGS="-C target-feature=+crt-static"
cargo build --no-default-features --features vendored-openssl,rustls-ring,quic,vendored-c-ares
FreeBSD
pkg install rust
pkg install pkgconf capnproto
pkg install c-ares
# install a Lua package available on your release, for example lua54
pkg install lua54
pkg install python3
Tip: use the latest ports packages instead of quarterly packages if you need newer dependencies.
mkdir -p /usr/local/etc/pkg/repos/
echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
pkg update -f
pkg upgrade -y
NetBSD
pkgin install rust
pkgin install pkgconf capnproto
pkgin install libcares
# install a Lua package available on your system, for example lua54 or lua55
pkgin install lua55
# install Python and add a python3 symlink if needed
pkgin install python313
ln -s /usr/pkg/bin/python3.13 /usr/pkg/bin/python3
Tip: pkgsrc binary packages are available at https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/. Update
/usr/pkg/etc/pkgin/repositories.conf if you need a newer package set.
OpenBSD
pkg_add rust
pkg_add capnproto
pkg_add libcares
pkg_add lua
pkg_add python
Tip: if builds fail with an out-of-memory error, increase the datasize-cur limit for the staff login class in
/etc/login.conf.
OmniOS
pkg install rust
pkg install pkg-config
# install capnproto and c-ares from source if packages are unavailable
Dependency Reference
Development libraries
vey-proxy can use:
openssl >= 1.1.1
c-ares >= 1.18.0
lua >= 5.4 or LuaJIT
python3 >= 3.8
Lua support is disabled unless you explicitly enable a Lua feature such as lua54, lua55, or luajit.
Development tools
Required for C or mixed-language builds:
gcc or clang
pkg-config / pkgconf
Also required when the system c-ares is too old and you need a vendored build:
cmake
RPC code generation
The workspace uses Cap'n Proto RPC to communicate with running daemon processes:
capnproto
Test tools
Some test scripts require:
curl
Script tools
Scripts under scripts/ commonly use:
git
jq
tar
xz
Python libraries for scripts
Some helper scripts require these Python packages:
toml
requests
semver
PySocks
dnspython
maxminddb
Documentation tools
The documentation toolchain uses Sphinx and sphinx-rtd-theme.
Packaging tools
For Debian-based packaging:
lsb-release
dpkg-dev
debhelper
For RHEL-based packaging:
rpmdevtools
rpm-build