CLI · Apache 2.0 · Linux, macOS & Windows

Query and operate Arc,
from the terminal.

arcli talks to the Arc servers you already run: named connections, SQL queries, writes and bulk imports, and the admin work you would otherwise script with curl.

One static binary. Table, JSON, CSV or Arrow output. Homebrew, deb, rpm, Arch and Docker. Nothing phones home.

arcli
# save a connection once, keep the token out of shell history
$ pass show arc/prod | arcli config create --name prod --endpoint https://arc.example.net --token-stdin

# check it, then query
$ arcli ping
$ arcli query "SELECT host, avg(usage) AS usage FROM cpu GROUP BY 1 ORDER BY 2 DESC" -o json | jq .data

What it is

The operator's client for Arc

Operating Arc without it means copying the bootstrap token out of a stderr banner, building JSON query bodies by hand, remembering the right headers, and decoding the response by eye. arcli replaces that with a workflow modelled on influx, kubectl and clickhouse-client.

It connects to Arc instances you already run and keeps exactly one file on disk: your connection profiles. Every command is one request to the server, so a token can do from arcli precisely what it is allowed to do in Arc.

Named connections

Dev, staging and prod as profiles, one active, overridable per command. Environment variables for containers and CI, no config file needed.

The whole admin surface

Tokens, retention policies, continuous queries, predicate deletes, backups, compaction, cluster status and server logs, each with its own command.

Built to be piped

Results on stdout, everything else on stderr, exit codes you can branch on, and y/N prompts that scripts skip with --yes. Tokens are redacted everywhere they appear.

Capabilities

Everything the API can do, one command each

Every Arc endpoint an operator reaches for, with the flags, prompts and output formats a script or a person expects.

Query, four ways out

SQL from an argument, a file or stdin. Table for the terminal, JSON for jq, CSV for spreadsheets, Arrow IPC for pandas, polars or DuckDB. Estimate a result before running it.

Writes in three formats

Line protocol streamed from stdin or a file, a prepared MessagePack document passed through as is, or JSON validated client-side and converted before it is sent.

Bulk import

CSV, line protocol, Parquet and TLE files uploaded to Arc’s import endpoints, which parse server-side and report rows and partitions written.

Token lifecycle

Create, rotate, revoke and delete API tokens, set permissions and expiry, see who last used what. The new secret is the only thing on stdout, so $(...) captures it cleanly.

Retention and continuous queries

Create and run retention policies and rollup queries, with a dry run before every destructive step and an execution history after it. Run them by hand on servers without the scheduler.

Backups and deletes

Create, inspect, restore and delete server-side backups; delete rows by SQL predicate with the row count shown before you confirm.

Cluster, compaction, logs

Node and cluster status, compaction tiers and history with a manual trigger, the scheduler state, and the server’s recent log entries by level and time window.

Completion and man pages

Shell completion for bash, zsh, fish and PowerShell that completes your connection names from the config file, never from a server, plus a man page per command.

Nothing phones home

arcli only ever talks to the Arc servers you configure. It carries a random installation id so Arc’s own opt-out telemetry can count CLI installs; DO_NOT_TRACK=1 turns that off.

Quick start

Install, connect, query

Three steps from a package manager to a result table.

1

Install

# macOS and Linux
brew install basekick-labs/tap/arcli

# Debian/Ubuntu, RHEL/Fedora and Arch packages, plus archives for every platform,
# are on the releases page; or run it as a container:
docker run --rm ghcr.io/basekick-labs/arcli --version

Packages and the Homebrew formula install shell completion and the man pages with the binary. Every release ships checksums signed with cosign and an SBOM per archive.

2

Connect

# the first profile becomes the active one
arcli config create --name local --endpoint http://localhost:8000 --token YOUR-TOKEN

# health plus token check in one call
arcli ping

Add more profiles for staging and prod and switch with -c NAME. In CI, ARC_ENDPOINT and ARC_TOKEN work without any file. An Arc running without authentication needs no token at all.

3

Write and query

echo "cpu,host=web-1 usage=0.63 $(date +%s)000000000" | arcli write --database metrics

arcli query --database metrics "SELECT host, avg(usage) FROM cpu GROUP BY 1"
arcli query --database metrics -o csv "SELECT * FROM cpu" > cpu.csv

Swap -o json for jq, or -o arrow to stream straight into pyarrow. For files of any size, arcli import takes CSV, line protocol, Parquet and TLE.

Every command, flag, output format and exit code? See the arcli documentation.

Arc, one command away

Open source and built alongside Arc: arcli 26.x speaks to Arc 26.06 and newer, and prefers a clear error over a guess when a server is older.

Available nowLicense: Apache 2.0Homebrew · deb · rpm · Arch · Docker · Source