Skip to content
Esc
↑↓navigate↵open⌘Jpreview
On this page

CLI reference

Install and authenticate the varsafe CLI, resolve context, and master the run/export workflows — plus the generated command reference.

CLI v7.8.1

The varsafe CLI puts your secrets into the processes that need them, without a .env file on disk. You, your pipelines and your coding agents run the same command, varsafe run -- <command>: the values reach the program, and the person or agent typing the command sees only what it prints.

varsafe CLI
varsafe CLI

Installation

curl -fsSL https://varsafe.dev/install.sh | bash

The CLI is a single self-contained binary, not an npm package. The installer detects your operating system, architecture and C library, prints the result as a Detected platform: line, and downloads the matching build: Linux x64 or arm64 (glibc or musl), or macOS x64 or arm64. On Windows, run it inside WSL.

It installs to ~/.varsafe/bin (set VARSAFE_INSTALL_DIR to choose another directory) and offers to add that directory to your PATH in ~/.zshrc, ~/.bashrc or ~/.config/fish/config.fish. Check the install and explore the commands, no account needed:

# docs-test: offline
# Check the CLI is installed and explore its commands — no account needed.
set -euo pipefail

varsafe --version

varsafe --help

echo "OK:help"

To upgrade later, the binary updates itself, checking the signed release manifest first:

varsafe update

Commands at a glance

Fifteen commands, none nested:

Command Use it to
run Run a command with secrets as environment variables
get Print one secret’s value, for piping into another tool
set Create or change a secret
unset Remove a secret
list List the secrets in an environment (alias: ls)
export Write secrets to a file or stdout
import Bring the values of a .env file into an environment
use Set the default project and environment
status Show the credential, the current context, and what is in it
login Sign in, through the browser or with an API token
logout Revoke this machine’s credential and clear it locally
whoami Show the credential this machine is using and what it may do
doctor Check that the CLI can store credentials securely here
theme Choose the colour palette (auto, dark, light)
update Update the CLI to the latest version

Every command and flag is in the generated reference at the bottom of this page.


Authentication

There are two ways to authenticate: an interactive browser login for humans, and an API token for machines.

Browser login (default)

varsafe login

The CLI shows a confirmation code such as 7KQ2M-X9D4F and opens your browser. Type that code into the approval page, choose what this login may do (Read only, Standard or Full access), and approve; the CLI finishes on its own. Your password never passes through the terminal. The code expires after 10 minutes, and the login lasts up to 180 days, or until the machine goes 90 days without using it.

Browser login keeps the credential encrypted under ~/.varsafe, with the key in your operating system’s keychain. On a machine with no keychain, a login run at a terminal falls back to a machine token instead: limited to one team and the projects and environments you choose, it lasts at most 30 days and is stored unencrypted in ~/.varsafe (a directory only you can read). A CI job has nobody to approve a login and no keychain, so use a token there. Details: Authentication.

API token (CI and automation)

Owners and admins create API tokens in the dashboard, under Access → API tokens. Three ways to supply one:

# The CLI picks the token up automatically — no login step at all
export VARSAFE_API_TOKEN="vs_at_vsafe_example"
varsafe run -- ./deploy.sh
# "-" reads the token from stdin — keeps it out of argv
secret-manager read varsafe-token | varsafe login -t -
# Interactive masked input — never lands in shell history
varsafe login -T

For pipelines, prefer the environment variable and skip login entirely — see CI/CD usage.

Session commands

varsafe whoami   # which credential this machine uses, and what it may reach
varsafe logout   # revoke this machine's credential and clear it

whoami shows your account and, for each team, the scopes, projects and environments the login may reach; for an API token, its name, team, projects and environments.

For a browser login, logout revokes the credential on the server before clearing it, so a copy of the credentials file is useless afterwards. For an API token stored with varsafe login -T, it only clears the local copy: revoke the token in the dashboard if the machine is no longer trusted.


Environment variables

