---
title: Standalone binary
description: >-
  Install reeval as one executable, with no Node or npm, from its GitHub
  release.
---
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reeval.ai/llms.txt
> Use this file to discover all available pages before exploring further.

```bash
curl -fsSL https://raw.githubusercontent.com/invertase/reeval/main/scripts/install.sh | sh
```

```text
reeval install: reeval-0.13.0-linux-x64
######################################################################## 100.0%
reeval install: reeval 0.13.0 at /home/you/.local/bin/reeval
```

The script picks the binary for your OS and CPU from the newest release that has binaries, checks it against the release's `SHA256SUMS`, checks it starts and installs it as `reeval`. It's the same reeval as the npm package, compiled with the Bun runtime inside, so it needs no Node. You still need `git`, and [Docker](https://docs.docker.com/get-docker/) for real runs.

On Linux and Windows, an x64 CPU without AVX2 gets the `-baseline` build, which runs on any x64 CPU. There is no macOS baseline build, so an Intel Mac needs AVX2 (Haswell, from 2013, or later).

## Windows

```powershell
irm https://raw.githubusercontent.com/invertase/reeval/main/scripts/install.ps1 | iex
```

It installs `reeval.exe` in `%LOCALAPPDATA%\reeval\bin` and adds that folder to your user `PATH`; open a new terminal to use it. The Windows builds are for x64.

## Options

Both scripts read the same environment variables:

| Variable | Default | What it does |
|---|---|---|
| `REEVAL_VERSION` | the newest release with binaries | The version to install, such as `0.13.0` |
| `REEVAL_INSTALL_DIR` | `~/.local/bin`, or `%LOCALAPPDATA%\reeval\bin` on Windows | Where `reeval` goes |
| `REEVAL_DOWNLOAD` | the version's GitHub release | A URL (or `file://` directory) holding the binaries and `SHA256SUMS`; needs `REEVAL_VERSION` |
| `GITHUB_TOKEN` | none | Sent to the GitHub API when looking up the newest release, which allows 60 requests an hour per IP address without it. A token the API refuses is dropped |

```bash
curl -fsSL https://raw.githubusercontent.com/invertase/reeval/main/scripts/install.sh \
  | sudo env REEVAL_VERSION=0.13.0 REEVAL_INSTALL_DIR=/usr/local/bin sh
```

## Downloading by hand

Each [release](https://github.com/invertase/reeval/releases) has one binary per target and a `SHA256SUMS` file:

| Target | File |
|---|---|
| Linux x64, arm64 (glibc) | `reeval-<version>-linux-x64`, `reeval-<version>-linux-arm64` |
| Linux x64, arm64 (musl: Alpine) | `reeval-<version>-linux-x64-musl`, `reeval-<version>-linux-arm64-musl` |
| macOS Apple silicon, Intel | `reeval-<version>-darwin-arm64`, `reeval-<version>-darwin-x64` |
| Windows x64 | `reeval-<version>-windows-x64.exe` |
| x64 without AVX2 | `reeval-<version>-linux-x64-baseline`, `reeval-<version>-linux-x64-musl-baseline`, `reeval-<version>-windows-x64-baseline.exe` |

```bash
sha256sum --check --ignore-missing SHA256SUMS
chmod +x reeval-0.13.0-darwin-arm64
mv reeval-0.13.0-darwin-arm64 ~/.local/bin/reeval
```

On macOS, use `shasum -a 256 --check --ignore-missing SHA256SUMS`.

<Warning>
The binaries aren't signed. macOS blocks a file a browser downloaded until you remove its quarantine flag with `xattr -d com.apple.quarantine reeval`, and Windows SmartScreen may warn on first run. The install scripts download with `curl` and PowerShell, which set neither.
</Warning>

## Evals with the binary

Eval files import `{{ pkg }}` as usual, and the binary answers those imports itself, so a project needs no `node_modules` to plan or run. Your editor and `tsc` still need the types, which `npm install -D {{ pkg }}` gives them.

```bash
reeval init         # a project, as in the Quickstart
reeval image build  # the agent's sandbox image
reeval run
```

## Python evals

```bash
uv init --bare             # a pyproject.toml
uv add --dev reeval-python # the Python SDK, with its own `reeval` command
uv run reeval run          # runs evals/**/*.eval.py
```

```yaml title="reeval.yml"
include: ['evals/**/*.eval.py']
harness: { kind: cursor, model: composer-2.5 }
```

A Python project needs no install script. `reeval-python` has a `reeval` command that runs the binary made for its version, so `uv.lock` pins both. The first time it runs, it downloads that binary from the GitHub release (the baseline build on an x64 CPU without AVX2, as the install scripts pick), checks it against the sha256 that reeval-python was released with, checks it starts and caches it in `<cache>/reeval/bin/<version>/`; later runs start from the cache, offline too. A Python project configures reeval with [`reeval.yml`](/reference/config#reevalyaml).

<Info>
The cache keeps every version it downloads (about 85 MB each) until you delete `<cache>/reeval/bin/<version>/`. Windows on ARM runs the x64 binary.
</Info>

| Variable | What it does |
|---|---|
| `REEVAL_BINARY` | A reeval binary to run instead |
| `REEVAL_OFFLINE` | `1` never downloads: the binary must already be in the cache, from an earlier run or put at `<cache>/reeval/bin/<version>/reeval-<version>-<target>` by hand |
| `REEVAL_VERSION` | Another version than reeval-python's, downloaded and checked against `SHA256SUMS` only |
| `REEVAL_DOWNLOAD` | A mirror of the releases, as for the install scripts |

The binary runs each `*.eval.py` with the `reeval_python` module from your project's Python. The `reeval` command picks the active virtual environment's, else the nearest `.venv` above the working directory, else its own; so a `reeval` from `uv tool install` or `pipx` still runs your project's dependencies. Run without it, the binary uses `uv run` (with a `pyproject.toml` and uv on your `PATH`), `.venv`'s Python, or `python3` (`python` on Windows). `REEVAL_PYTHON` names another interpreter.

```text
reeval: evals/greet.eval.py: The language runner (uv run --project … python -m
reeval_python) stopped before it said hello: it exited (code 1):
…/.venv/bin/python: No module named reeval_python
reeval runs *.eval.py with the reeval_python module from the project's Python: …
```

A project without reeval-python, or with one that speaks another runner protocol, stops with exit 2 and says so, as above.

## Next

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Scaffold a project and run your first eval.
  </Card>
  <Card title="CLI" icon="terminal" href="/reference/cli">
    Every command and flag.
  </Card>
</CardGroup>
