ML-Dash

CLI Reference

The ml-dash command logs you in, inspects projects and experiments, and moves experiment data to and from an ML-Dash server. This page covers CLI 0.1.1.

The CLI is a separate program from the Python SDK. Install it with the standalone installer or npm install -g @dreamlake/ml-dash (see Install). pip install ml-dash no longer installs it (since SDK 0.7.0).

CommandDescription
loginAuthenticate with the OAuth device flow
logoutClear the stored token
profileShow the current user and configuration
listList projects, experiments, and tracks on the server
createCreate a project
removeDelete a project and everything in it
uploadUpload locally stored experiments to the server
downloadDownload experiments from the server to local storage
apiSend a raw GraphQL query or mutation
updateUpdate the CLI itself
versionPrint the CLI version

Run ml-dash <command> --help for the exact flags of your installed version.

Common options

FlagDescription
--dash-url, --api-url URLServer to talk to. Defaults to remote_url in ~/.dash/config.json, then https://api.dash.ml. Accepted by every command that contacts the server.
-h, --helpShow help for the command

ml-dash login

bash
ml-dash login [--dash-url URL] [--auth-url URL] [--no-browser]
FlagDescription
--dash-url, --api-urlML-Dash server to log in to
--auth-urlOAuth authorization server (default https://auth.vuer.ai)
--no-browserPrint the code and URL, but don't open a browser

Starts the device authorization flow. It prints a code, a URL, and a QR code, waits up to 10 minutes for you to approve in a browser, exchanges the result for an ML-Dash token, and stores it. See Authentication for where the token goes and how the SDK reads it.

ml-dash logout

bash
ml-dash logout

Clears the stored token from the keychain and from the ~/.dash/ token files.

ml-dash profile

bash
ml-dash profile [--dash-url URL] [--json] [--cached]
FlagDescription
--jsonOutput as JSON
--cachedRead the stored token only, without fetching from the server

Shows your username, name, email, server URL, token expiry, and whether the data came from the server or the cached token.


ml-dash list

bash
ml-dash list [-p PROJECT] [-n NAMESPACE] [--status STATUS] [--tags TAGS]
             [--detailed] [--tracks] [--topic-filter TOPIC] [--dash-url URL] [-v]
FlagDescription
-p, --project (aliases --prefix, --pref, --proj)List experiments in this project. Without it, lists projects. Accepts glob patterns: always quote them, e.g. -p 'tom/tut*'
-n, --namespaceNamespace for all queries. Defaults to your own
--statusFilter experiments: COMPLETED, RUNNING, FAILED, or ARCHIVED
--tagsFilter experiments by tags (comma-separated)
--detailedShow more columns
--tracksList the tracks in one experiment. Needs -p namespace/project/experiment
--topic-filterFilter tracks by topic, e.g. 'robot/*'
-v, --verboseVerbose output

Results come 50 per page. In a terminal, move between pages with n / → / Space / Enter (next) and p / b / ← (previous). Any other key quits. When output is piped, list prints the first page and notes that more results are available.

A glob without a namespace is expanded against your own namespace:

InputSearches
tes*<your-namespace>/tes*/*
tom/tes*tom/tes*/*
tom/test/exp*tom/test/exp*
bash
ml-dash list                                   # your projects
ml-dash list -n alice                          # alice's projects
ml-dash list -p my-project                     # experiments in a project
ml-dash list -p 'tom/tes*' --status RUNNING    # glob across projects
ml-dash list --tracks -p tom/test/run-1 --topic-filter 'robot/*'

ml-dash create

bash
ml-dash create -p PROJECT [-d DESCRIPTION] [--dash-url URL]
FlagDescription
-p, --projectproject or namespace/project. Without a namespace, your own is used
-d, --descriptionOptional description

If the project already exists, create prints a warning and exits successfully.

ml-dash remove

bash
ml-dash remove -p PROJECT [-y] [--dash-url URL]
FlagDescription
-p, --projectproject or namespace/project
-y, --yesSkip the confirmation prompt

remove deletes the project and all of its experiments, metrics, files, and logs. It cannot be undone.


ml-dash upload

bash
ml-dash upload [PATH] [options]

Uploads experiments that the SDK wrote in local mode. PATH is the local storage directory and defaults to ./.dash.

FlagDescription
-p, --project (aliases --prefix, --pref, --proj)Only upload experiments matching this prefix or glob, e.g. 'tom/*/exp*'
-t, --targetUpload under this prefix on the server instead, e.g. alice/shared-project
--skip-logs, --skip-metrics, --skip-files, --skip-paramsLeave that kind of data out
--dry-runShow what would be uploaded without uploading
--strictFail on any validation error. By default, invalid data is skipped
--batch-size NBatch size for logs and metrics (default 100)
--resumeResume an interrupted upload
--state-file FILEState file for --resume (default .dash-upload-state.json)
--tracks FILEUpload a single track data file (e.g. robot_position.jsonl). Needs --remote-path
--remote-path PATHWhere the track goes, e.g. namespace/project/exp/robot/position
-v, --verboseShow detailed progress
bash
ml-dash upload                                  # everything in ./.dash
ml-dash upload ./.dash -p 'tom/*/exp*'          # a subset
ml-dash upload --dry-run -v                     # preview
ml-dash upload -t alice/shared-project          # into another project
ml-dash upload --tracks robot_position.jsonl --remote-path tom/proj/exp/robot/position

ml-dash download

bash
ml-dash download [PATH] [options]

Downloads experiments into a local storage directory (PATH, default ./.dash) in the same layout local mode writes.

FlagDescription
-p, --project (aliases --prefix, --pref, --proj)Project or glob to download, e.g. alice/my-project, 'tut*'
--experiment NAMEOnly this experiment. Needs --project
--skip-logs, --skip-metrics, --skip-files, --skip-paramsLeave that kind of data out
--dry-runPreview without downloading
--overwriteOverwrite experiments that already exist locally
--resumeResume an interrupted download
--state-file FILEState file for --resume (default .dash-download-state.json)
--batch-size NBatch size for logs and metrics (default 1000, max 10000)
--max-concurrent-metrics NParallel metric downloads (default 5)
--max-concurrent-files NParallel file downloads (default 3)
--tracks PATHDownload one track instead, e.g. namespace/project/exp/robot/position
-f, --formatTrack export format (default jsonl)
-o, --output FILETrack output file (default: named after the topic)
-v, --verboseDetailed progress
bash
ml-dash download -p alice/my-project
ml-dash download ./backup -p alice/my-project --experiment exp-one
ml-dash download -p 'alice/tut*' --dry-run
ml-dash download --tracks alice/proj/exp/robot/position -f jsonl -o joints.jsonl

ml-dash api

bash
ml-dash api (--query QUERY | --mutation MUTATION) [--jq PATH] [--dash-url URL]
FlagDescription
-q, --queryGraphQL query
-m, --mutationGraphQL mutation
--jq PATHPull out one value with a dot path, e.g. .me.username
  • A bare body is wrapped for you: me { username } is sent as { me { username } }.
  • Single quotes are converted to double quotes, so you can write user(title: 'hello') inside a double-quoted shell string.
  • --jq paths start from the response data. There is no top-level data key, so write .me.username, not .data.me.username.
bash
ml-dash api --query "me { username name email }"
ml-dash api --query "me { username }" --jq ".me.username"

ml-dash update

bash
ml-dash update [--check] [--version VERSION] [--json]
FlagDescription
--checkReport whether an update exists. Change nothing
--versionInstall this exact release instead of the latest
--jsonOutput as JSON

Updates through the channel you installed from. An npm install is updated with npm install -g @dreamlake/ml-dash@<version>. A standalone binary downloads the new build, checks its sha256 and size against the release manifest, runs it once, and only then replaces itself. update refuses to downgrade. It also refuses to touch a copy it doesn't own (Homebrew, Nix, pipx, a node_modules tree) and tells you which tool to use instead.

ml-dash version

bash
ml-dash version        # also: ml-dash --version, ml-dash -V

Files and environment variables

Used for
~/.dash/config.jsonremote_url, an optional api_key (used instead of the stored login), auth_url, and the device-flow secret
~/.dash/tokens.encrypted, ~/.dash/encryption.keyThe token, when no keychain is used
ML_DASH_CONFIG_DIRUse a different directory than ~/.dash for the CLI. The Python SDK always reads ~/.dash
ML_DASH_NO_KEYCHAIN=1Never use the OS keychain. Store and read the token in the encrypted file

Troubleshooting

ml-dash: command not found after upgrading the SDK. Since SDK 0.7.0, pip doesn't install the CLI. Install it as shown in Install. python -m ml_dash.cli no longer exists.

Authentication errors. Run ml-dash profile. It reports an expired token. Then run ml-dash logout && ml-dash login.

The SDK can't find your login but the CLI can. The SDK and the CLI must agree on where the token lives. See Using the token from Python.