CLI overview
Every Esker command, what it does, and where to learn more.
The CLI is installed by pip install esker (or uv add esker). Two equivalent entry points point at the same binary:
esker <cmd>
esk <cmd> # short alias
esker (no args) prints help. Every subcommand accepts --help for its own usage.
Commands by job
Build a dataset
| command | what |
|---|---|
esker list |
List pipelines registered in this project |
esker run <domain> |
Execute a pipeline, write parquet locally |
esker test [<domain>] |
Run fixtures against your transform |
esker check <domain> |
Diff your local schema against the last published one |
esker push <domain> |
Run, gate, and upload to the hub |
Detailed reference: CLI authoring.
Consume a dataset
| command | what |
|---|---|
esker pull <ref> |
Download a parquet, content-hash verify |
esker view <ref> |
One-screen summary: header + sample rows |
esker head <ref> |
Records, filterable with --where |
esker schema <ref> |
The schema as a typed table |
esker manifest <ref> |
The manifest as key value lines |
esker search <query> |
Find publishers of a name, or full-text search |
Detailed reference: CLI reading.
Manage bindings
| command | what |
|---|---|
esker add <owner>/<name> |
Bind a dataset, pin its version in esker.lock |
esker remove <name> |
Drop a binding |
esker sync |
Reconcile the cache against the lockfile |
esker upgrade <name> |
Re-resolve to the hub's latest version |
Detailed reference: CLI bindings.
Sign in and manage your account
| command | what |
|---|---|
esker login |
Browser sign-in |
esker logout |
Clear local credentials |
esker whoami |
Show signed-in user and active handle |
esker config set-owner <handle> |
Print a pyproject.toml snippet |
esker config set-handle <handle> |
Rename your handle (server-side) |
esker transfer <ref> <new_owner> |
Hand a dataset to another handle |
esker visibility <ref> public|private |
Toggle dataset visibility (phase 1: public only) |
Detailed reference: Auth.
Refs
Most read commands accept a ref — the address of a dataset on the hub. A ref can be:
| form | meaning |
|---|---|
<owner>/<name> |
latest version published by <owner> |
<owner>/<name>@<version> |
a specific version |
<owner>/<name>@latest |
same as no version |
<name> (bare) |
resolved through your project's bindings |
Bare names are the recommended path in code and CLI alike. They keep the owner choice in one explicit place (esker add) and the rest of your usage clean.
Output conventions
Esker's CLI is calm and dense. A successful command is two or three lines:
$ esker push us.treasury.yields
archie/us.treasury.yields@2.0.0
4,205 records · 0.7s · output/us.treasury.yields.parquet
pushed archie/us.treasury.yields@2.0.0
Errors are two lines — the type and message in red, then a → file:line pointer in dim:
ValueError: esker_id jurisdiction 'us' does not match DOMAIN_ID jurisdiction 'ca'
→ my_pipelines/sec_companies.py:34
Pass -v / --verbose to add the full traceback.
Every read command supports --json for piping into jq:
esker manifest archie/us.treasury.yields --json | jq '.content_hash'
The output is pretty-printed and newline-terminated.
Exit codes
0— success.1— anything that prevents the command from completing. Specific failure mode is in the error message.
There are no other exit codes. Scripts can branch on $? cleanly.
See also
- Getting started — full tutorial
- CLI authoring · CLI reading · CLI bindings · Auth
- Errors and footguns — every error path, verbatim