Variable Purpose
VARSAFE_API_TOKEN API token for non-interactive auth — the primary CI variable. Used when this machine has no stored login: a varsafe login credential on the same machine takes precedence. varsafe whoami shows which one is in use
VARSAFE_TOKEN Alias, read when VARSAFE_API_TOKEN is not set. A bare varsafe login stores it as the machine’s login
VARSAFE_API_URL Overrides the API base URL (default https://api.varsafe.dev) — for self-hosted or test stacks
VARSAFE_DEBUG Set to any value to append a troubleshooting log to ~/.varsafe/debug.log, readable only by you. A log over 5 MB is emptied at the next start. Writes to the file, not to your terminal
VARSAFE_NO_UPDATE_CHECK Any non-empty value disables the interactive “update available” prompt, including 0 and false, as with NO_COLOR; an empty value does not. Set it in CI so the prompt cannot hang an unattended run
VARSAFE_THEME auto, dark, or light — overrides the saved palette for one invocation without rewriting settings. An unrecognized value is ignored
NO_COLOR, FORCE_COLOR The usual conventions: NO_COLOR (any value) turns colour off; FORCE_COLOR turns it on for a pipe, unless it is 0
VARSAFE_INSTALL_DIR Read by the installer only: where to put the binary, as an absolute path (default ~/.varsafe/bin)
VARSAFE_VERSION Read by the installer only: install this release instead of the latest, for example 7.6.0 — useful for pinning CI

There are no variables for the project or environment: use flags, a .varsafe file, or varsafe use (see Context).


Context

Commands that touch secrets need a project and environment. Resolution order:

  1. Flags — -p/--project and -e/--env (or -i/--project-id in automation) always win
  2. Local .varsafe file — found by searching from the current directory up to the git root
  3. Global saved context — set via varsafe use outside a git repository
  4. Auto-selection when there is only one choice; otherwise a prompt at a terminal, and an error in a script or CI job
# Set context — inside a git repo this writes a .varsafe file at the repo root,
# elsewhere it saves globally
varsafe use -p my-api -e development

# Pick interactively at a terminal; elsewhere, print the current context
varsafe use

# Clear the global context (a repo's .varsafe file stays: delete it to drop it)
varsafe use --clear

A .varsafe file holds only the project, environment and team IDs, with their names as a comment, never a secret value.

This script removes a secret and exercises the context lifecycle:

Tested script: unset-and-context.sh
# docs-test: local-stack
# Remove a secret and manage the saved context.
set -euo pipefail

# VARSAFE_API_TOKEN in the environment authenticates every command below; `varsafe
# login` is neither needed nor possible on a headless runner (no keychain).
varsafe use -p "$VARSAFE_PROJECT" -e development

printf %s 'true' | varsafe set TEMP_FLAG --stdin
varsafe unset TEMP_FLAG

# Context can be cleared at any time; commands then need -p/-e flags
varsafe use --clear
varsafe list -p "$VARSAFE_PROJECT" -e development

echo "OK:unset-and-context"

Inject secrets into a process

varsafe run is the core workflow: it fetches secrets over TLS and injects them as environment variables into the child process. Nothing is written to disk; when the process exits, the secrets are gone.

varsafe run -- npm run dev

The command after -- is executed argv-exact — no shell re-parsing, so quoting is preserved and arguments arrive in the child process exactly as you wrote them. Status messages (Injecting 5 secrets from my-api/development) go to stderr, so stdout stays clean for piping. run exits with the command’s own exit code, so CI steps and wrappers behave as if the command ran directly.

That also means shell syntax is not interpreted: ;, |, &&, $() and backticks reach your program as literal characters rather than being executed. This is deliberate — it stops a value such as a CI branch name from running as a command inside the process holding your secrets. When you do want a shell, ask for one explicitly with --shell, which takes a single command string:

varsafe run --shell 'bun run build && ./deploy.sh'

Prefer the argv form when you can. Reach for --shell only for pipes, &&, and redirection — and note that --shell 'setup && exec app' keeps your real process in the foreground, which matters for signal handling.

Shape what gets injected:

# Only secrets matching glob patterns (comma-separated, and the flag can be repeated)
varsafe run --include 'VITE_*,CRISP_*' -- bun run build
varsafe run --include 'VITE_*' --include 'CRISP_*' -- bun run build

# Rename injected keys: each secret is exposed with MONITORING_ prepended
# (e.g. DATABASE_URL becomes MONITORING_DATABASE_URL). Keys that already start
# with the prefix are left unchanged.
varsafe run --prefix monitoring -- ./run-monitoring.sh

--include selects which secrets are injected; --prefix renames them. They compose. Repeating --include unions the patterns, so the two forms above inject the same keys.

To merge a plaintext .env (local overrides that are not secrets), source it in the shell, inside the child, so its values win over the injected secrets:

varsafe run --shell 'set -a; . ./.env.local; set +a; exec npm start'

The full version, including the child process assertion:

Tested script: run-inject.sh
# docs-test: local-stack
# Inject secrets into a child process as environment variables — no file
# is ever written to disk.
set -euo pipefail

# VARSAFE_API_TOKEN in the environment authenticates every command below; `varsafe
# login` is neither needed nor possible on a headless runner (no keychain).
varsafe use -p "$VARSAFE_PROJECT" -e development

printf %s 'vsafe_example_run_inject_value' | varsafe set API_KEY --stdin

# The child process sees API_KEY; your shell never does.
varsafe run -- sh -c 'test -n "$API_KEY"'

# Only inject secrets matching a pattern
varsafe run --include 'API_*' -- sh -c 'test -n "$API_KEY"'

# --include can be repeated, and the patterns are unioned. This is the one check that
# exercises the real flag parsing rather than an already-joined string: repeats used to
# keep only the last pattern, so OTHER_TOKEN would have arrived empty here.
printf %s 'vsafe_example_run_inject_other' | varsafe set OTHER_TOKEN --stdin
varsafe run --include 'API_*' --include 'OTHER_*' -- \
  sh -c 'test -n "$API_KEY" && test -n "$OTHER_TOKEN"'

# `list` must agree with what `run` injects, so its own repeated flag is checked too.
test "$(varsafe list --include 'API_*' --include 'OTHER_*' --json | grep -c '"key"')" = 2

echo "OK:run-inject"

What run protects against

  • Your varsafe credential stays out of the command. run removes VARSAFE_API_TOKEN and VARSAFE_TOKEN from the environment it hands to the command, so a build script or an agent’s tool cannot read the token that fetched the secrets. Pass --pass-credential when the command itself calls varsafe. A command running as your user can still call varsafe with your stored login.
  • A secret cannot take over the command. run refuses to inject a secret named after a variable that controls how programs load code — PATH, LD_PRELOAD, LD_LIBRARY_PATH, DYLD_INSERT_LIBRARIES, NODE_OPTIONS, PYTHONPATH, BASH_ENV and the like — so someone who can edit one secret cannot run code on every machine that uses it. Set those in your shell instead.
  • Nothing is written to disk, and shell syntax in arguments is not executed unless you ask for --shell.

Encrypted .env files

--env-file merges an encrypted .env file into the injected secrets. It accepts encrypted files only, can be repeated, and file values win over the API’s.

varsafe run --env-file .env --env-file .env.extra -- npm start

The CLI sends the file’s encrypted values to varsafe, which opens them for anyone allowed to read the environment and records the read. It needs the same access as varsafe run itself, so it works with a varsafe login or an API token. A file holds the values as they were when it was exported: run without a file for the current ones.

Read a single value

For piping one secret into another tool, varsafe get prints just the value:

# Pipe a value into a tool that reads it from stdin: here, load a deploy key
# into ssh-agent without writing it to disk
varsafe get DEPLOY_SSH_KEY | ssh-add -

# Exact bytes, no trailing newline — for tools that are byte-sensitive.
# On Linux, /dev/shm keeps the file in RAM (macOS has none: use mktemp -d).
# mktemp creates the file readable by you only, under a name nobody else can
# predict or plant first; a plain redirect to a fixed name would do neither.
# Remove the file when the tool is done.
key_file=$(mktemp /dev/shm/signing.XXXXXX)
varsafe get SIGNING_KEY -n > "$key_file"

# Structured output: {key, value, version, updatedAt}
varsafe get DATABASE_URL --json

Import a .env file

varsafe import (CLI 7.8.0 and later; varsafe update upgrades) brings the values of an existing .env into the current environment. It reads the file the way a .env loader does (quotes, export, multi-line values, comments), shows the plan by key name, and asks before writing at a terminal:

varsafe import .env --dry-run   # the plan, nothing written
varsafe import .env

Keys the environment already has are kept unless you pass --replace-existing; composed secrets are always kept. A key set twice, or a line that is not KEY=value, stops the import before anything is written, and no value is ever printed. In a protected environment it asks you to type the slug, or takes --yes in a script. Move an existing .env into varsafe walks through the whole migration.


Export secrets to a file

When a tool insists on a file, varsafe export writes one. The .env format is encrypted by default: the file starts with a #@varsafe/v2/ek_<id> header naming the environment key, and each value is sealed separately and bound to its variable name (varsafe:v2:...). The file shows which variables exist, not their values.

Sealing uses the environment’s public key, which any credential that can read the environment’s values may use, API tokens included; the first export from an environment creates its key. varsafe run --env-file opens the file again under the same access (see encrypted .env). When another tool needs to read the values itself, write a plaintext file to RAM with --plain --tmpfs and delete it when done, or skip the file and use varsafe run.

# Encrypted .env (default)
varsafe export -o .env

# Plaintext requires an explicit opt-in
varsafe export --plain -o .env

# Other formats: compose (alias: env), docker (alias: kubectl), json, yaml (alias: yml) —
# auto-detected from the output file extension, or forced with -f
varsafe export --plain -o secrets.json
varsafe export --plain -f yaml

# Write to RAM-backed tmpfs (/dev/shm) so the file never touches disk
varsafe export --plain --tmpfs -o app.env

The export flow, covering the encrypted default, --plain, and format variants:

Tested script: export-formats.sh
# docs-test: local-stack
# docs-test-allow-plaintext
# Export secrets when a file is genuinely required. The default .env export
# is encrypted; --plain is an explicit opt-in.
set -euo pipefail

# VARSAFE_API_TOKEN in the environment authenticates every command below; `varsafe
# login` is neither needed nor possible on a headless runner (no keychain).
varsafe use -p "$VARSAFE_PROJECT" -e development

printf %s 'smtp.example.com' | varsafe set SMTP_HOST --stdin

workdir="$(mktemp -d)"
trap 'rm -rf "$workdir"' EXIT

# Encrypted .env (the default). Sealing reads the environment's PUBLIC key, which a
# token is allowed to do, so this works under token auth as well as interactively.
varsafe export -o "$workdir/.env"
grep -q '#@varsafe/v2/' "$workdir/.env"

# Plaintext requires an explicit flag
varsafe export --plain -o "$workdir/plain.env"
grep -q 'SMTP_HOST=' "$workdir/plain.env"

# Other formats: json, yaml, docker
varsafe export --plain -f json -o "$workdir/secrets.json"
varsafe export --plain -f yaml -o "$workdir/secrets.yaml"

echo "OK:export-formats"

CI/CD usage

For pipelines, set VARSAFE_API_TOKEN from your CI secret store: no varsafe login step is needed. The installer cannot change the PATH of the job that runs it, so add ~/.varsafe/bin to PATH yourself, as these examples do:

# Inject secrets into a GitHub Actions job with an API token.
# VARSAFE_API_TOKEN is a repository secret; VARSAFE_PROJECT_ID a repository variable.
name: deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install varsafe
        run: |
          curl -fsSL https://varsafe.dev/install.sh | bash
          echo "$HOME/.varsafe/bin" >> "$GITHUB_PATH"
      - name: Deploy with secrets
        env:
          VARSAFE_API_TOKEN: ${{ secrets.VARSAFE_API_TOKEN }}
        # No login step: every command reads VARSAFE_API_TOKEN from the job environment.
        # Passing a token inline (`--token "$VARSAFE_API_TOKEN"`) is refused — argv leaks
        # to shell history and process listings.
        run: |
          varsafe run -i "${{ vars.VARSAFE_PROJECT_ID }}" -e production -- npm run deploy
# Inject secrets into a GitLab CI job with an API token.
# VARSAFE_API_TOKEN is a masked, protected CI/CD variable; VARSAFE_PROJECT_ID a plain one.
deploy:
  image: oven/bun:1
  script:
    # The Bun image has no curl, which the installer is fetched with.
    - apt-get update && apt-get install -y --no-install-recommends curl
    - curl -fsSL https://varsafe.dev/install.sh | bash
    - export PATH="$HOME/.varsafe/bin:$PATH"
    # No login step: every command reads VARSAFE_API_TOKEN from the job environment.
    # Passing a token inline (`--token "$VARSAFE_API_TOKEN"`) is refused — argv leaks
    # to shell history and process listings.
    - varsafe run -i "$VARSAFE_PROJECT_ID" -e production -- bun run deploy

Both files are validated in our test suite. CI/CD pipelines explains each step: scoping the token, naming the project by ID, and what to do when a tool needs a file.


Exit codes

Code Meaning
0 Success
1 Authentication failed, a usage error (unknown command or flag, missing argument), or a failure with no more specific code
2 Network error
3 Validation error (a bad value or file)
4 Not found (project, environment or secret)
5 Permission denied
99 Internal error

varsafe run is the exception: once the command starts, run exits with the command’s exit code (128 plus the signal number if a signal ended it). If the command cannot start, run uses the shell’s codes: 127 when it is not found, 126 when it cannot be executed.


Uninstall

  1. Sign out, so the credential is revoked on the server and not only deleted locally:

    varsafe logout
  2. Remove the binary and local data:

    rm -rf ~/.varsafe
  3. Remove the PATH line the installer added: export PATH="$HOME/.varsafe/bin:$PATH" in ~/.zshrc or ~/.bashrc, or fish_add_path in ~/.config/fish/config.fish.

Also left behind, if you want a clean machine: the CLI’s entry in the operating system keychain (service varsafe), ~/.cache/varsafe/run if it was created, and any .varsafe context files in your repositories.


Troubleshooting

Error messages, their causes, and the fix for each are in the troubleshooting guide — expired tokens, a stuck browser login, Not signed in, an empty varsafe list, Project is required in CI, secure-storage failures, and rate limits.

One case belongs here, because it happens before the CLI can report anything: varsafe: command not found right after installing. The installer adds ~/.varsafe/bin to your shell config, which an already-open shell has not read yet. Restart the terminal, or add it for the current session:

export PATH="$HOME/.varsafe/bin:$PATH"

If it is still missing, run the installer again and read its Detected platform: line — it names the artifact chosen for your OS, architecture and C library.


Command reference

Generated from the CLI’s own --help output — always matches the shipped binary.

varsafe login

Authenticate with varsafe

varsafe login [options]

Flag

Type

Description

--api-url <url>

value

API URL (defaults to $VARSAFE_API_URL, then the public API)

-t, --token [token]

optional

Authenticate with an API token. Omit the value for a masked prompt, or pass "-" to read it from stdin. An inline value is rejected — it would leak to shell history.

-T, --token-prompt

boolean

Alias for --token with no value (masked prompt)

-f, --force

boolean

Force re-authentication even if already logged in

-h, --help

boolean

display help for command

varsafe whoami

Show the credential this machine is using and what it may do

varsafe whoami [options]

Flag

Type

Description

--json

boolean

Output the credential description as JSON

-h, --help

boolean

display help for command

varsafe logout

Revoke this machine’s credential and clear it locally

varsafe logout [options]

Flag

Type

Description

-h, --help

boolean

display help for command

varsafe list

Alias: ls

List secrets for a project and environment

varsafe list|ls [options]

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

-r, --reveal

boolean

Show actual secret values

--json

boolean

Output as JSON

--include <patterns>

value

Comma-separated glob patterns to filter keys (e.g., --include "VITE_*,*_URL") — same syntax as varsafe run --include. Can be repeated; all patterns given are combined

--source

boolean

With --reveal, show composed secrets as written instead of resolved

-h, --help

boolean

display help for command

varsafe run

Run a command with secrets as environment variables

varsafe run [options] <command...>

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

--prefix <prefix>

value

Rename injected keys with PREFIX_ prepended — renames, does not filter (e.g., --prefix monitoring). Use --include to select keys

--include <patterns>

value

Comma-separated glob patterns to filter which secrets get injected (e.g., --include "VITE_*,CRISP_*"). Can be repeated; all patterns given are combined

--env-file <path>

value

Decrypt an encrypted .env file and merge it into the injected secrets (can be repeated). Only encrypted files are accepted — source a plaintext .env in your shell instead

--shell

boolean

Run a single command string through /bin/sh (enables pipes, &&, etc.): varsafe run --shell 'a && b'. On an interactive terminal, use exec for graceful shutdown, e.g. --shell 'setup && exec main'

--pass-credential

boolean

Keep the inherited credential variables (VARSAFE_API_TOKEN, VARSAFE_TOKEN) in the command's environment, e.g. for a nested varsafe call. Everything the command runs can then read every secret that token reaches. Refused if a selected secret has the same name

-h, --help

boolean

display help for command

varsafe export

Export secrets to a file or stdout (env format encrypts by default, use --plain to disable)

varsafe export [options]

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

-o, --output <file>

value

Write to file instead of stdout (format auto-detected from extension)

-f, --format <format>

value

Override serialization: compose (.env), docker, kubectl, json, yaml (default: compose)

--plain

boolean

Skip encryption and output plaintext values

--tmpfs

boolean

Write to /dev/shm/ (RAM-backed tmpfs)

-h, --help

boolean

display help for command

varsafe get

Print a single secret value to stdout (pipe-friendly)

varsafe get [options] <key>

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

--json

boolean

Output {key, value, version, updatedAt} as JSON

--source

boolean

Print a composed secret as written instead of resolved

-n, --no-newline

boolean

Do not append a trailing newline (exact byte output for piping)

-h, --help

boolean

display help for command

varsafe set

Set a secret in an environment

varsafe set [options] <key>

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

-s, --stdin

boolean

Read the value from stdin (e.g. printf %s "$SECRET" | varsafe set KEY --stdin)

--json

boolean

Output {key, version, project, environment} as JSON

-T, --prompt

boolean

Prompt for the value with masked input (default at a terminal; does not leak to shell history)

--from-env <name>

value

Read the value from an environment variable (for CI)

--from-file <path>

value

Read the value from a file (multi-line certs, private keys)

--chomp

boolean

Strip one trailing newline from the value (for echo-style producers)

--template <source>

value

Store a value composed from other secrets, e.g. 'postgres://${DB_PASS}@db'

-y, --yes

boolean

Skip the confirmation required in protected environments

-h, --help

boolean

display help for command

varsafe unset

Remove a secret from an environment

varsafe unset [options] <key>

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

-y, --yes

boolean

Skip the confirmation required in protected environments

--json

boolean

Output {key, removed, project, environment} as JSON

--flatten

boolean

Keep dependent secrets working by copying this value into each of them

--cascade

boolean

Delete every secret composed from this one as well

-h, --help

boolean

display help for command

varsafe import

Import the secrets in a .env file into an environment

varsafe import [options] <file>

Flag

Type

Description

-p, --project <name>

value

Project name

-i, --project-id <id>

value

Project ID (for CI/automation)

-e, --env <environment>

value

Environment (e.g., development, staging, production)

--replace-existing

boolean

Overwrite keys the environment already has (by default they are kept)

--dry-run

boolean

Show what would be imported, and write nothing

-y, --yes

boolean

Import without asking for confirmation

-h, --help

boolean

display help for command

varsafe doctor

Diagnose whether the CLI can securely store credentials

varsafe doctor [options]

Flag

Type

Description

--addon-only

boolean

Only verify the native keyring addon loads (tolerate a missing OS backend)

--json

boolean

Emit the report as JSON

-h, --help

boolean

display help for command

varsafe status

Show the credential, the current context, and what is in it

varsafe status [options]

Flag

Type

Description

--json

boolean

Output the status as JSON

-h, --help

boolean

display help for command

varsafe theme

Choose the colour palette (auto, dark, light)

varsafe theme [options] [mode]

Flag

Type

Description

--json

boolean

Output the resolved theme as JSON (never prompts)

-h, --help

boolean

display help for command

varsafe update

Update varsafe CLI to the latest version

varsafe update [options]

Flag

Type

Description

-h, --help

boolean

display help for command

varsafe use

Set default project and environment for commands

varsafe use [options]

Flag

Type

Description

-p, --project <name>

value

Project name

-e, --env <environment>

value

Environment (e.g., development, staging, production)

--clear

boolean

Clear the current context

--json

boolean

Output the resulting context as JSON (never prompts)

-h, --help

boolean

display help for command