Skip to content

surreal cloud

surreal cloud global flags

Sixteen flags are accepted by every surreal cloud command. They may appear anywhere after cloud - before the group, between the group and the verb, or after the verb - so all three of these are the same invocation:

surreal cloud --json instance list
surreal cloud instance --json list
surreal cloud instance list --json

--help groups them under four headings, and this page keeps those groups.

Context flags

NameDefaultEnvironment variableDescription
--profile<PROFILE>
defaultSURREAL_CLOUD_PROFILEThe configuration profile to use. A profile bundles a credential, an API base URL and a set of configuration values. When the flag is absent, the file's active_profile applies, then default.
--config<PATH>
NoneSURREAL_CLOUD_CONFIGPath to the configuration file, or to the directory that holds it. The directory also becomes the credential directory.
--org<ORG>
NoneSURREAL_CLOUD_ORGThe organisation to operate on, by id or name.

Authentication flags

NameDefaultEnvironment variableDescription
--token<TOKEN>
NoneSURREAL_CLOUD_TOKENPersonal access token to authenticate with. Conflicts with --token-file, and is never persisted.
--token-file<PATH>
NoneSURREAL_CLOUD_TOKEN_FILERead the personal access token from a file, or - for standard input. Conflicts with --token.
--api<URL>
https://api.surrealdb.comSURREAL_CLOUD_APIBase URL of the SurrealDB API. Must be absolute, http or https, name a host, and carry no path.

--token has no short form on purpose: -t reads as --type on the instance commands, and a credential belongs in the environment or a file rather than in argv. See Authentication.

A base URL with a path of its own is refused as a usage error, because the client appends its own routes and the path would be silently prepended to every one of them:

Ensure the API base has no path, such as https://api.surrealdb.com

Output flags

NameDefaultEnvironment variableDescription
--json, -j
NoneSURREAL_CLOUD_JSONEmit machine-readable JSON on stdout. See the output contract for what is guaranteed.
--plain
NoneSURREAL_CLOUD_PLAINDisable tables, spinners and relative times. Output becomes width-independent.
--color<WHEN>
autoNoneWhen to use colour in output: auto, always or never.
--quiet, -q
NoneNoneSuppress progress and informational output. The data payload on stdout is unaffected.
--yes, -y
NoneSURREAL_CLOUD_YESAssume yes for every confirmation in this invocation.
--no-input
NoneSURREAL_CLOUD_NO_INPUTNever prompt for input; fail instead. Also spelled --non-interactive.

--color is the one flag with no SURREAL_CLOUD_* variable. Colour also honours the NO_COLOR, FORCE_COLOR and CLICOLOR_FORCE conventions.

--json and --plain are independent axes: --json chooses the encoding, --plain the decoration. Passing both is accepted and --plain is ignored, because CI scripts pass both and erroring on that is hostile.

--help files the request timeout and the retry budget under this heading alongside the log level.

Logging flags

NameDefaultEnvironment variableDescription
--log<FILTER>
warnSURREAL_CLOUD_LOGThe logging level, or a full set of filter directives.
--debug
NoneSURREAL_CLOUD_DEBUGLog every API request and response to stderr, with the credential reduced to a digest. Also reports which precedence layer supplied each resolved value.
--timeout<DURATION>
30sSURREAL_CLOUD_TIMEOUTMaximum time to wait for a single API request.
--retries<N>
3SURREAL_CLOUD_RETRIESHow many times to retry a failed request. The number of attempts is one more than this.

The effective per-request timeout is never shorter than 21 seconds, because the API's own upstream timeout is 20 seconds and giving up sooner abandons requests that are still being worked on.

Every value that can come from more than one place is resolved once, before the command runs, in this order - highest first:

  1. A command-line flag

  2. An environment variable

  3. The profile in config.toml

  4. The persisted context, written by org use

  5. Your account's default organisation, as the API reports it

  6. The only candidate, when exactly one exists

  7. An interactive picker, when a person is present

  8. An error naming the flag that would have settled it

Layers 5 to 7 apply to the organisation specifically. Exactly one candidate is not a choice, so it is used silently; several candidates in a non-interactive session is an error rather than a guess:

Several organizations are available and none was chosen.
Pass --org, set SURREAL_CLOUD_ORG, or run `surreal cloud org use <name>`.

Available:
  acme
  contoso

--debug prints which layer won each value, and context show reports it as part of its answer:

LayerReported as
Command-line flagcommand-line flag
Environment variableenvironment variable
Profile in config.tomlprofile in config.toml
Persisted contextpersisted context (org use)
Account defaultyour account's default organization
Single candidatethe only candidate
Interactive pickerinteractive choice

