eddytor CLI

Install, configure, and script the eddytor command-line interface.

eddytor is the terminal and scripting interface. It talks to the REST API for control operations and Flight SQL for bulk reads, with a verb-first grammar: eddytor <verb> <resource> [args] [--json].

Install

# macOS / Linux (Homebrew)
brew install eddytor-labs/tap/eddytor

# macOS / Linux (shell)
curl -fsSL https://raw.githubusercontent.com/eddytor-labs/eddytor-cli/main/install.sh | sh

# Windows (Scoop)
scoop bucket add eddytor https://github.com/eddytor-labs/eddytor-cli
scoop install eddytor

Configure & sign in

eddytor config set-api-url    https://eddytor.example.com   # your server; unset = Eddytor Cloud (api.eddytor.com)
eddytor config set-flight-url https://eddytor.example.com:8082   # needed for `eddytor query`
eddytor login          # OAuth 2.1 device-code flow (browser)
eddytor doctor         # verify connectivity, auth, and Flight SQL
eddytor config show    # print resolved config
  • Human at a terminal: eddytor login (logout clears creds).
  • Headless / CI: an API key instead - eddytor config set-key edd_live_….

The grammar

Table-scoped commands take a positional triple catalog schema table (domain commands a fourth column) - not a dotted string:

eddytor get tables
eddytor describe table eddytor sales orders
eddytor set domain eddytor sales orders status fixed -v active,inactive,draft
eddytor query "SELECT * FROM \`eddytor\`.\`sales\`.\`orders\` WHERE status='active'" --limit 100

Verbs: get · describe · create · delete · set · link/unlink · insert · merge · optimize · vacuum · rollback · restore · diff · rename · move · profile · validate · upload · download · infer-schema · query · install.

Scripting & CI

For unattended automation - CI pipelines, cron jobs, integrations - authenticate with an API key, not eddytor login (login tokens are short-lived). Keep the key in a secret and feed it through the environment:

# 1. mint a key once - full bootstrap recipe: /get-started/quickstart
docker compose exec eddytor-server eddytoradm create-api-key --email ci@example.com

# 2. in the pipeline, point the CLI at it (keep the key in a secret, not in code)
export EDDYTOR_API_KEY="$CI_SECRET"
eddytor config set-api-url    "$EDDYTOR_API_URL"
eddytor config set-flight-url "$EDDYTOR_FLIGHT_URL"
eddytor config set-key        "$EDDYTOR_API_KEY"

# 3. run with machine-readable output and check exit codes
eddytor get tables --json | jq '.[].name'
  • --json (global) for machine-readable output → pipe to jq. It's a no-op (warns) on side-effecting commands (login/logout/config/insert/merge/link/install).
  • Check exit codes - non-zero = failure; errors print to stderr.
  • Prefer short-lived, labelled keys for automation - eddytoradm create-api-key --name ci-pipeline --expires-in-minutes 10080 (7 days) - and scope them least-privilege (scopes only ever narrow).
  • eddytor doctor is the first triage step when auth or Flight isn't working.

Heads up

Rotating EDDYTOR_API_KEY_SECRET invalidates all keys at once - coordinate key rotation with a key rotation window.

Heads up

--insecure skips TLS verification - local/self-signed dev only, never production. If query fails, run doctor (it checks flight_url specifically) and see Flight SQL endpoint for the port and auth requirements.

On this page