Skip to main content
Reference
Send one v3 query request to a local instance or a Helix Cloud database and print the JSON response. Local and Cloud.

Usage

Exactly one input is required. The envelope must include lowercase request_type (read or write) and query. Query bundles are not supported.

Arguments

Options

Input (pick one)

Connection (local only)

Output

Behavior

Target resolution

  • A typed tenant:<id> / cluster:<id> target works without a helix.toml.
  • With no target, the CLI uses the dev instance (local or Cloud), then the only instance, then a picker in a terminal.
  • Otherwise it fails and lists the instances you can pass.

Local queries

  • Local queries post to the auth-disabled local /v2/query.
  • --host, --port, and read-only --warm are local options; Cloud targets reject them.
  • If nothing is listening, the error suggests helix start <instance>.

Cloud queries

Cloud queries use the WorkOS session and go through the broker — the Helix Cloud backend service that forwards CLI queries to your database. The CLI never calls the Cloud gateway (the database endpoint that applications reach with an application key) directly.
  • read uses the backend read-query RPC and requires database.query.read.
  • write uses the backend write-query RPC and requires database.query.write.
  • The backend rejects an operation/envelope mismatch before gateway dispatch.
  • No database key, custom auth header, or direct gateway URL is accepted.
  • A mutation is never retried after dispatch, timeout, or ambiguous transport failure.
  • Cloud query bodies, parameters, results, operational gateway authorization, and credentials are not logged by the broker.

TypeScript input

  • -e and --ts-file need Node.js 20+. The expression must evaluate to a readBatch() or writeBatch() builder.
  • On first use, the CLI installs the pinned @helix-db/helix-db SDK into the Helix cache directory (override with HELIX_CACHE_DIR). No running instance is needed to build the request.

Output

  • The response goes to stdout as syntax-highlighted, pretty-printed JSON. A dim footer with the HTTP status, latency, and target (for example 200 OK · 12ms · dev) goes to stderr, so stdout stays pipeable.
  • --json prints only the compact JSON response. --quiet still prints the response but drops the footer.
  • An empty response prints nothing. A non-2xx response fails with the HTTP status and body.

Examples