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 eddytorConfigure & 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(logoutclears 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 100Verbs: 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 tojq. 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 doctoris the first triage step when auth or Flight isn't working.
Heads up
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.