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

evoke is one small native binary. Reflexes that run a JavaScript file need Node next to it. Nothing else is installed for you.

What you need

ForNeeded
The binarymacOS or Linux; Windows through WSL
Installing reflexes (add, update, sync)git on your PATH; your own git configuration and credentials apply
Reflexes that run a .mts or .mjs fileNode 24 or newer on your PATH when you run evoke add or evoke sync
DecidingA key for the classifier: TYPESAFE_API_KEY for the jev adapter, OPENJEV_API_KEY for openjev

Some reflexes run a program with arguments instead of a JavaScript file. Those are argv reflexes. They need no runtime at all.

The binary

On macOS or Linux, use the script. It fetches the release built for your machine, checks it against the release's SHA256SUMS, and puts evoke in ~/.local/bin. Set EVOKE_INSTALL to choose another directory. Set EVOKE_VERSION to pick a version.

$ curl -fsSL https://evoke.build/install.sh | sh

With mise:

$ mise use --global github:evoke-build/evoke

From source, with a current Rust toolchain:

$ cargo install --locked --git https://github.com/evoke-build/evoke evoke

Every way ends the same:

$ evoke --version
evoke 0.21.0

The archives are on GitHub releases. Each is named evoke-<target>.tar.gz, for aarch64-apple-darwin, x86_64-apple-darwin, aarch64-unknown-linux-musl or x86_64-unknown-linux-musl. The Linux binaries are static. Each archive holds evoke, LICENSE and NOTICE. SHA256SUMS sits beside them, and so does a build attestation, which gh attestation verify <archive> --repo evoke-build/evoke checks. To update, run the script again, or mise upgrade.

The SDK

$ npm install @evoke-build/evoke

The package needs Node 24.5 or newer, and it is ES modules only. It carries the core as WebAssembly, so it has no build step and no dependencies. The SDK has its own manual section: Getting started.

The key

Jev is TypeSafe AI's classifier. evoke reaches it through one of two adapters. Each reads its key from your shell's environment, only at the moment it decides, and never writes it to a file.

The jev adapter is the default. It posts to TypeSafe AI's own API, under a key from typesafe.ai:

$ export TYPESAFE_API_KEY=<value>

The openjev adapter posts to OpenJEV, an independent service that forwards the request to Jev and returns its answers. OpenJEV is not TypeSafe AI's. evoke is affiliated with neither, and vouches for neither. A key from OpenJEV is on OpenJEV's terms, and whether it may offer Jev is a matter between OpenJEV and TypeSafe AI. As of this release it publishes no terms and no privacy policy, so weigh that before you choose it. Name it in evoke.toml and export its key:

adapter = "openjev"
$ export OPENJEV_API_KEY=<value>

Without the key, the first decision prints a line naming the one it needs, and exits 3. Both adapters ask the same questions and ship the same bars, so a project moves from one to the other with that one line.

Next: The first ten minutes.

FAQPrivacyGitHub