Install
Two ways in: take the prebuilt binary, or build from the source tree. Either way you end up with one file called anvil on PATH. Nothing writes to system directories and nothing needs root.
Prebuilt binary
The build is a static ELF/Mach-O with no shared-library surprises. Fetch it, make it executable, move it somewhere on PATH:
curl -O https://byteanvil.info/anvil chmod +x anvil sudo mv anvil /usr/local/bin/anvil anvil --version # prints: anvil 2.4.1 (store format 4)
If anvil --version prints anything other than the line above, you have an old binary on PATH ahead of the new one - check which -a anvil.
From source
The tree builds with a C11 compiler and make. There is deliberately no dependency on any third-party library; if a configure step asks you for one, you are not looking at this tree.
make # builds ./anvil make check # runs the store round-trip tests make PREFIX=~/.local install
Environment
Three variables are read by every command. Flags still win over them - see the precedence rules.
| Variable | What it sets |
|---|---|
ANVIL_REGISTRY | Registry address, e.g. https://registry.internal:8711. Overridden by --registry. |
ANVIL_TOKEN | Access token for a remote registry. Keep it out of any repo .anvil.toml; the client refuses to read a token from a repo file. |
ANVIL_CHANNEL | Default channel when a command omits --channel. |
First push
Start a store and put one thing in it. The registry listens on 8711 by convention; change it with --listen if that port is taken.
anvil serve --store /srv/artifacts --listen :8711 & anvil --registry http://localhost:8711 push demo.app@0.1.0 ./a.out --channel dev anvil --registry http://localhost:8711 ls demo.app
A fresh store writes format 4 immediately. Pointing a 2.4.x binary at an older store triggers an upgrade prompt - read store migration before you say yes on anything you cannot re-push.