An organisation reference that already looks like an id is used with no lookup at all. A name or slug costs one request to resolve, and an unrecognised one is answered with did-you-mean candidates.

Note

A configured api value applies only when --api was not given. Because the flag has a default, the CLI cannot distinguish "absent" from "passed exactly the default", so passing --api https://api.surrealdb.com explicitly leaves the configured value unused.

--timeout and --wait-timeout accept the same syntax. A bare number means seconds.

SuffixUnit
(none), s, sec, secs, second, secondsSeconds
msMilliseconds
m, min, mins, minute, minutesMinutes
h, hr, hrs, hour, hoursHours
d, day, daysDays
surreal cloud --timeout 90 instance list
surreal cloud instance create api --type shared-1 --region aws-euw1 --wait-timeout 5m

Every environment variable this component reads is prefixed SURREAL_CLOUD_, and never plain SURREAL_.

Reusing the database's prefix would be harmful. SURREAL_TOKEN in a shell means a database JWT for one instance; reading it as a control-plane credential would send database tokens to api.surrealdb.com on every command.

The only SURREAL_* variables involved are ones surreal cloud sets for the database process during the handoff in instance sql, import and export: SURREAL_TOKEN, and SURREAL_NAMESPACE and SURREAL_DATABASE when given.

VariableFlag
SURREAL_CLOUD_PROFILE--profile
SURREAL_CLOUD_CONFIG--config
SURREAL_CLOUD_ORG--org
SURREAL_CLOUD_TOKEN--token
SURREAL_CLOUD_TOKEN_FILE--token-file
SURREAL_CLOUD_API--api
SURREAL_CLOUD_JSON--json
SURREAL_CLOUD_PLAIN--plain
SURREAL_CLOUD_YES--yes
SURREAL_CLOUD_NO_INPUT--no-input
SURREAL_CLOUD_LOG--log
SURREAL_CLOUD_DEBUG--debug
SURREAL_CLOUD_TIMEOUT--timeout
SURREAL_CLOUD_RETRIES--retries
VariableEffect
SURREAL_CLOUD_CONFIG_DIROverrides the configuration and credential directory
SURREAL_CLOUD_AGENT1 or 0, forcing agent detection on or off
SURREAL_CLOUD_SESSION_TOKENSupplies an already-minted Cloud session token, for support reproduction
SURREAL_CLOUD_AUTH_CLIENT_IDOverrides the OAuth client id, for a non-production tenant
SURREAL_CLOUD_AUTH_ISSUEROverrides the OAuth issuer, for a non-production tenant

surreal cloud runs under the launcher, which sets SURREAL_CLI_LAUNCHER to its own path so that the handoff commands can reach the database through it. SURREAL_CLI_HOME (default ~/.surrealdb) moves the directory that holds both the launcher's files and the cloud configuration directory, and SURREAL_CLI_OFFLINE=1 forbids all network use by the launcher. The launcher reference documents these.

VariableEffect
NO_COLORDisables colour
FORCE_COLOR, CLICOLOR_FORCEEnables colour, even when piped
CISelects plain, structural output. CI=false, CI=0 and an empty value all mean not CI
TERM=dumbSelects plain output with no colour
SSH_CONNECTION, SSH_TTYSkips the browser login flow
HOME, SURREAL_CLI_HOMELocate the configuration directory
HTTPS_PROXY, NO_PROXYProxy the API connection
VISUAL, EDITORUsed by config edit, in that order

Before it became surreal cloud, the tool was surrealctl and every variable above carried the prefix SURREALCTL_ instead. The old names keep working, so a CI job that exports SURREALCTL_TOKEN does not break when it picks up the new release. The old name is consulted only when the new one is unset, and a run that uses any of them prints one warning on stderr listing each old name with its replacement:

SURREALCTL_* variables are deprecated. Rename SURREALCTL_TOKEN to SURREAL_CLOUD_TOKEN.

Two variables are not a plain prefix swap. SURREALCTL_CLOUD_TOKEN is now SURREAL_CLOUD_SESSION_TOKEN, because SURREAL_CLOUD_CLOUD_TOKEN would read as a typo. SURREALCTL_SURREAL_BINARY and the surreal_binary configuration key no longer exist, because the database is reached only through the launcher. Variables under the old prefix that never had a meaning are not mentioned.

Four values can be persisted per profile with config set. Each is outranked by its environment variable, and config set warns when that variable is exported.

KeyEnvironment variable
orgSURREAL_CLOUD_ORG
apiSURREAL_CLOUD_API
jsonSURREAL_CLOUD_JSON
plainSURREAL_CLOUD_PLAIN

Was this page helpful?