Skip to content

submit - Submit Results

Package or upload a benchmark result bundle for the BenchBox results platform.

benchbox submit has two destinations:

  • --output packages a local PR-ready bundle for the published-results contribution flow. This mode does not use the network or credentials.
  • --service uploads the same canonical bundle to a hosted ingest API. This mode requires keyring auth, BENCHBOX_SUBMIT_TOKEN, or the lower-precedence BENCHBOX_SERVICE_TOKEN fallback.

Basic Syntax

Terminal window
uv run -- benchbox submit [RESULT_FILE] [OPTIONS]

Options

OptionTypeDefaultDescription
RESULT_FILEpath-Path to result JSON file (optional)
--lastflag-Use most recent result file
--benchmark TEXTstr-Filter by benchmark name (with --last)
--platform TEXTstr-Filter by platform name (with --last)
--output DIRECTORYpath./submissionOutput directory for submission package
--service [URL]str-Upload to hosted ingest API; without a URL uses https://api.benchbox.dev/v1
--visibility public|unlisted|privatechoicepublicHosted submission visibility
--idempotency-key TEXTstrautoHosted retry/resubmit key
--wait / --no-waitflag--waitPoll for hosted publication before returning
--dry-runflag-Preview packaging or upload without writing files or sending bytes
--submitted-by TEXTstrgit userOverride local PR manifest submitter name

What Gets Created

Running benchbox submit --output ./submission creates this layout:

submission/
├── bundle/
│ ├── <result>.json # verbatim copy of the canonical result file
│ ├── <result>.plans.json # companion file - only if present
│ └── <result>.tuning.json # companion file - only if present
├── <result>.manifest.json # metadata and hashes for validation
└── CONTRIBUTING.md # step-by-step instructions for opening the PR

<result>.manifest.json fields

FieldDescription
submission_tool_versionbenchbox/<version> string
submitted_atISO-8601 UTC timestamp
bundle_fileFilename of the result JSON
bundle_hashSHA-256 hex digest of the result file
companion_hashesPer-file SHA-256 hashes for .plans.json and .tuning.json companions
benchmarkBenchmark name (e.g. tpch)
platformPlatform name (e.g. duckdb)
scale_factorScale factor used
phaseSubmission phase (2 = PR-based)
submission_path"PR-based" or "hosted-service"
submitted_byExplicit flag, git config user.name, or empty with warning

PR Submission and Hosted Upload

benchbox submit --output packages a result for a community pull request. benchbox submit --service uploads a result to the hosted API.

ModeWorkflowAuth required
PR submissionPackage locally → open PR manuallyNo
Hosted upload--service uploads to the hosted APIYes (benchbox auth login or env token)

Both modes use the same canonical schema-v2 result JSON and companion files. There is no second hosted-only wire format.

Hosted API Mode

Authenticate once:

Terminal window
uv run -- benchbox auth login

Then submit a result:

Terminal window
uv run -- benchbox submit --last --service

Hosted mode sends a multipart request containing:

  • bundle: the primary result JSON bytes
  • manifest: the submission manifest JSON bytes
  • companions[]: .plans.json and .tuning.json files when present
  • visibility: public, unlisted, or private

BenchBox sends a stable idempotency key derived from the service URL and bundle hash unless you pass --idempotency-key. Retrying the same bundle against the same service reuses that key.

When --wait is enabled, BenchBox polls hosted status until the result is published or rejected. When --no-wait is used, BenchBox records the submission id locally and exits after the service accepts the upload.

Hosted submissions are tracked with sidecar files next to the source result:

benchmark_runs/results/<result>.<idempotency-key>.submission.json

List them with:

Terminal window
uv run -- benchbox results --submitted

submit vs publish

These commands serve different purposes:

benchbox publishbenchbox submit
PurposeCopy artifacts to local dir or cloud storageShare results with BenchBox results platform
NetworkConfigured destinations (may be remote)None in --output; hosted API in --service
AuthPer-destinationHosted token only for --service
WorkflowInternal sharing / archivalCommunity contribution via PR or hosted API

Examples

Terminal window
uv run -- benchbox submit results/tpch_sf1_duckdb.json
uv run -- benchbox submit --last
uv run -- benchbox results --paths
uv run -- benchbox submit benchmark_runs/results/tpch_sf001_duckdb_20260401_120000.json --output ./submission
uv run -- benchbox results --paths --limit 100 \
| xargs -n1 -I{} uv run -- benchbox submit {} --output ./submissions
uv run -- benchbox submit --last --benchmark tpch
uv run -- benchbox submit --last --dry-run
uv run -- benchbox submit --last --output ./my-submission
uv run -- benchbox auth login
uv run -- benchbox submit --last --service
uv run -- benchbox submit --last --service https://staging.benchbox.dev/v1 --no-wait
uv run -- benchbox results --submitted

In order, the commands:

  • Package a specific result file.
  • Package the most recent result.
  • Print exact result paths (one per line, pipeable) with benchbox results --paths, then package one result by path. The next command instead loops over every recent result.
  • Package the most recent TPC-H result.
  • Preview what would be packaged (no files written).
  • Use a custom output directory.
  • Log in for hosted submission.
  • Upload to the hosted API and wait for publication.
  • Upload to staging without waiting for publication.
  • Show hosted submission history.
  • auth - Manage hosted submission credentials
  • results - View benchmark result files
  • export - Export results to CSV, HTML, or JSON formats
  • report - Historical analysis and trend detection