AGPL-3.0-or-later · forever.

install · v0.105.0

One binary. Your machine.

Two minutes to your first run.

Nika is one Rust binary: no daemon, no account, no cloud required. Pick a way in below and run your first file with a free local model.

macOS · Linux · air-gapped OK

  1. 01 · homebrew

    The one-liner

    macOS or Linux with Homebrew: on your PATH immediately. Check it with nika --version.

    what you should see
    nika --versionnika 0.105.0

    real output · nika 0.105.0 · nika --version · re-captured at every release

  2. 02 · script

    Without Homebrew

    Downloads the verified release binary into ~/.nika/bin and prints the single PATH line to add to your shell profile. Reopen the terminal and nika --version works.

    curl -LsSf https://nika.sh/install.sh | sh

    Already carrying a toolchain? cargo fetches the prebuilt release tarball, no compile (the binary lands as nika-cli until the crates.io publish: symlink the public name once). nix builds the exact release source via the repo flake; the first run compiles, the store caches it.

    cargo binstall --git https://github.com/supernovae-st/nika nika-cli
    nix run github:supernovae-st/nika
  3. 03 · manual

    Air-gapped, or by hand

    Download the platform tarball and SHA256SUMS from the latest release, verify, then move nika onto your PATH. Nothing phones home.

    sha256sum -c SHA256SUMS --ignore-missing
  4. 04 · editor

    The editor extension

    supernovae.nika-lang · on the VS Code Marketplace and Open VSX (Cursor · Windsurf · VSCodium). It auto-downloads the matching nika release binary on first use, or reuses the one already on your PATH. Any other editor: nika lsp speaks LSP over stdio · source + issues.

  5. 05 · agents

    Work with your agents

    Nika is built to be written by agents and reviewed by you. nika init drops the schema wiring + AGENTS.md into your repo so Claude Code, Cursor, Codex and friends author valid workflows on the first try; nika wire adds explicit agent-tool (MCP) wiring where you want it.

    nika init
    nika wire cursor
  6. 06 · first run

    Zero keys, zero cloud

    Start with nika welcome, the mirror: what this machine already has (editors · local models · key presence, never values) and where to go next. Your first workflow needs no model and no API key. Save the file, audit it with nika check (plan · cost · secrets, before anything runs), then nika run. Adding an AI step? Point it at a free local model (one ollama pull, nothing leaves your machine), and nika doctor tells you exactly what's wired.

    nika welcome
    nika check hello.nika.yaml
    nika run hello.nika.yaml
    ollama pull llama3.2:3b
    nika examples run 01-hello --model ollama/llama3.2:3b
    nika doctor
    hello.nika.yaml
    nika: v1workflow:  id: hellotasks:  greet:    exec:      command: ["echo", "hello", "from", "nika"]
    what you should see
    nika check hello.nika.yamlnika check · hello.nika.yaml  PLAN     1 wave · 1 task · max parallelism 1      wave 1 greet (exec · echo)  COST     no inference tasks · $0.00  SECRETS  no information-flow escapes  TYPES    every deep output reference fits its declared shape  TOOLS    every nika: tool names a canonical builtin  ARGS     every invoke arg key is declared + every required arg is present  SCHEMA   every authored schema: is satisfiable ○ PERMITS  no boundary declared (engine floor only) · `--infer-permits` writes one ↳ HINT     [permits] no `permits:` boundary declared — run `nika check --infer-permits` to generate the tightest one (default-deny once present)  audited · 1 task · 1 wave · permits none · est ≥$0.0000 · 1 hintnika run hello.nika.yaml  🦋 nika · hello · 1 task     permits ✓ engine floor (no boundary declared)    greet  exec · echo  4ms  ── 1/1 done · $0.00 · elapsed 0.0s ─────────────────────────────    trace: .nika/traces/2026-07-17T21-39-47Z-042f.ndjson · 5 events · chain e7a49a00ceacdc481547021c582c25066cc8f0ccdda4b54bedf71195dde8770d

    real output · nika 0.105.0 · nika check hello.nika.yaml · re-captured at every release

    hello-ai.nika.yaml
    nika: v1workflow:  id: hello-aimodel: ollama/llama3.2:3b   # local · free · swap for any provider in the catalogtasks:  greet:    infer:      prompt: "Say hello in one sentence."

if something catches

command not found: nika (after the install script)

The script installs to ~/.nika/bin and prints the exact PATH line to add to your shell profile (~/.zshrc, ~/.bashrc). Add it, reopen the terminal, and nika --version answers.

export PATH="$HOME/.nika/bin:$PATH"
macOS blocks the binary (manual tarball only)

A hand-downloaded binary carries the quarantine flag; brew and the install script don't. Clear it once, or right-click → Open.

xattr -d com.apple.quarantine ./nika
behind a corporate proxy

The install script is plain curl; it honors the standard proxy variables for the download. The binary itself phones nothing home.

HTTPS_PROXY=http://proxy:8080 curl -LsSf https://nika.sh/install.sh | sh
checksum mismatch on the tarball

A mismatch means a corrupted or tampered download. Don't run it. Re-download both the tarball and SHA256SUMS from the release page and verify again.

sha256sum -c SHA256SUMS --ignore-missing

Next: learn the file in 5 minutes · browse real workflows · full docs