Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Install

See the root README for what to run: the shell installer below, cargo binstall prikk, a direct download from the release page, or cargo install prikk from crates.io. This page covers what comes after — the steps a new user usually gets stuck on.

The shell installer

curl -fsSL https://github.com/prikk-vcs/prikk/releases/latest/download/install.sh | sh

What it does, exactly: detects your OS and CPU architecture (uname -s/uname -m); downloads that platform’s release archive and its .sha256 file from the same release page URLs the manual path uses; verifies the checksum with sha256sum -c (or shasum -a 256 -c on macOS, which has no sha256sum by default) and installs nothing if verification fails; extracts the prikk binary to ~/.local/bin (chmod +x); and, if that directory is not already on PATH, appends one clearly marked block to your shell’s startup file so a later uninstall can find and remove exactly that block, and nothing else.

Generated, not hand-maintained. install.sh/uninstall.sh are produced by prikk-release-policy generate-installer and attached as release assets at publish time, the same way the tarballs and their checksums are — never committed to the repository as tracked files. Their source template lives in tools/release-policy/templates/, reviewed like any other change to this project.

What it claims, and what it does not. A passing checksum proves the file you received matches what the release page published; it does not prove who published it. release-signers.toml is still empty and fail-closed, so no Prikk release — including its prebuilt binaries and this script itself — currently satisfies the DC-35 signer-authority audit. The script prints this same caveat when it finishes, rather than only stating it here.

Supported today: Linux (x86_64, aarch64) and macOS (Apple Silicon only — there is no prebuilt binary for Intel Macs). Not yet supported: Windows — the script detects it and refuses with a pointer to the manual .zip download or cargo install prikk, rather than silently doing nothing or guessing. A PowerShell equivalent is a separate, later increment.

Version selection: defaults to the latest release. Pin one with sh install.sh --version X.Y.Z or PRIKK_INSTALL_VERSION=X.Y.Z — the form a CI pipeline typically wants, so a workflow does not silently pick up a new release mid-pipeline. Override the install directory with --prefix DIR or PRIKK_INSTALL_DIR.

Read it before you run it, if you prefer: curl -fsSL <url> -o install.sh, open it in an editor, then sh install.sh. It is a single self-contained file — nothing it does is hidden behind a second download.

Re-running is safe. It overwrites the binary with the same (or a newly pinned) version and does not duplicate the marked PATH block if one already exists.

Uninstalling:

curl -fsSL https://github.com/prikk-vcs/prikk/releases/latest/download/uninstall.sh | sh

Removes the binary from its install directory and the marked PATH block from whichever shell startup file has it, and nothing else — an unrelated file in the same directory, or unrelated lines in the same startup file, are left untouched. If you installed with a custom PRIKK_INSTALL_DIR, pass the same value to the uninstaller too, the same way: PRIKK_INSTALL_DIR=/custom/path curl .... Neither script touches any repository’s own .prikk directory — delete those yourself if you no longer want that history tracked.

One real caveat about the PATH edit: macOS Terminal starts a login shell, which reads ~/.bash_profile, not ~/.bashrc, unless your own ~/.bash_profile already sources it. The installer still writes to ~/.bashrc (or ~/.zshrc for zsh) — the file an interactive non-login shell reads on Linux, and the common case this script optimizes for — and says so when it runs; if your ~/.bash_profile does not source ~/.bashrc, add the PATH line manually, or add . ~/.bashrc to ~/.bash_profile yourself.

Verify the checksum

Every downloaded release archive ships beside a .sha256 file recording its SHA-256 digest — for example, prikk-x86_64-unknown-linux-gnu.tar.gz ships beside prikk-x86_64-unknown-linux-gnu.tar.gz.sha256. Download both into the same directory, then verify from inside it, substituting the archive name for your platform.

Linux:

sha256sum -c prikk-x86_64-unknown-linux-gnu.tar.gz.sha256

macOS (no sha256sum by default; shasum reads the identical file format):

shasum -a 256 -c prikk-aarch64-apple-darwin.tar.gz.sha256

Both print <archive name>: OK on success and exit non-zero on a mismatch.

Windows (PowerShell):

$expected = (Get-Content prikk-x86_64-pc-windows-msvc.zip.sha256).Split(' ')[0]
$actual = (Get-FileHash prikk-x86_64-pc-windows-msvc.zip -Algorithm SHA256).Hash.ToLower()
$expected -eq $actual

This should print True. Unverified on a Windows machine — this command was derived from how the release build produces the checksum file (a lowercase hex digest, matching sha256sum’s own format), not confirmed by running it.

A passing checksum proves the download matches what was published; it does not prove who published it — see Release, Versioning, and Compatibility.

Build from source

Prebuilt archives cover four targets: x86_64 and aarch64 Linux, aarch64 macOS, and x86_64 Windows. Anywhere else, build it yourself — there is no separate porting step:

cargo install prikk            # from crates.io, and puts it on PATH for you

or from a clone, which is also what you want when working on Prikk itself:

git clone https://github.com/prikk-vcs/prikk
cd prikk
cargo build -p prikk --release --locked   # binary at target/release/prikk

Other Linux architectures

Fully supported. Nothing in Prikk is gated on CPU architecture — only on the operating system — so any architecture Rust targets on Linux builds and runs with no reduction in capability.

FreeBSD, OpenBSD, and other platforms

They build, but they are read-only. Prikk compiles for FreeBSD, and nothing in it is OpenBSD-specific, so the same applies there — but repository mutation is refused at runtime on any platform other than Linux, macOS, and Windows:

repository mutation requires Linux, macOS, or Windows root-scoped filesystem capabilities

So init, commit, and seal will not work. Reading an existing repository does — verify, log, status, doctor, and the other read-only commands.

This is a review boundary rather than a technical one. FreeBSD has the filesystem primitives Prikk’s POSIX path uses; what it does not have is a durability implementation anyone has reviewed, or CI that exercises one. Prikk refuses rather than writing history through a path nobody has audited. Support is recorded as a future theme and is not scheduled. Platform Support states what each supported platform guarantees, including two narrower guarantees on Windows.

Put the binary on PATH

cargo binstall/cargo install place the binary in Cargo’s own bin directory (~/.cargo/bin on Linux/macOS), which is normally already on PATH once Rust is installed.

For a direct download, move the extracted prikk (or prikk.exe on Windows) into a directory already on your PATH~/.local/bin is a common choice on Linux/macOS if it’s already there — or add the directory you placed it in to PATH yourself.

Confirm it worked

prikk --version

prints the version you installed, in the form:

prikk <version>

Check that <version> matches the release you downloaded — that match is the actual verification, not any particular number this page could show.

If the shell reports “command not found” instead, the binary is not on PATH yet.

Next: Tutorial

Installing the binary configures no signing keys. Continue with the Tutorial — it walks through your first commit and seal, key setup included, using disposable public example keys. Security and Signing Setup covers real key handling once you are past that.

Uninstalling

Prikk places nothing outside its own binary and, inside each repository it manages, a .prikk directory. Delete the binary, and remove .prikk from any repository whose history you no longer want tracked — there is nothing else to clean up.