byteanvil2.4.1Sign in

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.

VariableWhat it sets
ANVIL_REGISTRYRegistry address, e.g. https://registry.internal:8711. Overridden by --registry.
ANVIL_TOKENAccess 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_CHANNELDefault 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.