> ## Documentation Index
> Fetch the complete documentation index at: https://tally.wharflab.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Install tally via Homebrew, mise, WinGet, npm, Bun, uv, pip, RubyGems, Docker, Go, or from source.

tally is a single self-contained binary. Pick the method that fits your environment.

<CodeGroup>
  ```bash Homebrew theme={null}
  brew trust --formula wharflab/tap/tally
  brew install --require-sha wharflab/tap/tally
  ```

  ```bash mise theme={null}
  mise use -g github:wharflab/tally@latest
  ```

  ```powershell WinGet theme={null}
  winget install --id Wharflab.Tally
  ```

  ```bash npm theme={null}
  npm install -g tally-cli
  ```

  ```bash Bun theme={null}
  bun add -g tally-cli
  ```

  ```bash uv theme={null}
  uv tool install tally-cli
  ```

  ```bash pip theme={null}
  pip install tally-cli
  ```

  ```bash RubyGems theme={null}
  gem install tally-cli
  ```

  ```bash Go theme={null}
  go install github.com/wharflab/tally@latest
  ```
</CodeGroup>

## Homebrew (macOS/Linux)

```bash theme={null}
brew trust --formula wharflab/tap/tally
brew install --require-sha wharflab/tap/tally
```

Run `tally register-docker-plugin` if you want Docker to discover the plugin without editing `~/.docker/config.json`.

Homebrew also installs a `docker-lint` symlink under Homebrew's Docker plugin directory. See
[Docker CLI plugin](/integrations/docker-cli-plugin) if you prefer to configure Docker's `cliPluginsExtraDirs`.

## mise

```bash theme={null}
mise use -g github:wharflab/tally@latest
```

This installs the latest tally release from GitHub and exposes the `tally` binary through mise's global tool shims.

Run `tally register-docker-plugin` after installation to register the plugin with Docker.

## WinGet (Windows)

```powershell theme={null}
winget install --id Wharflab.Tally
```

Run `tally register-docker-plugin` after installation to register the plugin with Docker.

## npm

```bash theme={null}
npm install -g tally-cli
```

Use a global npm install for Docker CLI plugin setup. Project-local `node_modules` installs are rejected by `tally register-docker-plugin`.

## Bun

```bash theme={null}
bun add -g tally-cli
```

Use a global Bun install for Docker CLI plugin setup. `bunx` and project-local `node_modules` launches are rejected by
`tally register-docker-plugin`.

## uv

```bash theme={null}
uv tool install tally-cli
```

Use `uv tool install` for Python-managed Docker CLI plugin setup. Active Python virtual environments are rejected by
`tally register-docker-plugin`.

## pip

```bash theme={null}
pip install tally-cli
```

## RubyGems

```bash theme={null}
gem install tally-cli
```

## Docker / Podman

Official images are published to GitHub Container Registry at `ghcr.io/wharflab/tally`. All images are signed with
[cosign](https://github.com/sigstore/cosign) (keyless/OIDC).

<Note>
  The Linux image is distroless, non-root, and shell-free. It contains only the `tally` binary. The Windows image is built on Nano Server.
</Note>

### Image tags

| Tag                                               | Description                                                                               |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| `ghcr.io/wharflab/tally:latest`                   | Multi-platform image index: auto-selects `linux/amd64`, `linux/arm64`, or `windows/amd64` |
| `ghcr.io/wharflab/tally:v<VERSION>`               | Versioned multi-platform image index (e.g., `v1.2.3`)                                     |
| `ghcr.io/wharflab/tally:v<VERSION>-linux-amd64`   | Per-platform tag                                                                          |
| `ghcr.io/wharflab/tally:v<VERSION>-linux-arm64`   | Per-platform tag                                                                          |
| `ghcr.io/wharflab/tally:v<VERSION>-windows-amd64` | Per-platform tag                                                                          |

### Docker (Linux)

```bash theme={null}
# Check the version
docker run --rm ghcr.io/wharflab/tally:latest version

# Lint a Dockerfile in the current directory
docker run --rm -v "$PWD:/work" -w /work ghcr.io/wharflab/tally:latest lint Dockerfile
```

### Podman (Linux)

```bash theme={null}
# Check the version
podman run --rm ghcr.io/wharflab/tally:latest version

# Lint all Dockerfiles recursively (note the :Z label for SELinux)
podman run --rm -v "$PWD:/work:Z" -w /work ghcr.io/wharflab/tally:latest lint .
```

### Docker (Windows containers)

```powershell theme={null}
# Check the version
docker run --rm ghcr.io/wharflab/tally:latest version

# Lint a Dockerfile
docker run --rm -v "${PWD}:C:\work" -w C:\work ghcr.io/wharflab/tally:latest lint Dockerfile
```

### Verify image signatures

All published images are signed with cosign via keyless/OIDC. Verify before use:

```bash theme={null}
cosign verify --certificate-identity-regexp='https://github.com/wharflab/tally' \
  --certificate-oidc-issuer='https://token.actions.githubusercontent.com' \
  ghcr.io/wharflab/tally:latest
```

## Go

Requires Go 1.21 or later.

```bash theme={null}
go install github.com/wharflab/tally@latest
```

## From source

```bash theme={null}
git clone https://github.com/wharflab/tally.git
cd tally
go build .
```

## Verify your installation

After installing, confirm tally is on your `PATH`:

```bash theme={null}
tally --help
tally lint --help
```

To enable the Docker CLI plugin, run the registration command from a global tally install:

```bash theme={null}
tally register-docker-plugin
```

Then verify that Docker can discover it:

```bash theme={null}
docker lint --help
```

Check the installed version:

```bash theme={null}
# Human-readable
tally version

# Machine-readable JSON (includes ShellCheck version)
tally version --json
```

If the command is not found, make sure the install location is in your `PATH` (for Go installs, this is usually `$GOPATH/bin` or `$HOME/go/bin`).

<Tip>
  Run `tally lint .` from your project root to immediately lint every Dockerfile and Containerfile in the repo.
</Tip>
