Xrepo CLI
xrepo is xmake's standalone C/C++ package manager. It shares the xmake runtime but is a full package tool on its own — use it outside of any project to install, query, or enter an environment with C/C++ libraries and tools.
xrepomanages global repositories and installed packages.xmake repois a project-local variant. If you want the change to apply everywhere on your machine, usexrepo.
Packages come from the official xmake-repo by default, plus any private repos you register, plus bridges to vcpkg/brew/conan/pacman/apt etc.
Installing packages
xrepo install zlib tbox
xrepo install "zlib 1.2.x" # semver range — QUOTE the spec
xrepo install "zlib >=1.2.0"
Mode / kind
xrepo install -m debug zlib # debug build
xrepo install -m release zlib
xrepo install -k shared zlib # dynamic library
xrepo install -k static zlib
Platform / arch
xrepo install -p iphoneos -a arm64 zlib
xrepo install -p android -a arm64-v8a --ndk=~/android-ndk-r26 zlib
xrepo install -p mingw --mingw=/opt/llvm-mingw zlib
xrepo install -p cross --sdk=/opt/arm-linux-musleabi-cross zlib
xrepo install -p wasm --toolchain=emcc zlib
Package configs
Pass recipe options via -f:
xrepo install -f "runtimes='MD'" zlib
xrepo install -f "regex=true,thread=true" boost
xrepo install -f "shared=true,pic=true" openssl
From third-party package managers
xrepo can install through other package managers and still hand you xmake-style link info:
xrepo install brew::zlib
xrepo install vcpkg::zlib
xrepo install conan::zlib/1.2.11
xrepo install pacman::zlib
xrepo install apt::zlib1g-dev
Force / clean
xrepo install --force zlib # rebuild even if cached
xrepo remove zlib # uninstall
xrepo clean # clean caches
xrepo clean --all
Searching and inspecting
xrepo search zlib "pcr*"
xrepo info zlib
xrepo info shows description, versions, upstream URLs, hashes, supported platforms, and available configs — use it to discover which -f "..." options a package accepts before installing.
The dependency graph of a package, as a tree or as json:
xrepo info --depgraph libpng
xrepo info --depgraph --format=json libpng
Getting link / cflags info (xrepo fetch)
fetch resolves an installed package and prints the info you would otherwise get through add_packages. Great for dropping xrepo packages into a non-xmake build.
xrepo fetch pcre2 # Lua table (linkdirs/links/defines/includedirs)
xrepo fetch --cflags openssl
xrepo fetch --ldflags openssl
xrepo fetch --cflags --ldflags conan::zlib/1.2.11
xrepo fetch -p iphoneos --cflags "zlib 1.2.x"
Pipe into a Makefile / CMake toolchain:
CFLAGS="$(xrepo fetch --cflags openssl)"
LDFLAGS="$(xrepo fetch --ldflags openssl)"
Downloading source only
xrepo download zlib
xrepo download "zlib 2.x"
xrepo download -o /tmp zlib # output directory
Does not build or install — just fetches and extracts the upstream source.
Exporting an installed package
Copy an installed package (headers, libs, cmake files, …) into a standalone directory so you can ship it or hand it to another toolchain:
xrepo export -o /tmp/output zlib
xrepo export -o /tmp/output -p android -a arm64-v8a "zlib 1.2.x"
Importing and scanning
export and import are a pair: export an installed package on a machine with network
access, import it where there is none.
xrepo export -o /tmp/output zlib
xrepo import -i /tmp/output # install the exported packages here
scan re-registers the packages already present in the install directory, e.g. after you
copied them in by hand or restored a cache:
xrepo scan # all installed packages
xrepo scan zlib
Repository management
xrepo add-repo myrepo https://github.com/mygroup/myrepo
xrepo add-repo myrepo https://github.com/mygroup/myrepo dev # branch
xrepo rm-repo myrepo
xrepo list-repo
xrepo update-repo # pull the latest recipes
Private, air-gapped setups typically: add-repo an internal mirror, then install everything from there.
Package virtual environments
xrepo env drops you into a shell (or runs a single command) with selected packages on PATH / LD_LIBRARY_PATH / PKG_CONFIG_PATH. This is a sizable topic on its own — see the xrepo-env skill for ad-hoc, project-local (./xmake.lua), and named environments, plus CI usage and --show debugging.
Quick reference
| Command | Purpose |
|---|---|
xrepo install <pkg> |
install a package |
xrepo remove <pkg> |
uninstall |
xrepo update <pkg> |
update to newer version |
xrepo search <pattern> |
search available recipes |
xrepo info <pkg> |
show recipe metadata + configs |
xrepo fetch [--cflags/--ldflags] <pkg> |
print link/compile info |
xrepo export -o <dir> <pkg> |
export installed package |
xrepo download [-o dir] <pkg> |
fetch source only |
xrepo add-repo / rm-repo / list-repo / update-repo |
global repo management |
xrepo env ... |
virtual environments — see xrepo-env skill |
xrepo clean [--all] |
clean caches |
Common flags
-m debug|release— build mode-k static|shared— library kind-p <plat>/-a <arch>— target platform / arch-f "k=v,k=v"— recipe configs (per package)--runtimes=MD|MT|MDd|MTd— MSVC runtime--ndk=,--sdk=,--mingw=,--vs=— toolchain roots--toolchain=<name>— force a specific toolchain-v/-vD— verbose / diagnosis
Pitfalls
- Unquoted version strings.
xrepo install zlib 1.2.xparses1.2.xas a second package name. Always quote:"zlib 1.2.x". xrepovsxmake repo.xrepois global;xmake repois for project-local repos inside anxmake.lua. They are not interchangeable.- Forgetting to update repos. If a recipe was added upstream after your last sync,
xrepo update-repobeforeinstall. - Exported/fetched paths are absolute.
xrepo fetch --cflagsprints paths into~/.xmake/packages/...— fine for local builds, not portable across machines. Usexrepo exportto get a self-contained directory.
When to branch out
- Virtual environments (
xrepo env) →xrepo-env - Using packages from inside an
xmake.luaproject →xmake-packages - Writing / testing a package recipe →
xmake-repo-testing - Cross-toolchain setup used by
-p/-a→xmake-toolchains