The official CLI for the Nirvana Labs REST API.
brew install nirvana-labs/tap/nirvanaTo test or install the CLI locally, you need Go version 1.22 or later installed.
go install 'github.com/nirvana-labs/nirvana-cli/cmd/nirvana@latest'Once you have run go install, the binary is placed in your Go bin directory:
- Default location:
$HOME/go/bin(or$GOPATH/binif GOPATH is set) - Check your path: Run
go env GOPATHto see the base directory
If commands aren't found after installation, add the Go bin directory to your PATH:
# Add to your shell profile (.zshrc, .bashrc, etc.)
export PATH="$PATH:$(go env GOPATH)/bin"After cloning the git repository for this project, you can use the
scripts/run script to run the tool locally:
./scripts/run args...The CLI follows a resource-based command structure:
nirvana [resource] <command> [flags...]nirvana compute:vms create \
--api-key 'My API Key' \
--boot-volume '{size: 100, type: nvme}' \
--cpu-config '{vcpu: 2}' \
--memory-config '{size: 2}' \
--name my-vm \
--os-image-name ubuntu-noble-2025-10-01 \
--project-id 123e4567-e89b-12d3-a456-426614174000 \
--public-ip-enabled \
--region us-wdc-1 \
--ssh-key '{public_key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2}' \
--subnet-id 123e4567-e89b-12d3-a456-426614174000For details about specific commands, use the --help flag.
| Environment variable | Required |
|---|---|
NIRVANA_LABS_API_KEY |
yes |
--api-key(can also be set withNIRVANA_LABS_API_KEYenv var)--help- Show command line usage--debug- Enable debug logging (includes HTTP request/response details)--version,-v- Show the CLI version--base-url- Use a custom API backend URL--format- Change the output format (auto,explore,json,jsonl,pretty,raw,yaml)--format-error- Change the output format for errors (auto,explore,json,jsonl,pretty,raw,yaml)--transform- Transform the data output using GJSON syntax--transform-error- Transform the error output using GJSON syntax
To pass files to your API, you can use the @myfile.ext syntax:
nirvana <command> --arg @abe.jpgFiles can also be passed inside JSON or YAML blobs:
nirvana <command> --arg '{image: "@abe.jpg"}'
# Equivalent:
nirvana <command> <<YAML
arg:
image: "@abe.jpg"
YAMLIf you need to pass a string literal that begins with an @ sign, you can
escape the @ sign to avoid accidentally passing a file.
nirvana <command> --username '\@abe'For JSON endpoints, the CLI tool does filetype sniffing to determine whether the
file contents should be sent as a string literal (for plain text files) or as a
base64-encoded string literal (for binary files). If you need to explicitly send
the file as either plain text or base64-encoded data, you can use
@file://myfile.txt (for string encoding) or @data://myfile.dat (for
base64-encoding). Note that absolute paths will begin with @file:// or
@data://, followed by a third / (for example, @file:///tmp/file.txt).
nirvana <command> --arg @data://file.txt