Skip to content

Building from Source

VirtEngine is developed against Go 1.26.8 (go.mod:3, and GO_VERSION in .github/workflows/ci.yaml). The build is Makefile-driven and produces a single binary, virtengine, containing the full node and client functionality.

RequirementNotes
Go 1.26.8With GOPATH set and $GOPATH/bin in $PATH
C/C++ compilergcc or clang — required for C dependencies (libusb, libhid)
GNU make 4+macOS ships an ancient make; install via Homebrew (keg-only — prepend its gnubin to PATH)
direnvRequired on non-Windows: make/init.mk fails without it unless VE_DIRENV_SET is exported (see .envrc)
PlatformArchStatus
Darwinamd64 / arm64Supported
Linuxamd64 / arm64Supported
Linuxarmhf (GOARM 5,6,7)Not supported
Windowsamd64Experimental
  1. Install dependencies.

    Terminal window
    # macOS
    brew install curl wget jq direnv coreutils make npm
    export PATH="$(brew --prefix)/opt/make/libexec/gnubin:$PATH"
    # Debian-based Linux
    sudo apt update
    sudo apt install -y jq curl wget unzip build-essential libudev-dev ca-certificates npm direnv gcc
  2. Clone and build.

    Terminal window
    git clone https://github.com/virtengine/virtengine
    cd virtengine
    make virtengine

    The compiled executable is written to .cache/bin. Inside the repository environment it takes precedence over any system-wide virtengine.

The build creates a .cache directory at the source root for pinned versions of temporary build tools (protoc and friends), installed only when a target needs them:

.cache/
bin/ # build tools
run/ # work directories for _run examples
versions/ # version markers used to detect tool upgrades

Set VE_DEVCACHE to relocate it. Tool versions and install rules live in make/init.mk and make/setup-cache.mk.

There is no release-based install path today. This repository has no published releases — the only release record is 0.1.0, a draft from 2021 — so neither route below can resolve an artifact:

  • virtengine/homebrew-tap does not exist (GitHub returns 404), so brew tap virtengine/tap fails.
  • install.sh on main declares OWNER="virtengine-network" and REPO="node" (install.sh:351-352); that repository does not resolve, so the one-liner cannot download anything built from this repository.

Until releases exist, build from source with make virtengine (above). For network posture, see Network Launch Schedule.