Benchmarks
Benchmarks Commands
Commands for interacting with Kaggle Benchmarks. Benchmarks let you define evaluation tasks as Python scripts, run them against one or more LLM models via the Kaggle Model Proxy, and download the results.
The top-level command is kaggle benchmarks (alias: kaggle b), which has the following subcommands and groups:
* auth — Fetch Model Proxy credentials.
* init — Fetch credentials and default environment variables for local development.
* quota — Show your Model Proxy (AI inference) spend quota.
* leaderboard — Get benchmark leaderboard information.
* tasks (alias: t) — Manage benchmark tasks (push, run, list, status, download, log, models, delete, publish).
* topics — Browse discussion topics for a benchmark.
kaggle benchmarks auth
Fetches a Model Proxy token and persists the credential environment variables to a file.
Usage:
kaggle benchmarks auth [options]Options:
* -y, --yes: Automatically confirm without prompting.
* --env-file <FILE>: File to write environment variables to (default: .env).
Example:
Write Model Proxy credentials to the default .env file, confirming automatically:
kaggle b auth -yPurpose:
This command fetches a short-lived Model Proxy API key and URL from Kaggle and appends them to your environment file. The variables written are:
* MODEL_PROXY_URL
* MODEL_PROXY_API_KEY
* MODEL_PROXY_EXPIRY_TIME
kaggle benchmarks init
Fetches Model Proxy credentials and additional default environment variables useful for local benchmark development. Also generates a starter example task file and a syntax reference document.
Usage:
kaggle benchmarks init [options]Options:
* -y, --yes: Automatically confirm without prompting.
* --env-file <FILE>: File to write environment variables to (default: .env).
* --example-file <FILE>: File to write the example benchmark task to (default: example_task.py).
Examples:
1. Initialize with defaults (writes .env, example_task.py, and kaggle_benchmarks_reference.md):
kaggle b init -y2. Initialize with a custom env file and example file:
kaggle b init -y --env-file my_project/.env --example-file my_project/my_task.pyPurpose:
In addition to the three credential variables written by auth, init also writes:
* LLM_DEFAULT — Default model slug for tasks.
* LLM_DEFAULT_EVAL — Default model slug for evaluation.
* LLMS_AVAILABLE — Comma-separated list of available model slugs.
LLMS_AVAILABLE is a curated subset of models intended for local development and testing — it is not the full set of available models, and the Model Proxy token minted for local development is restricted to these models. To see all available models, use kaggle benchmarks tasks models. To run a task against any model (including those not in LLMS_AVAILABLE), use kaggle benchmarks tasks run, which executes on Kaggle's infrastructure with access to the full model catalog.
init also creates two files alongside the example file:
* example_task.py (or custom name via --example-file) — A starter Python script demonstrating how to define a benchmark task using @task decorators and the kaggle_benchmarks library.
* kaggle_benchmarks_reference.md — A syntax reference document for the kaggle-benchmarks task API.
If either file already exists, it is skipped without overwriting.
---
kaggle benchmarks quota
Shows your current Model Proxy (AI inference) spend quota, one row per refill period.
Usage:
kaggle benchmarks quota [options]Options:
* -v, --csv: Print results in CSV format.
* --format <FORMAT>: Print results in the selected format (csv, table, json).
Example:
$ kaggle b quota
period used remaining total refillAt
------- ------ --------- ------- -------------------------
Daily $1.20 $3.80 $5.00 2026-08-08T00:00:00+00:00
Monthly $14.50 $85.50 $100.00 2026-09-01T00:00:00+00:00Purpose:
Amounts are in USD and reflect inference spend through the Model Proxy — this is separate from the top-level kaggle quota command, which reports weekly GPU and TPU accelerator hours. remaining is derived as total - used and is clamped at $0.00, so an overage shows as zero remaining rather than a negative balance.
---
kaggle benchmarks leaderboard
Get benchmark leaderboard information.
Usage:
kaggle benchmarks leaderboard <BENCHMARK> [options]Arguments:
* <BENCHMARK>: Benchmark slug (e.g., owner/benchmark-slug).
Options:
* --version <VERSION>: Benchmark version (optional).
* -s, --show: Show the leaderboard in the terminal.
* -d, --download: Download the leaderboard as a CSV file.
* -p, --path <DIRECTORY>: Folder where the leaderboard will be downloaded (defaults to current working directory).
* -v, --csv: Print results in CSV format (when used with --show).
* --format <FORMAT>: Print results in a specific format (e.g., json).
Examples:
1. Show the leaderboard for a benchmark:
kaggle b leaderboard owner/my-benchmark --show2. Download the leaderboard as CSV:
kaggle b leaderboard owner/my-benchmark --download3. Show a specific version of the leaderboard in JSON format:
kaggle b leaderboard owner/my-benchmark --version 2 --show --format jsonPurpose:
Displays or downloads the evaluation results for all models that have run tasks in the specified benchmark. The leaderboard is represented as a table where rows are model versions and columns are benchmark tasks, showing the score achieved by each model on each task.
---
Tasks Commands
All tasks commands live under kaggle benchmarks tasks (alias: kaggle b t).
Task Name Format
Task arguments (<TASK>) support two formats:
* Bare slug (my-task): Refers to a task owned by the current user.
* Owner prefix (owner/my-task): Refers to a specific owner's task (e.g., another user's public task, or your-username/my-task).
| Command Group | Supported Formats | Description |
|---|---|---|
| View & Run (run, status, download, log) | my-task, owner/my-task | Interact with your own tasks or public tasks from other users |
| Publish (publish) | my-task, your-username/my-task | Make your own task public (must be task owner) |
| Create (push) | my-task only | Must match the @task(name="...") decorator in your Python source file |
Slug Normalization: Task names are automatically converted to URL-safe slugs (My Task→my-task). Forowner/taskarguments, each segment is slugified independently (Owner/My Task→owner/my-task) so the/separator is preserved.
kaggle benchmarks tasks push
Creates or updates a benchmark task from a local Python source file. The file must contain at least one function decorated with @task.
Usage:
kaggle benchmarks tasks push <TASK> -f <FILE> [options]Arguments:
* <TASK>: Task name. Automatically normalized to a URL-safe slug (e.g., my_task or My Task becomes my-task).
Options:
-f, --file <FILE> (required)*: Path to the source Python file defining the task.
* --wait [TIMEOUT]: Wait for the task creation to complete. Optionally specify a timeout in seconds (0 or omit value = wait indefinitely).
* --poll-interval <SECONDS>: Maximum seconds between status polls (default: 60). Polling starts at 5s and increases by 50% each iteration until reaching this value.
* -v, --verbose: Enable verbose polling logs.
* -d, --kaggle-dataset <DATASET>: Kaggle dataset to attach to the task's underlying notebook (format: owner/dataset-slug). Repeat for multiple datasets (e.g. -d kaggle/titanic -d user/my-dataset). Mounted at /kaggle/input/<dataset-slug>/ by default. If a naming conflict occurs, the fully qualified mount path /kaggle/input/<owner>/<dataset-slug>/ is used instead.
Examples:
1. Push a task and return immediately:
kaggle b t push my-task -f benchmark.py2. Push a task and wait for creation to finish:
kaggle b t push my-task -f benchmark.py --wait3. Push a task and wait with a 60-second timeout, polling every 5 seconds:
kaggle b t push my-task -f benchmark.py --wait 60 --poll-interval 54. Push a task with Kaggle datasets attached:
kaggle b t push my-task -f benchmark.py -d kaggle/titanic -d user/my-dataset5. Push a task with datasets and wait:
kaggle b t push my-task -f benchmark.py --wait -d kaggle/titanicPurpose:
This command reads a .py file, converts it to a Jupyter notebook format, and uploads it to Kaggle as a benchmark task. If a task with the same slug already exists, a new version is created. The file is validated to ensure it contains a @task decorator matching the given task name.
On dataset attachment: When --kaggle-dataset / -d is specified, the listed datasets are attached to the task's underlying notebook kernel. During execution, they are accessible at /kaggle/input/<dataset-slug>/ by default, falling back to /kaggle/input/<owner>/<dataset-slug>/ in the event of a naming conflict. If you re-push without -d, all previously-attached datasets are detached (a warning is printed). To preserve datasets across pushes, re-specify them each time. If any specified dataset is invalid, non-existent, or inaccessible, the push command will fail with an error: Failed to push task: Failed to attach the following data sources (not found or inaccessible): <dataset>.
---
kaggle benchmarks tasks run
Runs a previously pushed task against one or more models.
Usage:
kaggle benchmarks tasks run <TASK> [options]Arguments:
* <TASK>: Task name (slug, e.g. my-task or owner/my-task).
Options:
* -m, --model <MODEL>: Model slug (e.g. gemini-2.5-pro) to run against. Repeat for multiple models (e.g. -m gemini-2.5-pro -m claude-sonnet-4). If omitted, an interactive model picker is displayed.
* --wait [TIMEOUT]: Wait for runs to complete. Optionally specify a timeout in seconds (0 or omit value = wait indefinitely).
* --poll-interval <SECONDS>: Maximum seconds between status polls (default: 60). Polling starts at 5s and increases by 50% each iteration until reaching this value.
* -v, --verbose: Enable verbose polling logs.
Examples:
1. Run a task with interactive model selection:
kaggle b t run my-task2. Run a task against specific models:
kaggle b t run my-task -m gemini-2.5-pro -m claude-sonnet-43. Run a task and wait for all runs to finish:
kaggle b t run my-task -m gemini-2.5-pro --waitPurpose:
This command schedules benchmark runs on the server. The task must be in a COMPLETED creation state before it can be run. If no models are specified, the CLI presents a paginated list of available models for interactive selection.
---
kaggle benchmarks tasks list
Lists benchmark tasks owned by the current user.
Usage:
kaggle benchmarks tasks list [options]Options:
* --name-regex <REGEX>: Filter task names by regular expression.
* --status <STATUS>: Filter tasks by creation status. Valid values: queued, running, completed, errored.
Examples:
1. List all your tasks:
kaggle b t list2. List only completed tasks whose names contain "gemini":
kaggle b t list --name-regex gemini --status completedPurpose:
Displays a table of your benchmark tasks showing the task slug, current version (or unset if unavailable), creation status, and creation timestamp.
---
kaggle benchmarks tasks status
Shows task details and per-model run status.
Usage:
kaggle benchmarks tasks status <TASK> [options]Arguments:
* <TASK>: Task name (slug, e.g. my-task or owner/my-task).
Options:
* -m, --model <MODEL>: Filter the run table to a specific model slug (e.g. gemini-2.5-pro). Repeat for multiple models.
Examples:
1. Show full status for a task:
kaggle b t status my-task2. Show status for another user's task:
kaggle b t status someuser/their-task3. Show status for specific models only:
kaggle b t status my-task -m gemini-2.5-proPurpose:
Prints the task's metadata (slug, creation status, creation time, URL) followed by a table of all runs. Each run row shows the model name, run state, start time, and end time. Any errored runs display their error messages below the table.
If task creation itself failed, the Status: line shows the failure kind — the cleaned creation-state enum, titlecased (e.g. Kernel_Without_Run, No_Model_Specified, Validation_Failed, Errored) — and an Error: line is appended below it with the server-provided creation_error_message explaining what went wrong.
---
kaggle benchmarks tasks download
Downloads output files for completed benchmark runs.
Usage:
kaggle benchmarks tasks download <TASK> [options]Arguments:
* <TASK>: Task name (slug, e.g. my-task or owner/my-task).
Options:
* -m, --model <MODEL>: Download outputs only for a specific model slug (e.g. gemini-2.5-pro). Repeat for multiple models.
* -o, --output <DIRECTORY>: Directory to download output files into (defaults to current working directory).
* -s, --include-source: Also download the kernel session's source notebooks.
* -f, --force: Force re-download of already completed runs, overwriting local files.
Examples:
1. Download all completed run outputs for a task:
kaggle b t download my-task2. Download outputs from another user's public task:
kaggle b t download someuser/their-task3. Download outputs for a specific model into a custom directory:
kaggle b t download my-task -m gemini-2.5-pro -o ./results4. Download outputs with source notebooks included:
kaggle b t download my-task --include-source5. Force re-download of previously downloaded runs:
kaggle b t download my-task --forcePurpose:
Downloads and extracts the output zip archive for each completed run. Files are organized in a hierarchical layout that includes the task's version number (or unset if unavailable):
<output>/<task>/<version>/<model>/<run_id>/
├── output files...Progress is rendered as a table with one row per run:
Model File Size Progress
──────────────────── ──────────────────────────────────────── ────────── ──────────
gemini-2.5-pro gemini-2.5-pro/12345/ 1.24MB Done
claude-sonnet-4 claude-sonnet-4/12346/ 2.10MB CachedThe Size column reports the extracted on-disk size of the run's output directory. The Progress column is one of Done (freshly downloaded), Cached (output directory already on disk from a previous download), or Bad zip (downloaded archive was corrupt).
Already-downloaded runs (where the output directory exists) are automatically skipped — they appear as Cached rows — unless the -f / --force flag is used, in which case they are overwritten.
When --include-source is used, the downloaded zip also contains the kernel session's source files (e.g., __notebook__.ipynb and __notebook_source__.ipynb).
If you re-run with -s after a previous download that omitted source notebooks, the cached directories are not re-fetched and the -s flag is effectively ignored. The CLI detects this and prints a tip after the summary:
Tip: 2 cached run(s) lack source notebooks. Re-run with -f -s to fetch them.Use -f -s together to force re-download and backfill the source notebooks into the cached runs.
---
kaggle benchmarks tasks log
Get execution logs for benchmark task run(s).
Usage:
kaggle benchmarks tasks log <TASK> [options]Arguments:
* <TASK>: Task name (slug, e.g. my-task or owner/my-task).
Options:
* -m, --model <MODEL>: Filter logs to a specific model slug (e.g. gemini-2.5-pro). Repeat for multiple models. If omitted, logs for all runs are shown.
Aliases: log, logs
Examples:
1. Show logs for all runs of a task:
kaggle b t log my-task2. Show logs for another user's task:
kaggle b t log someuser/their-task3. Show logs for a specific model's run(s):
kaggle b t log my-task -m gemini-2.5-pro4. Show logs for multiple models:
kaggle b t logs my-task -m gemini-2.5-pro -m claude-sonnet-4Purpose:
Fetches and displays execution logs for benchmark task runs. Each run's logs are printed with a structured header and footer for clear identification:
═══ Logs for gemini-2.5-pro (Run 123) [COMPLETED] ═══
<log output>
═══ (42 lines) ══════ Logs for claude-sonnet-4 (Run 456) [ERRORED] ═══
<log output>
═══ (18 lines) ═══
Showed logs for 2 run(s) across 2 model(s).
* Header: Shows model name, run ID, and run state (COMPLETED, ERRORED, RUNNING, etc.).
* Footer: Shows the line count for each run's log output.
* Summary: Printed at the end with total run and model counts.
The command handles two response types from the server:
* Active runs: Logs are streamed in real-time via Server-Sent Events (SSE).
* Completed runs: The persisted log file is returned and printed.
Concurrency & Streaming Order
When viewing logs for multiple concurrent model runs, the CLI processes and outputs them sequentially to prevent logs from interleaving and garbling your terminal output:
1. The CLI prints the header for the first model run in the queue.
2. If that run is currently active, the CLI blocks and streams its log output in real-time via SSE until it completes.
3. The log output for the next model run will only be printed once the previous model run's log stream finishes and closes.
4. Any model runs that complete in the background while you are watching the first stream will print instantly as completed persisted logs once their turn in the sequence is reached.
Model Slug Normalization
Benchmark model names are automatically normalized on both input and output. This makes it easy to pass various formats interchangeably while keeping displays and directories clean.
* Flexible Inputs: The CLI accepts model names in several formats:
* Canonical Slugs (recommended): gemini-2.5-pro or claude-sonnet-4
* With Provider Prefix: google/gemini-2.5-pro or anthropic/claude-sonnet-4
* With Version/Proxy @ symbols: anthropic/claude-haiku-4-5@20251001 or claude-sonnet-4-6@default
* Unified Normalization: The client automatically strips any provider prefix (e.g., google/ or anthropic/) and replaces @ characters with - to match the server's canonical database slug format.
* Clean Outputs:
* Status Display: Tables and error logs display the canonical, hyphenated slugs (e.g., claude-haiku-4-5-20251001 and gemini-2.0-flash-lite-001) for readability.
* Hierarchical Downloads: Run outputs are extracted into clean folders using the canonical slugs (e.g., ./<task>/<version>/claude-haiku-4-5-20251001/<run_id>/), with no @ or / symbols in folder names.
---
kaggle benchmarks tasks models
Lists all available benchmark models.
Usage:
kaggle benchmarks tasks modelsExample:
kaggle b t modelsPurpose:
Prints a table of all models available for benchmark runs, showing each model's slug and display name. This is useful for discovering valid model slugs to pass to run, status, or download commands.
---
kaggle benchmarks tasks delete
Removes a benchmark task.
Usage:
kaggle benchmarks tasks delete <TASK> [options]Arguments:
* <TASK>: Task name (slug, e.g. my-task or owner/my-task).
Options:
* -y, --yes: Automatically confirm deletion without prompting.
Example:
kaggle b t delete my-task -yPurpose:
Deletes a benchmark task and all associated runs. Note: This command is not yet supported by the server.
---
kaggle benchmarks tasks publish
Publishes a benchmark task, making it publicly visible. By default, the backing notebook is also published.
Usage:
kaggle benchmarks tasks publish <TASK> [options]Arguments:
*
<TASK>: Task name (slug, e.g. my-task or owner/my-task).Options:
*
--no-publish-backing-notebook: Do not publish the backing notebook (it is published by default).Examples:
1. Publish a task and its backing notebook (default):
kaggle b t publish my-task2. Publish a task without its backing notebook:
kaggle b t publish my-task --no-publish-backing-notebookPurpose:
This command changes the task's visibility from private to public. By default, the backing notebook (the kernel associated with the task) is also published. Use
--no-publish-backing-notebook to publish only the task metadata. Publishing is idempotent — re-publishing an already-public task prints a message and returns successfully. Unpublishing is not supported through this command.kaggle benchmarks topics list
Lists discussion topics for a benchmark.
Usage:
kaggle benchmarks topics list <BENCHMARK> [options]Arguments:
* <BENCHMARK>: Benchmark slug (e.g., kaggle/chess).
Options:
* --sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.
* -s, --search <SEARCH_TERM>: Search query to filter topics.
* --page-size <PAGE_SIZE>: Number of items per page.
* --page-token <PAGE_TOKEN>: Page token for pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
kaggle benchmarks topics list kaggle/chessPurpose:
This command lets you browse discussion topics for a specific benchmark.
kaggle benchmarks topics show
Displays a benchmark discussion topic with all comments in tree form.
Usage:
kaggle benchmarks topics show <TOPIC_REF> [options]Arguments:
* <TOPIC_REF>: A topic reference, which can be:
* <benchmark>/<topic-id> (e.g., kaggle/chess/614080 - note that this supports multi-slash benchmark slugs)
* <benchmark> <topic-id> (two separate arguments, where <topic-id> is passed as second argument)
* <topic-id> (bare numeric ID)
Options:
* --page-size <PAGE_SIZE>: Number of comments to show per page.
* --page-token <PAGE_TOKEN>: Page token for comment pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
kaggle benchmarks topics show kaggle/chess/614080Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
---
Competition Creation
Hosting a Competition from the CLI
This page documents the host-facing commands added in kaggle-cli for the new
public competition-creation API endpoints (kagglesdk 0.1.31+):
- kaggle competitions init
- kaggle competitions create
- kaggle competitions pages create
- kaggle competitions hosts
- kaggle competitions host-add
- kaggle competitions settings get
- kaggle competitions settings update
- kaggle competitions data update
- kaggle competitions solution create
- kaggle competitions solution status
- kaggle competitions launch
All of these commands require an authenticated session
(kaggle config set username/password or an API token).
A typical end-to-end host workflow looks like:
1. Scaffold a metadata file.
kaggle competitions init ./my-comp2. Edit ./my-comp/competition-metadata.json (fill in the INSERT_* placeholders).
3. Create the (unlaunched) competition.
kaggle competitions create -p ./my-comp
→ Competition created: https://www.kaggle.com/competitions/my-comp-slug
4. Author the description and rules pages.
kaggle competitions pages create my-comp-slug --name description -f ./description.md --publish
kaggle competitions pages create my-comp-slug --name rules -f ./rules.md --publish5. Update the competition data (train.csv, test.csv, sample_submission.csv, ...).
kaggle competitions data update my-comp-slug -p ./data -m "Initial release"6. Upload the private solution CSV, then poll until scoring is ready.
kaggle competitions solution create my-comp-slug -p ./solution.csv
kaggle competitions solution status my-comp-slug
→ Ready: true
7. Optionally tune host-only settings not covered by competition-metadata.json
(deadlines, runtime caps, leaderboard behavior, etc.).
kaggle competitions settings get my-comp-slug
kaggle competitions settings update my-comp-slug -f ./settings.json8. Launch the competition (now, or schedule a future UTC time).
kaggle competitions launch my-comp-slug --at 2027-01-01T00:00:00ZThese commands are independent — for example, you can call pages create
on a competition that already exists, or use launch on a competition created
via the host wizard.
---
kaggle competitions init
Writes a competition-metadata.json template into a folder.
Usage:
kaggle competitions init [folder]Arguments:
- folder (optional): Where to write competition-metadata.json. Defaults to
the current directory.
Example:
kaggle competitions init ./my-compThe generated file:
{
"title": "INSERT_TITLE_HERE",
"slug": "INSERT_SLUG_HERE",
"briefDescription": "INSERT_BRIEF_DESCRIPTION_HERE",
"privacy": "PUBLIC",
"disableKernels": false,
"hackathon": false,
"cloneCompetitionId": null,
"cloneExcludeCompetitionData": null,
"clonePageNames": null,
"licenseId": null,
"organizationId": null,
"numPrizes": null,
"restrictLinkToEmailList": null,
"reward": null
}See Metadata reference below for what each
field means.
---
kaggle competitions create
Creates a new competition from competition-metadata.json. The competition is
created in an unlaunched (staged) state — usekaggle competitions launch to publish it.
Usage:
kaggle competitions create [-p folder]Options:
- -p, --path <folder>: Folder containing competition-metadata.json. Defaults
to the current directory.
Example:
kaggle competitions create -p ./my-comp
→ Competition created: https://www.kaggle.com/competitions/my-comp-slug
Errors you might see:
- Default title detected, please update competition-metadata.json before creating
— you forgot to replace one of the INSERT_*_HERE placeholders.
- Invalid privacy '...' — privacy must be one of PUBLIC, LIMITED, PRIVATE.
- Metadata file not found: competition-metadata.json — run init first, or pass
-p pointing at the folder that contains the file.
Competition metadata reference
All fields go in competition-metadata.json (camelCase keys).
Required:
| Field | Type | Notes |
|---|---|---|
| title | string | Display title shown on the competition page. |
| slug | string | URL slug; lowercase, hyphens, must be unique site-wide and must not be all digits or all hyphens. |
| briefDescription | string | One-line subtitle under the title. |
| privacy | string | One of PUBLIC, LIMITED, PRIVATE. |
Optional:
| Field | Type | Notes |
|---|---|---|
| disableKernels | bool | If true, notebook submissions are disabled. |
| hackathon | bool | Create as a hackathon competition. |
| restrictLinkToEmailList | bool | Restrict invite-link joiners to a host-maintained allowlist. |
| cloneCompetitionId | int | If set, clone configuration / pages / data / evaluation setup from this competition. |
| cloneExcludeCompetitionData | bool | If cloning, skip copying the data (solution, sandbox submissions, images, databundles). |
| clonePageNames | string[] | If cloning, copy only these page names. Omit/null to copy all. |
| licenseId | int | License ID for the competition data. |
| organizationId | int | Tie this competition to an organization (read-only access for all org members). |
| numPrizes | int | Number of leaderboard prize positions. |
| reward | object | See below. |
reward object:
{
"id": "USD",
"quantity": 25000,
"clarification": "Total prize pool split across the top 5 teams."
}reward.id is one of: USD, KUDOS, AUD, EUR, JOBS, SWAG, GBP,KNOWLEDGE, PRIZES. clarification is optional free-form text shown next to
the prize.
---
kaggle competitions pages create
Creates a new page (description, rules, evaluation, data-description, etc.) on a
competition you host.
Usage:
kaggle competitions pages create <competition> --page-name <page-name> -f <path> \
[--mime-type <type>] [--post-title "<title>"] [--publish]Arguments:
- <competition>: The competition slug.
Options:
- --page-name <page-name> (required): Page name (e.g. description, rules,
evaluation, data-description, prizes). Conventional names are
recognized by the competition page UI; new names are allowed but won't be
shown in the standard tabs.
- -f, --file <path> (required): Path to a file whose contents become the page
body.
- --mime-type <type> (optional): MIME type of the content. Defaults to
text/html server-side.
- --post-title "<title>" (optional): Title shown above the page body.
Defaults to the page name.
- --publish (optional): Publish the page immediately. Without this flag the
page is created in a staged (unpublished) state so you can review it before
going live.
Example:
Create the rules page in a staged (not-yet-published) state.
kaggle competitions pages create my-comp --page-name rules -f ./rules.md \
--mime-type text/markdown --post-title "Competition Rules"When you're ready to make it visible to participants:
kaggle competitions pages update my-comp --page-name rules --publishEach page exists as a single record; --publish / --unpublish toggles its
visibility rather than creating separate draft and live copies. To swap in new
content later, usekaggle competitions pages update — a
second create for the same page name will be rejected.
You can list and inspect existing pages with kaggle competitions pages
(or the explicit kaggle competitions pages list), modify one in place withkaggle competitions pages update, or
remove one with kaggle competitions pages delete.
---
kaggle competitions pages update
Updates fields on an existing competition page. Only the flags you supply are
sent (the FieldMask is built from which arguments are non-default), so this is
also how you publish or unpublish a page in place.
Usage:
kaggle competitions pages update <competition> --page-name <current-name> \
[-f <path>] [--new-name <name>] [--mime-type <type>] \
[--post-title "<title>"] [--publish | --unpublish]Arguments:
- <competition>: The competition slug.
Options:
- --page-name <current-name> (required): The page's current name (used as the
identifier; rename via --new-name).
- -f, --file <path> (optional): Path to a file with the new page body.
- --new-name <name> (optional): Rename the page.
- --mime-type <type> (optional): New MIME type of the content.
- --post-title "<title>" (optional): New title shown above the page content.
- --publish / --unpublish (optional, mutually exclusive): Publish or
unpublish the page.
At least one update flag is required.
Examples:
Publish a staged page without changing its content.
kaggle competitions pages update my-comp --page-name rules --publishSwap in new content and update the visible title in one call.
kaggle competitions pages update my-comp --page-name rules \
-f ./rules-v2.md --post-title "Competition Rules (v2)"Rename a page.
kaggle competitions pages update my-comp --page-name evaluation \
--new-name scoringNote: a small set of pages is reserved by the backend and cannot be
renamed; attempting to rename one returns an error from the server.
---
kaggle competitions pages delete
Deletes a page from a competition you host. Prompts for confirmation unless-y/--yes is passed (matches the existing kaggle datasets delete /kaggle kernels delete patterns).
Usage:
kaggle competitions pages delete <competition> --page-name <name> [-y]Arguments:
- <competition>: The competition slug.
Options:
- --page-name <name> (required): Name of the page to delete.
- -y, --yes (optional): Skip the confirmation prompt — useful for scripts.
Examples:
Interactive: prompts "Are you sure you want to delete the page 'faq' ...?"
kaggle competitions pages delete my-comp --page-name faqScripted: skip the prompt.
kaggle competitions pages delete my-comp --page-name faq -yNote: a small set of pages is protected by the backend and cannot be
deleted; attempting to delete one returns an error from the server.
Deletion is not recoverable — there is no "undelete". List pages first withkaggle competitions pages list <competition> if you're unsure of the name.
---
kaggle competitions hosts
Lists the hosts (users with host access) for a competition. Useful for
confirming who can edit settings, upload data, or launch — especially after
adding or removing collaborators via the web UI.
Usage:
kaggle competitions hosts <competition> [-v | --format json]Arguments:
- <competition>: The competition slug.
Examples:
Table output.
kaggle competitions hosts my-compCSV — useful for piping into other tools.
kaggle competitions hosts my-comp -vJSON.
kaggle competitions hosts my-comp --format jsonOutput columns: userName, displayName, id, profileUrl.
---
kaggle competitions host-add
Grants host access on a competition you host to another Kaggle user. Hosts can
edit settings, upload data, and launch the competition, so you are asked to
confirm before the change is made.
Usage:
kaggle competitions host-add <competition> -u <user> [-y]Arguments:
- <competition>: The competition slug.
Options:
- -u, --user <USER>: Kaggle user name (URL slug, e.g. kerneler) of the user
to add as a host. Required.
- -y, --yes: Skip the confirmation prompt.
- -q, --quiet: Suppress the "Using competition" message.
Examples:
Prompts for confirmation before granting access.
kaggle competitions host-add my-comp -u aliceSkip the prompt (for scripts).
kaggle competitions host-add my-comp -u alice -yVerify the result with kaggle competitions hosts my-comp.
Note: This command is namedhost-addrather thanhosts addbecause
hosts takes the competition as a positional argument, and argparse cannotdistinguish a competition slug from a subcommand name.
---
kaggle competitions settings get
Shows the unified settings blob for a competition you host — the same set of
fields the "Settings" tab exposes in the web UI, covering general info,
access & teams, key dates, submissions & leaderboard behavior, code
competition parameters, and host attribution.
By default the output is grouped by UI section and hides fields left at their
type default (unset strings, false booleans, zero ints). Pass --json for
the raw blob (camelCase keys, matching the update payload format).
Usage:
kaggle competitions settings get <competition> [--json]Arguments:
- <competition>: The competition slug.
Examples:
Grouped, human-readable summary.
kaggle competitions settings get my-compMachine-readable dump — pipe into jq, or save + edit + feed back to update.
kaggle competitions settings get my-comp --json > settings.json---
kaggle competitions settings update
Applies a partial update to a competition's settings. You author a JSON or
YAML file containing only the fields you want to change; the CLI builds the
server-side FieldMask from the keys present in the file, so unspecified
fields are left alone.
The typical loop is:
1. kaggle competitions settings get my-comp --json > settings.json — pull
the current values.
2. Edit the file down to just the fields you want to change (delete the rest).
3. kaggle competitions settings update my-comp -f ./settings.json.
Usage:
kaggle competitions settings update <competition> -f <path> [--json]Arguments:
- <competition>: The competition slug.
Options:
- -f, --from-file <path> (required): JSON or YAML file with the fields to
update. Extension picks the parser (.yaml/.yml → YAML, anything else →
JSON). Keys may be snake_case (matches the SDK) or camelCase (matches
the --json output of settings get).
- --json (optional): After the update, print the returned settings as JSON
instead of the grouped text view.
Examples:
Toggle a single boolean:
// disable-leaderboard.json
{ "has_leaderboard": false }kaggle competitions settings update my-comp -f ./disable-leaderboard.jsonSet the competition deadline:
// deadline.json
{ "deadline": "2027-02-01T23:59:00Z" }kaggle competitions settings update my-comp -f ./deadline.jsonBump the code-competition runtime caps and set the competition and team-merger
deadlines (YAML, mixing types):
tune.yaml
max_cpu_runtime_minutes: 540
max_gpu_runtime_minutes: 720
deadline: 2027-02-01T23:59:00Z
team_merger_explicit_deadline: 2027-01-15T00:00:00Z
rules_required: truekaggle competitions settings update my-comp -f ./tune.yamlType notes:
- Booleans → JSON true/false (or YAML equivalents).
- Numeric fields → plain numbers (240, 1.5).
- Datetime fields → ISO-8601 strings ("2027-01-01T00:00:00Z" or with an
explicit offset).
- Enum fields (host_segment, publicly_cloneable) → the enum member name
as a string; either the full name ("HOST_SEGMENT_FEATURED") or the short
suffix ("FEATURED") works.
Common errors:
- Unknown competition setting: '<name>' — the field name isn't in
CompetitionSettings. Check settings get --json for the exact keys.
- Field '<name>' expects a bool, got str — the file has a string where a
boolean is required (e.g. "true" instead of true).
- not a valid HostSegment. Allowed: ... — the enum value you passed isn't
a member; the error lists the accepted names.
- Some settings are gated to Kaggle admins (marked "ADMIN ONLY" in the
proto — e.g. host_segment, directly_responsible_user_id) and the server
will reject writes to them for non-admin hosts.
---
kaggle competitions launch
Launches a competition you host. Without --at, the competition is launched
immediately. With --at, the backend schedules the launch for the given UTC
instant.
Usage:
kaggle competitions launch <competition> [--at <ISO-8601 UTC>]Arguments:
- <competition>: The competition slug.
Options:
- --at <iso>: Schedule launch for a future UTC time. Accepts ISO-8601
(e.g. 2027-01-01T00:00:00Z or 2027-01-01T00:00:00+00:00). The competition
is launched immediately if omitted.
Examples:
Launch right now.
kaggle competitions launch my-compSchedule the launch for midnight UTC on 2027-01-01.
kaggle competitions launch my-comp --at 2027-01-01T00:00:00ZA competition can only be launched once. Subsequent calls will be rejected by
the backend.
---
kaggle competitions data update
Creates a new version of the data files for a competition you host. Uploads
via the standard blob-upload pipeline, then sends a single request bundling
the uploaded tokens. Each update replaces the prior version's file set in
full — there is no per-file "keep from previous" mode in v1, so list every
file you want in the new version.
Usage:
kaggle competitions data update <competition> -p <path> -m "<version notes>" \
[--rerun] [--include-hidden] [--ignore-patterns <patterns>]Arguments:
- <competition>: The competition slug.
Options:
- -p, --path <path> (required): Either a directory (walked recursively —
every file becomes an upload with its relative path preserved in the API's
name field, e.g. train/images/img1.jpg), or a single archive file
(e.g. a pre-packed .zip or .tar) uploaded as-is. Sub-directories are
always traversed; hidden entries (see --include-hidden) are the only files
skipped by default.
- -m, --message "<notes>" (required): Notes describing this version
(e.g. "Added test set").
- --rerun (optional): Update the RERUN databundle — the private host-only
data swapped in during rerun scoring. Requires Kaggle admin access for now.
Without this flag, the update targets the PUBLIC databundle (what
participants download).
- --include-hidden (optional): Upload hidden files and traverse hidden
sub-directories (names starting with . — e.g. .DS_Store, .git/,
.gitignore). Skipped by default so you don't accidentally publish OS
metadata or version-control detritus.
- --ignore-patterns <patterns> (optional): Patterns to ignore when uploading files/dirs. Can be specified multiple times. Note that default ignore patterns (like .git/, .cache/, .huggingface/) are bypassed when --include-hidden is True.
Examples:
Update using a directory tree (recurses into sub-folders).
kaggle competitions data update my-comp -p ./data -m "Initial release"Update using a pre-packed archive as a single file (useful when you already
need a zip for other purposes, or for directory-shaped file formats like
Zarr).
kaggle competitions data update my-comp -p ./data.zip -m "Initial release"New version with a bug-fix.
kaggle competitions data update my-comp -p ./data -m "Fix label encoding in train.csv"Update the private rerun-scoring data.
kaggle competitions data update my-comp -p ./rerun-data \
-m "Held-out test set" --rerunA note on directory-shaped file formats: some formats (Zarr, some
TensorFlow SavedModel layouts, etc.) are on-disk directories that are logically
a single unit. If you pass a directory containing such a format, the recursive
walk uploads each internal chunk as its own file — often what you want for
Zarr, since participants can then stream individual chunks. If you'd rather
keep the format as an opaque single upload, pre-pack it into a .zip or.tar and pass that file to -p instead.
The command prints the public URL plus the new databundle_id anddatabundle_version_id on success.
---
kaggle competitions solution create
Uploads the private solution CSV for a competition you host. The solution is
what the backend scores submissions against — one row per row in the sample
submission, with the same column shape. After uploading, the backend runs
preprocessing / sampling; pollkaggle competitions solution status
until it's ready before opening submissions.
The file is uploaded via the standard blob-upload pipeline, then the resulting
token is passed to CreateCompetitionSolution.
Usage:
kaggle competitions solution create <competition> -p <path> [-q]Arguments:
- <competition>: The competition slug.
Options:
- -p, --path <path> (required): Path to a single CSV file. Must be a single
file — directories are rejected. The CSV shape must match a submission
file (same columns as sample_submission.csv).
- -q, --quiet (optional): Suppress per-file upload progress lines.
Example:
kaggle competitions solution create my-comp -p ./solution.csv
→ Solution uploaded for "my-comp". Run 'kaggle competitions solution status my-comp' to check readiness.
Re-uploading a solution replaces the prior one. Note that this only works
pre-launch; after launch the solution file is frozen.
---
kaggle competitions solution status
Shows the setup status for a competition's solution file — whether
preprocessing/sampling has finished, any errors reported by the backend, and
(for legacy C# metrics) the auto-inferred column mapping and required metric
columns.
Poll this after solution create (and after data update — some setup steps
run against the databundle) until Ready: true. If Setup error: is set,
stop polling and fix the underlying issue.
Usage:
kaggle competitions solution status <competition> [--json]Arguments:
- <competition>: The competition slug.
Options:
- --json (optional): Emit the raw status as JSON instead of the
human-readable view.
Examples:
Human-readable summary.
kaggle competitions solution status my-comp
→ Ready: true
Solution file: solution.csv — 12.3KB — uploaded 2027-01-01T00:00:00+00:00
total=1000, public=300, private=700
Machine-readable — useful in a polling loop.
kaggle competitions solution status my-comp --jsonFields you might see (human view):
- Ready: true|false — whether scoring is unblocked.
- Setup error: <msg> — populated if preprocessing failed. Surfaced
prominently; stop polling when it appears.
- Kernels metric: true — the competition's scoring metric is a Kernels
metric. Kernels metrics auto-detect their column mapping; the host only
needs to wait for Ready to flip true.
- Row ID column: <name> — for Kernels metrics, the auto-detected row-id
column.
- Solution file: <name> — <size> — uploaded <timestamp> and
total=..., public=..., private=... — solution file metadata once the
upload is processed.
- Column mapping: — for legacy C# metrics, the current mapping from metric
column name to CSV column name.
- Required columns: — for legacy C# metrics, the metric column slots the
host needs to fill (name + expected data type).
---
Competitions
Competitions Commands
Commands for interacting with Kaggle competitions.
For tutorials on how to submit to competitions :
* How to Submit to a Competition
* How to Submit to a Code Competition
kaggle competitions list
Lists available competitions.
Usage:
kaggle competitions list [options]Options:
* --group <GROUP>: Filter by competition group. Valid options: general, entered, inClass.
* --category <CATEGORY>: Filter by competition category. Valid options: all, featured, research, recruitment, gettingStarted, masters, playground.
* --sort-by <SORT_BY>: Sort results. Valid options: grouped, prize, earliestDeadline, latestDeadline, numberOfTeams, recentlyCreated (default: latestDeadline).
* -p, --page <PAGE>: Page number for results (default: 1).
* -s, --search <SEARCH_TERM>: Search term.
* -v, --csv: Print results in CSV format.
* --format: Output format (csv, table, json, or a field projection). See output_format.md.
Output columns:
ref, deadline, category, reward, teamCount, userHasEntered, userRank
userRank is your public leaderboard position when you have entered the competition. It is 0 when you have not entered, or when no public rank is available yet.
Example:
List featured competitions in the general group, sorted by prize:
kaggle competitions list --group general --category featured --sort-by prizeList entered competitions with rank in CSV format:
kaggle competitions list --group entered -vPurpose:
This command helps you discover new competitions or find specific ones based on various criteria. Use --group entered to see your rank across competitions you have joined.
kaggle competitions files
Lists files for a specific competition.
Usage:
kaggle competitions files <COMPETITION> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., titanic).
Options:
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
* --page-token <PAGE_TOKEN>: Page token for results paging.
* --page-size <PAGE_SIZE>: Number of items to show on a page (default: 20, max: 200).
Example:
List the first 3 files for the "titanic" competition in CSV format, quietly:
kaggle competitions files titanic --page-size=3 -v -qPurpose:
Use this command to see the data files available for a competition before downloading them.
kaggle competitions download
Downloads competition files.
Usage:
kaggle competitions download <COMPETITION> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., titanic).
Options:
* -f, --file <FILE_NAME>: Specific file to download (downloads all if not specified).
* -p, --path <PATH>: Folder to download files to (defaults to current directory).
* -w, --wp: Download files to the current working path (equivalent to -p .).
* -o, --force: Force download, overwriting existing files.
* -q, --quiet: Suppress verbose output.
Examples:
1. Download all files for the "titanic" competition to the current directory, overwriting existing files, quietly:
kaggle competitions download titanic -w -o -q2. Download the test.csv file from the "titanic" competition to a folder named tost:
kaggle competitions download titanic -f test.csv -p tostPurpose:
This command allows you to get the necessary data files for a competition onto your local machine.
kaggle competitions submit
Makes a new submission to a competition.
Usage:
kaggle competitions submit <COMPETITION> -f <FILE_NAME> -m <MESSAGE> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., house-prices-advanced-regression-techniques).
* -f, --file <FILE_NAME>: The submission file.
* -m, --message <MESSAGE>: The submission message.
Options:
* -k, --kernel <KERNEL>: Name of the kernel (notebook) to submit (for code competitions).
* -v, --version <VERSION>: Version of the kernel to submit (e.g. 2).
* -q, --quiet: Suppress verbose output.
* --sandbox: Mark submission as a sandbox submission (competition hosts/admins only).
* --wait [SECONDS]: Wait for the submission to finish scoring, printing the public score when done. Optionally pass a timeout in seconds (0 or no value = wait up to 12 hours, the maximum notebook runtime). Exits non-zero if scoring fails or the timeout is reached.
* --poll-interval <SECONDS>: Maximum seconds between status polls while waiting (default: 60, minimum: 5). Polling starts at 5s and increases automatically.
On a successful submission the command prints the numeric submission ref, e.g. Submission ref: 12345678. You can look that submission up later with kaggle competitions submission.
Example: Standard (not code) competition:
Submit sample_submission.csv to the "house-prices-advanced-regression-techniques" competition with the message "Test message":
kaggle competitions submit house-prices-advanced-regression-techniques -f sample_submission.csv -m "Test message"Example: Code competition:
Submit the submission.csv produced by version 3 of your <YOUR_USERNAME>/rsna-submission for the rsna-2024-lumbar-spine-degenerative-classification competition:
kaggle competitions submit rsna-2024-lumbar-spine-degenerative-classification -f submission.csv -k <YOUR_USERNAME>/rsna-submission -v 3 -m "Test message"Example: Submit and wait for the score (useful in CI):
Submit and block until scoring finishes (up to a 10-minute timeout), then print the public score:
kaggle competitions submit house-prices-advanced-regression-techniques -f sample_submission.csv -m "CI run" --wait 600The command exits 0 once the submission is scored and non-zero if scoring fails or the timeout is reached, so it can gate a pipeline.
Purpose:
Use this command to upload your predictions or code to a competition for scoring.
kaggle competitions submission
Shows the status and score of a single submission by its numeric ref (as printed by kaggle competitions submit).
Usage:
kaggle competitions submission <SUBMISSION_REF>Arguments:
* <SUBMISSION_REF>: The numeric submission ref printed by kaggle competitions submit.
Example:
kaggle competitions submission 12345678Output:
Submission Ref: 12345678
Status: COMPLETE
Public Score: 0.98765
Private Score:
Description: Test message
Submission Date: 2026-07-19 12:00:00Purpose:
Use this command to check whether a submission has finished scoring and to read its public score — for example, after submitting without --wait, or from a script polling for results.
kaggle competitions submissions
Shows your past submissions for a competition.
Usage:
kaggle competitions submissions <COMPETITION> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., house-prices-advanced-regression-techniques).
Options:
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
Show submissions for "house-prices-advanced-regression-techniques" in CSV format, quietly:
kaggle competitions submissions house-prices-advanced-regression-techniques -v -qPurpose:
This command allows you to review your previous submission attempts and their scores.
kaggle competitions submission-download
Downloads the submitted file for a single submission by its numeric id.
Usage:
kaggle competitions submission-download <SUBMISSION_ID> [options]Arguments:
* <SUBMISSION_ID>: The numeric submission id printed by kaggle competitions submit, or listed by kaggle competitions submissions <COMPETITION>.
Options:
* -p, --path <PATH>: Folder to download the file to. Defaults to the current working directory's Kaggle download location.
* -o, --force: Download even if a local copy already exists (skips the up-to-date check).
* -q, --quiet: Suppress verbose output.
Example:
Download the file for submission 12345678 into ./subs:
kaggle competitions submission-download 12345678 -p ./subsPurpose:
Use this command to retrieve the exact file you (or a teammate) submitted — for example, to inspect an old submission or reproduce a scored result.
kaggle competitions leaderboard
Gets competition leaderboard information.
Usage:
kaggle competitions leaderboard <COMPETITION> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., titanic).
Options:
* -s, --show: Show the top of the leaderboard in the console.
* -d, --download: Download the entire leaderboard to a CSV file.
* -p, --path <PATH>: Folder to download the leaderboard to (if -d is used).
* -v, --csv: Print results in CSV format (used with -s).
* -q, --quiet: Suppress verbose output.
Examples:
1. Download the "titanic" leaderboard to a folder named leaders, quietly:
kaggle competitions leaderboard titanic -d -p leaders -q2. Download the leaderboard and save it to leaderboard.txt:
kaggle competitions leaderboard titanic > leaderboard.txtPurpose:
This command lets you view your ranking and the scores of other participants in a competition.
kaggle competitions topics list
Lists discussion topics for a competition.
Usage:
kaggle competitions topics list [COMPETITION] [options]Note: kaggle competitions topics (without list subcommand) is supported as a shortcut to list topics for the default competition (configured via kaggle config set competition).
Arguments:
* [COMPETITION]: Competition URL suffix (e.g., titanic). Optional if default competition is configured.
Options:
* -s, --sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.
* --search <SEARCH>: Search query to filter topics.
* --page-size <PAGE_SIZE>: Number of items to show on a page. Default is 20, max is 200.
* --page-token <PAGE_TOKEN>: Page token for results paging.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
List discussion topics for the "titanic" competition sorted by most recent:
kaggle competitions topics list titanic -s recentPurpose:
This command lets you browse discussion topics for a specific competition.
kaggle competitions topics show
Displays a competition discussion topic with all comments in tree form.
Usage:
kaggle competitions topics show <TOPIC_REF> [options]Arguments:
* <TOPIC_REF>: A topic reference, which can be:
* <competition>/<topic-id> (e.g., titanic/12345)
* <competition> <topic-id> (two separate arguments, where <topic-id> is passed as second argument)
* <topic-id> (bare numeric ID)
Options:
* --page-size <PAGE_SIZE>: Number of comments to show per page.
* --page-token <PAGE_TOKEN>: Page token for comment pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
Show topic 12345 from the "titanic" competition:
kaggle competitions topics show titanic/12345Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
kaggle competitions topic-messages
Lists messages within a competition discussion topic.
Deprecated: This command is deprecated in favor of kaggle competitions topics show. It will be removed in a future release.Usage:
kaggle competitions topic-messages <COMPETITION> <TOPIC_ID> [options]Arguments:
* <COMPETITION>: Competition URL suffix (e.g., titanic).
* <TOPIC_ID>: The discussion topic id.
Options:
* -s, --sort-by <SORT_BY>: Sort order. Valid options: best, new, old.
* -n, --page-size <PAGE_SIZE>: Max top-level messages to return; -1 for all.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
List all messages for topic 12345 in the "titanic" competition, sorted by newest first:
kaggle competitions topic-messages titanic 12345 -s new -n -1Purpose:
This command displays the messages within a specific competition discussion topic.
---
Configuration
Kaggle CLI Configuration
The Kaggle CLI uses a configuration file to store settings such as your API credentials and default values for commands.
Configuration Commands
config view
Displays the current configuration values.
Usage:
kaggle config viewPurpose:
This command allows you to inspect the current settings of your Kaggle CLI, such as the configured API endpoint, proxy settings, and default competition.
config set
Sets a specific configuration value.
Usage:
kaggle config set -n <NAME> -v <VALUE>Arguments:
* -n, --name <NAME>: The name of the configuration parameter to set. Valid options are competition, path, and proxy.
* -v, --value <VALUE>: The value to set for the configuration parameter.
* For competition: The competition URL suffix (e.g., titanic).
* For path: The default folder where files will be downloaded.
* For proxy: The proxy server URL.
Example:
Set the default competition to "titanic":
kaggle config set -n competition -v titanicPurpose:
Use this command to customize the behavior of the Kaggle CLI, such as setting a default competition to avoid specifying it in every command, defining a default download path, or configuring a proxy server.
config unset
Clears a specific configuration value, reverting it to its default.
Usage:
kaggle config unset -n <NAME>Arguments:
* -n, --name <NAME>: The name of the configuration parameter to clear. Valid options are competition, path, and proxy.
Example:
Clear the default competition:
kaggle config unset -n competitionPurpose:
This command removes a previously set configuration value, allowing the CLI to use its default behavior or prompt for the value if required.
Configuration File Location
The Kaggle CLI configuration is typically stored in a file named kaggle.json located in the ~/.kaggle/ directory on Linux and macOS, or C:\Users\<Windows-username>\.kaggle\ on Windows.
This file contains your API username and key:
{"username":"YOUR_USERNAME","key":"YOUR_API_KEY"}You can download this file from your Kaggle account page (https://www.kaggle.com/<YOUR_USERNAME>/account) and place it in the correct directory.
Alternatively, you can set the KAGGLE_USERNAME and KAGGLE_KEY environment variables.
---
Datasets
Datasets Commands
Commands for interacting with Kaggle datasets.
kaggle datasets list
Lists available datasets.
Usage:
kaggle datasets list [options]Options:
* --sort-by <SORT_BY>: Sort results. Valid options: hottest, votes, updated, active (default: hottest).
* --size <SIZE_CATEGORY>: DEPRECATED. Use --min-size and --max-size.
* --file-type <FILE_TYPE>: Filter by file type. Valid options: all, csv, sqlite, json, bigQuery.
* --license <LICENSE_NAME>: Filter by license. Valid options: all, cc, gpl, odb, other.
* --tags <TAG_IDS>: Filter by tags (comma-separated tag IDs).
* -s, --search <SEARCH_TERM>: Search term.
* -m, --mine: Display only your datasets.
* --user <USER>: Filter by a specific user or organization.
* -p, --page <PAGE>: Page number for results (default: 1).
* -v, --csv: Print results in CSV format.
* --max-size <BYTES>: Maximum dataset size in bytes.
* --min-size <BYTES>: Minimum dataset size in bytes.
Examples:
1. List your own datasets:
kaggle datasets list -m2. List CSV datasets, page 2, sorted by last updated, containing "student" in their title, with size between 13000 and 15000 bytes:
kaggle datasets list --file-type csv --page 2 --sort-by updated -s student --min-size 13000 --max-size 150003. List datasets with an ODB license, tagged with "internet", and matching the search term "telco":
kaggle datasets list --license odb --tags internet --search telcoPurpose:
This command helps you find datasets on Kaggle based on various criteria like owner, file type, tags, and size.
kaggle datasets files
Lists files for a specific dataset.
Usage:
kaggle datasets files <DATASET> [options]Arguments:
* <DATASET>: Dataset URL suffix in the format owner/dataset-name (e.g., kerneler/brazilian-bird-observation-metadata-from-wikiaves).
Options:
* -v, --csv: Print results in CSV format.
* --page-token <PAGE_TOKEN>: Page token for results paging.
* --page-size <PAGE_SIZE>: Number of items to show on a page (default: 20, max: 200).
Example:
List the first 7 files for the dataset kerneler/brazilian-bird-observation-metadata-from-wikiaves:
kaggle datasets files kerneler/brazilian-bird-observation-metadata-from-wikiaves --page-size=7Purpose:
Use this command to see the individual files within a dataset before downloading.
kaggle datasets download
Downloads dataset files.
Usage:
kaggle datasets download <DATASET> [options]Arguments:
* <DATASET>: Dataset URL suffix (e.g., willianoliveiragibin/pixar-films).
Options:
* -f, --file <FILE_NAME>: Specific file to download (downloads all if not specified).
* -p, --path <PATH>: Folder to download files to (defaults to current directory).
* -w, --wp: Download files to the current working path.
* --unzip: Unzip the downloaded file (deletes the .zip file afterwards).
* -o, --force: Force download, overwriting existing files.
* -q, --quiet: Suppress verbose output.
Examples:
1. Download all files for the dataset willianoliveiragibin/pixar-films:
kaggle datasets download -d willianoliveiragibin/pixar-films2. Download the dataset goefft/public-datasets-with-file-types-and-columns, unzip it into the tmp folder, overwriting if necessary, and suppress output:
kaggle datasets download goefft/public-datasets-with-file-types-and-columns -p tmp --unzip -o -q3. Download the specific file dataset_results.csv from goefft/public-datasets-with-file-types-and-columns to the current working directory, quietly, and force overwrite:
kaggle datasets download goefft/public-datasets-with-file-types-and-columns -f dataset_results.csv -w -q -oPurpose:
This command allows you to retrieve dataset files for local use.
kaggle datasets init
Initializes a metadata file (dataset-metadata.json) for creating a new dataset. See metadata file format.
Usage:
kaggle datasets init -p <FOLDER_PATH>Options:
* -p, --path <FOLDER_PATH>: The path to the folder where the dataset-metadata.json file will be created (defaults to the current directory).
Example:
Initialize a dataset metadata file in the tests/dataset folder:
kaggle datasets init -p tests/datasetPurpose:
This command creates a template dataset-metadata.json file that you need to edit before creating a new dataset on Kaggle. This file contains information like the dataset title, ID (slug), and licenses.
kaggle datasets create
Creates a new dataset on Kaggle.
Usage:
kaggle datasets create -p <FOLDER_PATH> [options]Options:
* -p, --path <FOLDER_PATH>: Path to the folder containing the data files and the dataset-metadata.json file (defaults to the current directory).
* -u, --public: Make the dataset public (default is private).
* -q, --quiet: Suppress verbose output.
* -t, --keep-tabular: Do not convert tabular files to CSV (default is to convert).
* -r, --dir-mode <MODE>: How to handle directories: skip (ignore), zip (compressed upload), tar (uncompressed upload) (default: skip).
* --ignore-patterns <PATTERNS>: Patterns of files/dirs to ignore. Can be specified multiple times.
Example:
Create a new public dataset from the files in tests/dataset, quietly, without converting tabular files, and skipping subdirectories. (Assumes dataset-metadata.json in tests/dataset has been properly edited with title and slug):
Example: Edit dataset-metadata.json first
sed -i 's/INSERT_TITLE_HERE/My Dataset Title/' tests/dataset/dataset-metadata.json
sed -i 's/INSERT_SLUG_HERE/my-dataset-slug/' tests/dataset/dataset-metadata.json
kaggle datasets create -p tests/dataset --public -q -t -r skip
Purpose:
This command uploads your local data files and the associated metadata to create a new dataset on Kaggle.
kaggle datasets version
Creates a new version of an existing dataset.
Usage:
kaggle datasets version -p <FOLDER_PATH> -m <VERSION_NOTES> [options]Options:
* -p, --path <FOLDER_PATH>: Path to the folder containing the updated data files and dataset-metadata.json (defaults to current directory).
* -m, --message <VERSION_NOTES>: (Required) Message describing the new version.
* -q, --quiet: Suppress verbose output.
* -t, --keep-tabular: Do not convert tabular files to CSV.
* -r, --dir-mode <MODE>: Directory handling mode (skip, zip, tar).
* -d, --delete-old-versions: Delete old versions of this dataset.
* --ignore-patterns <PATTERNS>: Patterns of files/dirs to ignore. Can be specified multiple times.
Example:
Create a new version of a dataset using files from tests/dataset with version notes "Updated data", quietly, keeping tabular formats, skipping directories, and deleting old versions:
kaggle datasets version -m "Updated data" -p tests/dataset -q -t -r skip -dPurpose:
Use this command to update an existing dataset with new files or metadata changes.
kaggle datasets metadata
Downloads metadata for a dataset or updates existing from local metadata.
Usage:
kaggle datasets metadata <DATASET> [options]Arguments:
* <DATASET>: Dataset URL suffix (e.g., goefft/public-datasets-with-file-types-and-columns).
Options:
* -p, --path <PATH>: Directory to download/update metadata file (dataset-metadata.json). Defaults to current working directory.
* --update: Update the existing dataset version's metadata using the contents of the local metadata JSON file. (e.g. "push" from local)
Example:
Download metadata for the dataset goefft/public-datasets-with-file-types-and-columns into the tests/dataset folder:
kaggle datasets metadata goefft/public-datasets-with-file-types-and-columns -p tests/datasetPurpose:
This command allows you to fetch the dataset-metadata.json file for an existing dataset, which can be useful for inspection or as a template for creating a new version.
kaggle datasets status
Gets the creation status of a dataset.
Usage:
kaggle datasets status <DATASET>Arguments:
* <DATASET>: Dataset URL suffix (e.g., goefft/public-datasets-with-file-types-and-columns).
Example:
Get the status of the dataset goefft/public-datasets-with-file-types-and-columns:
kaggle datasets status goefft/public-datasets-with-file-types-and-columnsPurpose:
After creating or updating a dataset, this command helps you check if the process was successful or if there were any issues.
kaggle datasets delete
Deletes a dataset from Kaggle.
Usage:
kaggle datasets delete <DATASET> [options]Arguments:
* <DATASET>: Dataset URL suffix (e.g., username/dataset-slug).
Options:
* -y, --yes: Automatically confirm deletion without prompting.
Example:
Delete the dataset username/dataset-slug and automatically confirm:
kaggle datasets delete username/dataset-slug --yesPurpose:
This command permanently removes one of your datasets from Kaggle. Use with caution.
kaggle datasets topics list
Lists discussion topics for a dataset.
Usage:
kaggle datasets topics list <DATASET> [options]Arguments:
* <DATASET>: Dataset ref in format <owner>/<dataset-slug> (e.g., zillow/zecon).
Options:
* --sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.
* -s, --search <SEARCH_TERM>: Search query to filter topics.
* --page-size <PAGE_SIZE>: Number of items per page.
* --page-token <PAGE_TOKEN>: Page token for pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
List recent topics for the zillow/zecon dataset:
kaggle datasets topics list zillow/zecon --sort-by recentPurpose:
This command lets you browse discussion topics for a specific dataset.
kaggle datasets topics show
Displays a dataset discussion topic with all comments in tree form.
Usage:
kaggle datasets topics show <TOPIC_REF> [options]Arguments:
* <TOPIC_REF>: A topic reference, which can be:
* <dataset>/<topic-id> (e.g., zillow/zecon/12345 - note that this supports multi-slash dataset slugs)
* <dataset> <topic-id> (two separate arguments, where <topic-id> is passed as second argument)
* <topic-id> (bare numeric ID)
Options:
* --page-size <PAGE_SIZE>: Number of comments to show per page.
* --page-token <PAGE_TOKEN>: Page token for comment pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.
Example:
kaggle datasets topics show zillow/zecon/12345Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
---
Datasets Metadata
The Kaggle API follows the Data Package specification for specifying metadata when creating new Datasets and Dataset versions. Next to your files, you have to put a special dataset-metadata.json file in your upload folder alongside the files for each new Dataset (version).
Here's a basic example for dataset-metadata.json:
``
`
{
"title": "My Awesome Dataset",
"id": "timoboz/my-awesome-dataset",
"licenses": [{"name": "CC0-1.0"}]
}
kaggle datasets init -p /path/to/dataset
You can also use the API command to have the API create this file for you.
`
Here's an example containing file metadata:
`
{
"title": "My Awesome Dataset",
"subtitle": "My awesomer subtitle",
"description": "My awesomest description",
"id": "timoboz/my-awesome-dataset",
"id_no": 12345,
"licenses": [{"name": "CC0-1.0"}],
"resources": [
{
"path": "my-awesome-data.csv",
"description": "This is my awesome data!",
"schema": {
"fields": [
{
"name": "StringField",
"description": "String field description",
"type": "string"
},
{
"name": "NumberField",
"description": "Number field description",
"type": "number"
},
{
"name": "DateTimeField",
"description": "Date time field description",
"type": "datetime"
}
]
}
},
{
"path": "my-awesome-extra-file.txt",
"description": "This is my awesome extra file!"
}
],
"keywords": [
"beginner",
"tutorial"
],
"expectedUpdateFrequency": "monthly",
"userSpecifiedSources": "World Bank and OECD (link)",
"image": "relative/path/to/new/image.png"
}
kaggle datasets create
Contents
The following metadata is currently supported:
* (create a new Dataset):
title
* : Title of the dataset, must be between 6 and 50 characters in length.
subtitle
* : Subtitle of the dataset, must be between 20 and 80 characters in length.
description
* : Description of the dataset.
id
* : The URL slug of your new dataset, a combination of:
licenses
1. Your username or organization slug (if you are a member of an organization).
2. A unique Dataset slug, must be between 3 and 50 characters in length.
* : Must have exactly one entry that specifies the license. Only name is evaluated, all other information is ignored. See below for options.
resources
* : Contains an array of files that are being uploaded. (Note - this is not required, nor if included, does it need to include all of the files to be uploaded.):
path
* : File path.
description
* : File description.
schema
* : File schema (definition below):
fields
* : Array of fields in the dataset. Please note that this needs to include ALL of the fields in the data in order or they will not be matched up correctly. A later version of the API will fix this bug.
name
* : Field name
description
* : Field description (Note: title is also accepted for backward compatibility, but description is preferred)
type
* : Field type. A best-effort list of types will be kept at the bottom of this page, but new types may be added that are not documented here.
keywords
* : Contains an array of strings that correspond to an existing tag on Kaggle. If a specified tag doesn't exist, the upload will continue, but that specific tag won't be added.
kaggle datasets version
* (create a new version for an existing Dataset):
subtitle
* : Subtitle of the dataset, must be between 20 and 80 characters in length.
description
* : Description of the dataset.
id
* : The URL slug of the dataset you want to update (see above). You must be the owner or otherwise have edit rights for this dataset. One of id or id_no must be specified. If both are, id_no will be preferred.
id_no
* : The ID of the dataset. One of id or id_no must be specified. You must be the owner or otherwise have edit rights for this dataset. If both are, id_no will be preferred.
resources
* : Contains an array of files that are being uploaded. (Note - this is not required, nor if included, does it need to include all of the files to be uploaded.):
path
* : File path.
description
* : File description.
schema
* : File schema (definition below):
fields
* : Array of fields in the dataset. Please note that this needs to include ALL of the fields in the data in order or they will not be matched up correctly. A later version of the API will fix this bug.
name
* : Field name
description
* : Field description (Note: title is also accepted for backward compatibility, but description is preferred)
type
* : Field type. A best-effort list of types will be kept at the bottom of this page, but new types may be added that are not documented here.
keywords
* : Contains an array of strings that correspond to an existing tag on Kaggle. If a specified tag doesn't exist, the upload will continue, but that specific tag won't be added.
kaggle datasets metadata --update
* (update metadata for an existing Dataset) supports all fields mentioned above for kaggle datasets version, and additionally:
expectedUpdateFrequency
* : How often you expect to update your dataset with new versions. See section below for possible values.
userSpecifiedSources
* : An explanation of the source(s) of your dataset. Most basic markdown features are supported for this string.
image
* : A relative file path to a new image file you want to use for your dataset. The path should be relative to the location of the dataset-metadata.json file. See section below for more specifics about file types and expected image size.
CC0-1.0
We will add further metadata processing in upcoming versions of the API.
Licenses
You can specify the following licenses for your datasets:
* : CC0: Public Domain
CC-BY-SA-3.0
* : CC BY-SA 3.0
CC-BY-SA-4.0
* : CC BY-SA 4.0
CC-BY-NC-SA-4.0
* : CC BY-NC-SA 4.0
GPL-2.0
* : GPL 2
ODbL-1.0
* : Database: Open Database, Contents: © Original Authors
DbCL-1.0
* : Database: Open Database, Contents: Database Contents
copyright-authors
* : Data files © Original Authors
other
* : Other (specified in description)
unknown
* : Unknown
CC-BY-4.0
* :
CC-BY-NC-4.0
https://creativecommons.org/licenses/by/4.0/
* : https://creativecommons.org/licenses/by-nc/4.0/
PDDL
* : https://opendatacommons.org/licenses/pddl/1.0/
CC-BY-3.0
* :
CC-BY-3.0-IGO
https://creativecommons.org/licenses/by/3.0/
* :
US-Government-Works
https://creativecommons.org/licenses/by/3.0/igo/
* :
CC-BY-NC-SA-3.0-IGO
https://www.usa.gov/government-works/
* :
CDLA-Permissive-1.0
https://creativecommons.org/licenses/by-nc-sa/3.0/igo/
* :
CDLA-Sharing-1.0
https://cdla.io/permissive-1-0/
* :
CC-BY-ND-4.0
https://cdla.io/sharing-1-0/
* :
CC-BY-NC-ND-4.0
https://creativecommons.org/licenses/by-nd/4.0/
* :
ODC-BY-1.0
https://creativecommons.org/licenses/by-nc-nd/4.0/
* :
LGPL-3.0
https://opendatacommons.org/licenses/by/1-0/index.html
* :
AGPL-3.0
http://www.gnu.org/licenses/lgpl-3.0.html
* :
FDL-1.3
http://www.gnu.org/licenses/agpl-3.0.html
* :
EU-ODP-Legal-Notice
http://www.gnu.org/licenses/fdl-1.3.html
* : https://ec.europa.eu/info/legal-notice_en
apache-2.0
* :
GPL-3.0
https://www.apache.org/licenses/LICENSE-2.0
* : GPL 2
string
Data types
You can specify the following data types
*
boolean
*
numeric
*
datetime
*
id
*
uuid
*
latitude
*
longitude
*
coordinates
*
country
*
province
* (these are states in the US)
postalcode
*
address
*
email
*
url
*
integer
*
decimal
*
city
*
expectedUpdateFrequency
Expected update frequencies
You can specify the following values for :
not specified
*
never
*
annually
*
quarterly
*
monthly
*
weekly
*
daily
*
hourly
*
dataset-cover-image.png
Images
The recommended way to update your dataset's image is by placing a file named (or .jpg, .jpeg, .webp), as a sibling file to your datasets-metadata.json.
/some/path/dataset-metadata.json
Example:
-
/some/path/dataset-cover-image.png
-
datasets-metadata.json
The image file will only be used for dataset metadata, and not be uploaded as a file within your dataset.
Specifying an image with a relative path
As an alternative, you can update your dataset image by providing a relative path from your to an image file, using the image property.
/some/path/dataset-metadata.json
If your files were located at:
-
/some/path/to/my-image.jpg
-
`
This property should be specified as:
`
"image": "to/my-image.jpg"
.png
Supported image file types and expected dimensions
The following file types are supported:
*
.jpg
*
.jpeg
*
.webp
*
The image needs to have a minimum width of 560px and a minimum height of 280px.
The same image file will be used for two different crops:
- Header, 2:1 ratio
- Crop rectangle: width: 560px, height: 280px, top: 0, left: 0
- For an image with dimensions 560px x 280px, this will be the entire rectangular image.
- Thumbnail, 1:1 ratio
- Crop rectangle: width: 280px, height: 280px, top: 0, left: 140px
- For an image with dimensions 560px x 280px, this will be a centered 280px square.
While you can upload a larger image than 560px x 280px, the crops as specified above will be applied, and this may not look good. These crops can always be edited in the UI on kaggle.com on the settings page for your dataset.
---
Forums
Forums Commands
Commands for browsing and reading Kaggle discussion forums.
kaggle forums
Lists all discussion forums. Also available as kaggle forums list.
Alias: f
Usage:
kaggle forums [options]Options:
* -v, --csv: Print results in CSV format.-q, --quiet
* : Suppress verbose output.
Example:
List all forums in CSV format:
kaggle forums -vPurpose:
This command helps you discover all available discussion forums on Kaggle.
kaggle forums topics list
Lists discussion topics in a forum.
Usage:
kaggle forums topics list [FORUM] [options]Note: kaggle forums topics (without list subcommand) is supported as a shortcut to list all topics (without forum filtering).
Arguments:
* [FORUM]: Forum slug (e.g., 1, product-feedback). Optional.
Options:
* --sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.-s, --search <SEARCH_TERM>
* : Search query to filter topics.--category <CATEGORY>
* : Filter by category. Valid options: all, forums, competitions, datasets, competition_write_ups, models, benchmarks.--group <GROUP>
* : Filter by group. Valid options: all, owned, upvoted, bookmarked, my_activity, drafts.--page-size <PAGE_SIZE>
* : Number of items per page.--page-token <PAGE_TOKEN>
* : Page token for pagination.-v, --csv
* : Print results in CSV format.-q, --quiet
* : Suppress verbose output.
Example:
List topics in the "getting-started" forum sorted by most recent, showing 5 per page:
kaggle forums topics list getting-started --sort-by recent --page-size 5Purpose:
This command lets you browse discussion topics within a specific forum, with filtering and sorting options.
kaggle forums topics show
Displays a topic with all comments in tree form (indented).
Usage:
kaggle forums topics show <TOPIC_REF> [options]Arguments:
* <TOPIC_REF>: A topic reference, which can be:<forum-name>/<topic-id>
* (e.g., getting-started/12345)<forum-name> <topic-id>
* (two separate arguments, where <topic-id> is passed as second argument)<topic-id>
* (bare numeric ID)
Options:
* --page-size <PAGE_SIZE>: Number of comments to show per page.--page-token <PAGE_TOKEN>
* : Page token for comment pagination.-v, --csv
* : Print results in CSV format.-q, --quiet
* : Suppress verbose output.
Example:
Show topic 12345 from the "getting-started" forum:
kaggle forums topics show getting-started/12345Show the same topic using two separate arguments:
kaggle forums topics show getting-started 12345Show a topic by bare numeric ID:
kaggle forums topics show 12345Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
---
Index
.. _kaggle:
.. kaggle-cli documentation master file, created by
sphinx-quickstart on Thu Jun 26 22:53:21 2025.
You can adapt this file completely to your liking, but it should at least
contain the root toctree directive.
kaggle-cli documentation
========================
.. toctree::
:maxdepth: 2
:caption: Contents:
intro
configuration
competitions
competition_creation
datasets
kernels
models
model_instances
model_instances_versions
benchmarks
search
tutorials
---
Kernels
Kernels Commands
Commands for interacting with Kaggle Kernels (notebooks and scripts).
kaggle kernels list
Lists available kernels.
Usage:
kaggle kernels list [options]Options:
* -m, --mine: Display only your kernels.-p, --page <PAGE>
* : Page number for results (default: 1).--page-size <SIZE>
* : Number of items per page (default: 20).-s, --search <SEARCH_TERM>
* : Search term.-v, --csv
* : Print results in CSV format.--parent <PARENT_KERNEL>
* : Filter by parent kernel (format: owner/kernel-slug).--competition <COMPETITION_SLUG>
* : Filter by competition.--dataset <DATASET_SLUG>
* : Filter by dataset (format: owner/dataset-slug).--user <USER>
* : Filter by a specific user.--language <LANGUAGE>
* : Filter by language (all, python, r, sqlite, julia).--kernel-type <TYPE>
* : Filter by kernel type (all, script, notebook).--output-type <TYPE>
* : Filter by output type (all, visualizations, data).--sort-by <SORT_BY>
* : Sort results (hotness, commentCount, dateCreated, dateRun, relevance, scoreAscending, scoreDescending, viewCount, voteCount). Default: hotness.
Examples:
1. List your own kernels containing "Exercise" in the title, page 2, 5 items per page, in CSV format, sorted by run date:
kaggle kernels list -m -s Exercise --page-size 5 -p 2 -v --sort-by dateRun2. List kernels that are children of $KAGGLE_DEVELOPER/exercise-lists (replace $KAGGLE_DEVELOPER with your username):
kaggle kernels list --parent $KAGGLE_DEVELOPER/exercise-lists3. List the first 5 kernels for the "house-prices-advanced-regression-techniques" competition:
kaggle kernels list --competition house-prices-advanced-regression-techniques --page-size 54. List the first 5 kernels associated with the dataset dansbecker/home-data-for-ml-course:
kaggle kernels list --dataset dansbecker/home-data-for-ml-course --page-size 55. List Python notebooks by user $KAGGLE_DEVELOPER that output data:
kaggle kernels list --user $KAGGLE_DEVELOPER --language python --kernel-type notebook --output-type dataPurpose:
This command allows you to find kernels based on various filters like ownership, associated competition/dataset, language, or type.
kaggle kernels files
Lists output files for a specific kernel.
Usage:
kaggle kernels files <KERNEL> [options]Arguments:
* <KERNEL>: Kernel URL suffix (format: owner/kernel-slug, e.g., kerneler/sqlite-global-default).
Options:
* -v, --csv: Print results in CSV format.--page-token <PAGE_TOKEN>
* : Page token for results paging.--page-size <PAGE_SIZE>
* : Number of items to show on a page (default: 20, max: 200).
Example:
List the first output file for the kernel kerneler/sqlite-global-default in CSV format:
kaggle kernels files kerneler/sqlite-global-default -v --page-size=1Purpose:
Use this command to view the files generated by a kernel run.
kaggle kernels init
Initializes a metadata file (kernel-metadata.json) for a new or existing kernel. See metadata file format.
Usage:
kaggle kernels init -p <FOLDER_PATH>Options:
* -p, --path <FOLDER_PATH>: The path to the folder where the kernel-metadata.json file will be created (defaults to the current directory).
Example:
Initialize a kernel metadata file in the tests/kernel folder:
kaggle kernels init -p tests/kernelPurpose:
This command creates a template kernel-metadata.json file. You need to edit this file with details like the kernel's title, ID (slug), language, kernel type, and data sources before pushing it to Kaggle.
kaggle kernels push
Pushes new code/notebook and metadata to a kernel, then runs the kernel.
Usage:
kaggle kernels push -p <FOLDER_PATH> [options]Options:
* --accelerator <ACCELERATOR_ID>: ID name of the accelerator to use during the run. E.g. "NvidiaTeslaP100" (aka default GPU), "NvidiaTeslaT4", "TpuV6E8".-p, --path <FOLDER_PATH>
* : Path to the folder containing the kernel file (e.g., .ipynb, .Rmd, .py) and the kernel-metadata.json file (defaults to the current directory).-t, --timeout <SECONDS>
* : Maximum run time in seconds.
Example:
Push the kernel from the tests/kernel folder (assuming it contains the kernel file and kernel-metadata.json):
kaggle kernels push -p tests/kernelPurpose:
This command uploads your local kernel file and its metadata to Kaggle. If the kernel specified in the metadata exists under your account, it will be updated. Otherwise, a new kernel will be created. After uploading, Kaggle will attempt to run the kernel.
Accelerators available as of Feb 2026:
* NvidiaTeslaP100
* TpuV38
* NvidiaTeslaT4
* NvidiaTeslaT4Highmem
* Tpu1VmV38
* NvidiaTeslaA100
* NvidiaL4
* TpuV5E8
* NvidiaL4X1
* TpuV6E8
* NvidiaH100
* NvidiaRtxPro6000
Some of these are only available to participants of specific competitions, and some are only available to Kaggle admins.
NvidiaTeslaP100 is not usable for GPU compute with the default Kaggle image. Its PyTorch build (cu128) does not include Pascal (sm_60) kernels, so torch.cuda.is_available() returns True but the first CUDA operation fails with cudaErrorNoKernelImageForDevice. Use NvidiaTeslaT4 instead, or install a Pascal-compatible torch build if you require a P100.
kaggle kernels pull
Pulls down the code/notebook and metadata for a kernel.
Usage:
kaggle kernels pull <KERNEL> [options]Arguments:
* <KERNEL>: Kernel URL suffix (format: owner/kernel-slug or owner/kernel-slug/version, e.g., $KAGGLE_DEVELOPER/exercise-as-with or $KAGGLE_DEVELOPER/exercise-as-with/2).
Options:
* -p, --path <PATH>: Folder to download files to (defaults to current directory).-w, --wp
* : Download files to the current working path.-m, --metadata
* : Generate a kernel-metadata.json file along with the kernel code.
Examples:
1. Pull the kernel $KAGGLE_DEVELOPER/exercise-as-with and its metadata into the tests/kernel folder:
kaggle kernels pull -p tests/kernel $KAGGLE_DEVELOPER/exercise-as-with -m2. Pull the kernel $KAGGLE_DEVELOPER/exercise-as-with into the current working directory:
kaggle kernels pull --wp $KAGGLE_DEVELOPER/exercise-as-with3. Pull version 2 of the kernel $KAGGLE_DEVELOPER/exercise-as-with into the current working directory:
kaggle kernels pull --wp $KAGGLE_DEVELOPER/exercise-as-with/2Purpose:
This command allows you to download the source code and optionally the metadata of a kernel from Kaggle to your local machine.
kaggle kernels output
Gets the data output from the latest run of a kernel.
Usage:
kaggle kernels output <KERNEL> [options]Arguments:
* <KERNEL>: Kernel URL suffix (e.g., kerneler/using-google-bird-vocalization-model).
Options:
* -p, --path <PATH>: Folder to download output files to (defaults to current directory).-w, --wp
* : Download files to the current working path.-o, --force
* : Force download, overwriting existing files.-q, --quiet
* : Suppress verbose output.--file-pattern <REGEX>
* : Regex pattern to match against filenames. Only files matching the pattern will be downloaded.--page-size <SIZE>
* : Number of output files to request per page. Default size is 20, max is 200.--page-token <TOKEN>
* : Download files from a specific output page. If Kaggle returns another page token, it is printed after the download.
Example:
Download the output of the kernel kerneler/using-google-bird-vocalization-model, forcing overwrite:
kaggle kernels output kerneler/sqlite-global-default -oDownload PNG files only:
kaggle kernels output <kernel> --file-pattern ".*\.png$" # Only PNG filesDownload matching PNG files across all output pages:
kaggle kernels output <kernel> --file-pattern ".*\.png$"Download files from a specific output page:
kaggle kernels output <kernel> --page-token <TOKEN>Download files in smaller pages:
kaggle kernels output <kernel> --page-size 50Purpose:
Use this command to retrieve the files generated by a kernel run, such as submission files, processed data, or visualizations. By default, output downloads scan every available output page, so --file-pattern can match files beyond the first page. Use --page-size to control how many files are requested on each page, and use --page-token when you only want to download files from one specific page.
kaggle kernels status
Displays the status of the latest run of a kernel.
Usage:
kaggle kernels status <KERNEL>Arguments:
* <KERNEL>: Kernel URL suffix (e.g., kerneler/sqlite-global-default).
Example:
Get the status of the kernel kerneler/sqlite-global-default:
kaggle kernels status kerneler/sqlite-global-defaultPurpose:
This command tells you whether the latest run of your kernel is still running, completed successfully, or failed.
kaggle kernels delete
Deletes a kernel from Kaggle.
Usage:
kaggle kernels delete <KERNEL> [options]Arguments:
* <KERNEL>: Kernel URL suffix (format: owner/kernel-slug, e.g., $KAGGLE_DEVELOPER/exercise-delete).
Options:
* -y, --yes: Automatically confirm deletion without prompting.
Example:
Delete the kernel $KAGGLE_DEVELOPER/exercise-delete and automatically confirm:
kaggle kernels delete $KAGGLE_DEVELOPER/exercise-delete --yesPurpose:
This command permanently removes one of your kernels from Kaggle. Use with caution.
kaggle kernels topics list
Lists discussion topics for a kernel.
Usage:
kaggle kernels topics list <KERNEL> [options]Arguments:
* <KERNEL>: Kernel ref in format <owner>/<kernel-slug> (e.g., owner/kernel-slug).
Options:
* --sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.-s, --search <SEARCH_TERM>
* : Search query to filter topics.--page-size <PAGE_SIZE>
* : Number of items per page.--page-token <PAGE_TOKEN>
* : Page token for pagination.-v, --csv
* : Print results in CSV format.-q, --quiet
* : Suppress verbose output.
Example:
List recent topics for the owner/kernel-slug kernel:
kaggle kernels topics list owner/kernel-slug --sort-by recentPurpose:
This command lets you browse discussion topics for a specific kernel.
kaggle kernels topics show
Displays a kernel discussion topic with all comments in tree form.
Usage:
kaggle kernels topics show <TOPIC_REF> [options]Arguments:
* <TOPIC_REF>: A topic reference, which can be:<kernel>/<topic-id>
* (e.g., owner/kernel-slug/12345)<kernel> <topic-id>
* (two separate arguments, where <topic-id> is passed as second argument)<topic-id>
* (bare numeric ID)
Options:
* --page-size <PAGE_SIZE>: Number of comments to show per page.--page-token <PAGE_TOKEN>
* : Page token for comment pagination.-v, --csv
* : Print results in CSV format.-q, --quiet
* : Suppress verbose output.
Example:
kaggle kernels topics show owner/kernel-slug/12345Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
Using Secrets in Kernels
If your kernel needs to access sensitive information (like API keys or passwords) without exposing them in your code, you should use Kaggle Secrets.
1. Define Secrets on Kaggle.com (no CLI support)
1. Open your notebook in the Kaggle Notebook Editor.
2. In the menu, select Add-ons -> Secrets.
3. Add your secrets as key-value pairs (e.g., Label: MY_API_KEY
, Value: your-actual-key-value).2. Use Secrets in your Code Running on Kaggle.com
Use the UserSecretsClient from the kaggle_secrets package to retrieve your secrets at runtime:pythonfrom kaggle_secrets import UserSecretsClientRetrieve the secret value using the label you defined
secret_value = UserSecretsClient().get_secret("MY_API_KEY")
Note: The
kaggle_secrets package is pre-installed and only functional within the Kaggle notebook execution environment. It will not work when running scripts locally.---
Kernels Metadata
To upload and run a kernel, a special
kernel-metadata.json file must be specified.
Here's a basic example for kernel-metadata.json:
`
{
"id": "timoboz/my-awesome-kernel",
"id_no": 12345,
"title": "My Awesome Kernel",
"code_file": "my-awesome-kernel.ipynb",
"language": "python",
"kernel_type": "notebook",
"is_private": "false",
"enable_gpu": "false",
"enable_internet": "false",
"machine_shape": "",
"dataset_sources": ["timoboz/my-awesome-dataset"],
"competition_sources": [],
"kernel_sources": [],
"model_sources": []
}
`
You can also use the API command kaggle kernels init -p /path/to/kernel to have the API create this file for you for a new kernel. If you wish to get the metadata for an existing kernel, you can use kaggle kernels pull -p /path/to/download -k username/kernel-slug -m.
Contents
We currently support the following metadata fields for kernels.
* id: The URL slug of your kernel. One of id or id_no must be specified. If both are, id_no will be preferred.
1. Your username slug
2. A unique kernel slug
* id_no: The kernel's numeric ID. One of id or id_no must be specified. If both are, id_no will be preferred.
* title: The title of the kernel. Required for new kernels - optional for existing ones. Please be aware that kernel titles and slugs are linked to each other. A kernel slug is always the title lowercased with dashes (-) replacing spaces.
* If you wish to rename your kernel, you may change the title within the metadata. However, you will need to update the id as well AFTER the rename is complete.
* code_file: The path to your kernel source code. Required. If not an absolute path, it should be relative to the location of kernel-metadata.json.
* language: The language your kernel is written in. Valid options are python, r, and rmarkdown. Required.
* kernel_type: The type of kernel. Valid options are script and notebook. Required.
* is_private: Whether or not the kernel should be private. If not specified, will be true.
* enable_gpu: Whether or not the kernel should run on a GPU. If not specified, will be false.
* enable_internet: Whether or not the kernel should be able to access the internet. If not specified, will be false.
* machine_shape: The accelerator/GPU type to use (e.g., NvidiaTeslaT4, NvidiaTeslaP100, or Tpu1VmV38).
> [!WARNING]
> NvidiaTeslaP100 is not usable with the default Kaggle image. Its PyTorch build (cu128) does not include Pascal (sm_60) kernels, so torch.cuda.is_available() returns True but the first CUDA operation fails with cudaErrorNoKernelImageForDevice. Use NvidiaTeslaT4 instead, or install a Pascal-compatible torch build if you require a P100.
* dataset_sources: A list of dataset sources, specified as "username/dataset-slug"
* competition_sources: A list of competition sources, specified as "competition-slug"
* kernel_sources: A list of kernel sources, specified as "username/kernel-slug"
* model_sources: A list of model sources, specified as "username/model-slug/framework/variation-slug/version-number"
We will add further metadata processing in upcoming versions of the API.---
Model Variations
Model Variation Commands
Commands for interacting with variations of Kaggle Models. A model variation typically represents a specific framework of a parent model.
kaggle models variations init Initializes a metadata file (
model-instance-metadata.json) for creating a new model variation.
Note that the name of the file reflects the old name for a variation, which was "instance".Usage:
bashkaggle models variations init -p <FOLDER_PATH>
Options:
*
-p, --path <FOLDER_PATH>: The path to the folder where the model-instance-metadata.json file will be created (defaults to the current directory).Example:
Initialize a model variation metadata file in the
tmp folder:bashkaggle models variations init -p tmp
Purpose:
This command creates a template
model-instance-metadata.json file. You must edit this file with details such as the owner slug, the parent model slug, the variation (or instance) slug (URL-friendly name for this variations), and the framework (e.g., tensorflow, pytorch, jax, sklearn) before creating the variation.
kaggle models variations create Creates a new model variation under an existing model on Kaggle.
Usage:
bashkaggle models variations create -p <FOLDER_PATH> [options]
Options:
*
-p, --path <FOLDER_PATH>: Path to the folder containing the model variation files and the model-instance-metadata.json file (defaults to the current directory).
* -q, --quiet: Suppress verbose output.
* -r, --dir-mode <MODE>: How to handle directories within the upload: skip (ignore), zip (compressed upload), tar (uncompressed upload) (default: skip).
* --ignore-patterns <PATTERNS>: Patterns of files/dirs to ignore. Can be specified multiple times.
Example:
Create a new model variation using the metadata and files in the
tmp folder, quietly, skipping subdirectories. (Assumes model-instance-metadata.json in tmp has been properly edited):bashExample: Edit model-instance-metadata.json first
sed -i 's/INSERT_OWNER_SLUG_HERE/your-username/' tmp/model-instance-metadata.json
sed -i 's/INSERT_EXISTING_MODEL_SLUG_HERE/parent-model-slug/' tmp/model-instance-metadata.json
sed -i 's/INSERT_INSTANCE_SLUG_HERE/my-variation-slug/' tmp/model-instance-metadata.json
sed -i 's/INSERT_FRAMEWORK_HERE/jax/' tmp/model-instance-metadata.json
echo "a,b,c,d" > tmp/data.csv # Example model file
kaggle models variations create -p tmp -q -r skip
Purpose:
This command uploads your local model files (e.g., weights, architecture definition) and the associated variation metadata to create a new variation under a specified parent model on Kaggle. This effectively creates the first version of this model variation.
kaggle models variations get Downloads the
model-instance-metadata.json file for an existing model variation.Usage:
bashkaggle models variations get <MODEL_VARIATION> -p <FOLDER_PATH>
Arguments:
*
<MODEL_VARIATION>: Model variation URL suffix in the format owner/model-slug/framework/variation-slug (e.g., $KAGGLE_DEVELOPER/test-model/jax/main).Options:
*
-p, --path <FOLDER_PATH>: Folder to download the model-instance-metadata.json file to.Example:
Download the metadata for model variation
$KAGGLE_DEVELOPER/test-model/jax/main into the tmp folder:bashkaggle models variations get $KAGGLE_DEVELOPER/test-model/jax/main -p tmp
Purpose:
This command retrieves the metadata file for an existing model variation. This can be useful for inspection or as a basis for an update.
kaggle models variations files Lists files for the current version of a model variation.
Usage:
bashkaggle models variations files <MODEL_VARIATION> [options]
Arguments:
*
<MODEL_VARIATION>: Model variation URL suffix (e.g., $KAGGLE_DEVELOPER/test-model/jax/main).Options:
*
-v, --csv: Print results in CSV format.
* --page-size <SIZE>: Number of items per page (default: 20).
* --page-token <TOKEN>: Page token for results paging.Example:
List the first 5 files for the model variation
$KAGGLE_DEVELOPER/test-model/jax/main in CSV format:bashkaggle models variations files $KAGGLE_DEVELOPER/test-model/jax/main -v --page-size 5
Purpose:
Use this command to see the files associated with the latest version of a specific model variation.
kaggle models variations update Updates an existing model variation on Kaggle using a local
model-instance-metadata.json file.Usage:
bashkaggle models variations update -p <FOLDER_PATH>
Options:
*
-p, --path <FOLDER_PATH>: Path to the folder containing the model-instance-metadata.json file with the updated information (defaults to the current directory). Note: This command only updates the metadata of the variation, not the files. To update files, create a new version.Example:
Update the model variation whose details are in
tmp/model-instance-metadata.json (ensure the slugs and owner in the JSON match an existing model variation):bashkaggle models variations update -p tmp
Purpose:
Use this command to change the metadata of an existing model variation, such as its description or other fields defined in the
model-instance-metadata.json file. This does not upload new files or create a new version.
kaggle models variations delete Deletes a model variation from Kaggle.
Usage:
bashkaggle models variations delete <MODEL_VARIATION> [options]
Arguments:
*
<MODEL_VARIATION>: Model variation URL suffix in the format owner/model-slug/framework/variation-slug (e.g., $KAGGLE_DEVELOPER/test-model/jax/main).Options:
*
-y, --yes: Automatically confirm deletion without prompting.Example:
Delete the model variation
$KAGGLE_DEVELOPER/test-model/jax/main and automatically confirm:bashkaggle models variations delete $KAGGLE_DEVELOPER/test-model/jax/main -y
Purpose:
This command permanently removes one of your model variations (and all its versions) from Kaggle. Use with caution.
---
Model Variations Versions
Model Variation Versions Commands
Commands for managing versions of a specific Kaggle Model Variation. Each version represents a snapshot of the model variation files at a point in time.
kaggle models variations versions create Creates a new version of an existing model variation.
Usage:
bashkaggle models variations versions create <MODEL_VARIATION> -p <FOLDER_PATH> [options]
Arguments:
*
<MODEL_VARIATION>: The target model variation URL suffix for the new version (format: owner/model-slug/framework/variation-slug, e.g., $KAGGLE_DEVELOPER/test-model/jax/main).Options:
*
-p, --path <FOLDER_PATH>: Path to the folder containing the files for this new version (defaults to the current directory).
* -n, --version-notes <NOTES>: Notes describing this version.
* -q, --quiet: Suppress verbose output.
* -r, --dir-mode <MODE>: How to handle directories within the upload: skip (ignore), zip (compressed upload), tar (uncompressed upload) (default: skip).
* --ignore-patterns <PATTERNS>: Patterns of files/dirs to ignore. Can be specified multiple times.
Example:
Create a new version for the model variation
$KAGGLE_DEVELOPER/test-model/jax/main using files from the tmp folder, with version notes "Updated model files", quietly, and skipping subdirectories:bashEnsure tmp folder contains the new files for the version, e.g., data_v2.csv
echo "e,f,g,h" > tmp/data_v2.csv
kaggle models variations versions create $KAGGLE_DEVELOPER/test-model/jax/main -p tmp -n "Updated model files" -q -r skip
Purpose:
This command uploads a new set of files to an existing model variation, creating a new, numbered version. This allows you to track changes and revert to previous versions of your model variation files.
kaggle models variations versions download Downloads files for a specific version of a model variation.
Usage:
bashkaggle models variations versions download <MODEL_VARIATION_VERSION> [options]
Arguments:
*
<MODEL_VARIATION_VERSION>: Model variation version URL suffix in the format owner/model-slug/framework/variation-slug/version-number (e.g., $KAGGLE_DEVELOPER/test-model/jax/main/1).Options:
*
-p, --path <PATH>: Folder to download files to (defaults to current directory).
* --untar: Untar the downloaded file if it's a .tar archive (deletes the .tar file afterwards).
* --unzip: Unzip the downloaded file if it's a .zip archive (deletes the .zip file afterwards).
* -f, --force: Force download, overwriting existing files.
* -q, --quiet: Suppress verbose output.Example:
Download version 1 of the model variation
$KAGGLE_DEVELOPER/test-model/jax/main into the tmp folder, untar if applicable, force overwrite, and do it quietly:bashkaggle models variations versions download $KAGGLE_DEVELOPER/test-model/jax/main/1 -p tmp -q -f --untar
Purpose:
This command allows you to retrieve the specific files associated with a particular version of a model variation.
kaggle models variations versions files Lists files for a specific version of a model variation.
Usage:
bashkaggle models variations versions files <MODEL_VARIATION_VERSION> [options]
Arguments:
*
<MODEL_VARIATION_VERSION>: Model variation version URL suffix (e.g., google/gemma/pytorch/7b/2).Options:
*
-v, --csv: Print results in CSV format.
* --page-size <SIZE>: Number of items per page (default: 20).
* --page-token <TOKEN>: Page token for results paging.Example:
List the first 3 files for version 2 of the model variation
google/gemma/pytorch/7b in CSV format:bashkaggle models variations versions files google/gemma/pytorch/7b/2 -v --page-size=3
Purpose:
Use this command to see the individual files that constitute a specific version of a model variation before downloading.
kaggle models variations versions delete Deletes a specific version of a model variation from Kaggle.
Usage:
bashkaggle models variations versions delete <MODEL_VARIATION_VERSION> [options]
Arguments:
*
<MODEL_VARIATION_VERSION>: Model variation version URL suffix in the format owner/model-slug/framework/variation-slug/version-number (e.g., $KAGGLE_DEVELOPER/test-model/jax/main/1).Options:
*
-y, --yes: Automatically confirm deletion without prompting.Example:
Delete version 1 of the model variation
$KAGGLE_DEVELOPER/test-model/jax/main and automatically confirm:bashkaggle models variations versions delete $KAGGLE_DEVELOPER/test-model/jax/main/1 -y
Purpose:
This command permanently removes a specific version of your model variation from Kaggle. Use with caution. If it's the only version, this may lead to the deletion of the model variation itself if no other versions exist.
---
Models
Models Commands
Commands for interacting with Kaggle Models.
kaggle models list Lists available models.
Usage:
bashkaggle models list [options]
Options:
*
--owner <OWNER>: Filter by a specific user or organization.
* --sort-by <SORT_BY>: Sort results. Valid options: hotness, downloadCount, voteCount, notebookCount, createTime (default: hotness).
* -s, --search <SEARCH_TERM>: Search term.
* --page-size <SIZE>: Number of items per page (default: 20).
* --page-token <TOKEN>: Page token for results paging.
* -v, --csv: Print results in CSV format.Examples:
1. List models owned by
$KAGGLE_DEVELOPER (replace with your username), sorted by creation time, in CSV format:
bashkaggle models list --owner $KAGGLE_DEVELOPER --sort-by createTime -v
2. List the first 5 models matching the search term "gemini":
bashkaggle models list -s gemini --page-size 5
Purpose:
This command helps you find models on Kaggle, filtering by owner or searching by keywords, and sorting by various criteria.
kaggle models init Initializes a metadata file (
model-metadata.json) for creating a new model. See metadata file format.Usage:
bashkaggle models init -p <FOLDER_PATH>
Options:
*
-p, --path <FOLDER_PATH>: The path to the folder where the model-metadata.json file will be created (defaults to the current directory).Example:
Initialize a model metadata file in a new temporary folder
tmp:bashmkdir tmp
kaggle models init -p tmp
Purpose:
This command creates a template
model-metadata.json file. You must edit this file with your model's details, such as owner slug, title, model slug (URL-friendly version of the title), and a description, before creating the model on Kaggle.
kaggle models create Creates a new model on Kaggle.
Usage:
bashkaggle models create -p <FOLDER_PATH>
Options:
*
-p, --path <FOLDER_PATH>: Path to the folder containing the model-metadata.json file (defaults to the current directory). This folder should also contain your model files that you intend to upload as part of the first model variation.Example:
Create a new model using the metadata in
tmp/model-metadata.json. (Assumes the metadata file has been edited with owner, title, and slug):bashExample: Edit model-metadata.json first
sed -i 's/INSERT_OWNER_SLUG_HERE/your-username/' tmp/model-metadata.json
sed -i 's/INSERT_TITLE_HERE/My Awesome Model/' tmp/model-metadata.json
sed -i 's/INSERT_SLUG_HERE/my-awesome-model/' tmp/model-metadata.json
kaggle models create -p tmp
Purpose:
This command registers a new model on Kaggle using the provided metadata. After this, you will typically create model variations and versions.
kaggle models get Downloads the
model-metadata.json file for an existing model.Usage:
bashkaggle models get <MODEL> -p <FOLDER_PATH>
Arguments:
*
<MODEL>: Model URL suffix in the format owner/model-slug (e.g., $KAGGLE_DEVELOPER/test-model).Options:
*
-p, --path <FOLDER_PATH>: Folder to download the model-metadata.json file to.Example:
Download the metadata for model
$KAGGLE_DEVELOPER/test-model into the tmp folder:bashkaggle models get -p tmp $KAGGLE_DEVELOPER/test-model
Purpose:
This command retrieves the metadata file for an existing model, which can be useful for inspection or as a basis for an update.
kaggle models update Updates an existing model on Kaggle using a local
model-metadata.json file.Usage:
bashkaggle models update -p <FOLDER_PATH>
Options:
*
-p, --path <FOLDER_PATH>: Path to the folder containing the model-metadata.json file with the updated information (defaults to the current directory).Example:
Update the model whose details are in
tmp/model-metadata.json (ensure the slug and owner in the JSON match an existing model):bashkaggle models update -p tmp
Purpose:
Use this command to change the metadata of an existing model, such as its title, description, or other fields defined in the
model-metadata.json file.
kaggle models delete Deletes a model from Kaggle.
Usage:
bashkaggle models delete <MODEL> [options]
Arguments:
*
<MODEL>: Model URL suffix in the format owner/model-slug (e.g., $KAGGLE_DEVELOPER/test-model).Options:
*
-y, --yes: Automatically confirm deletion without prompting.Example:
Delete the model
$KAGGLE_DEVELOPER/test-model and automatically confirm:bashkaggle models delete $KAGGLE_DEVELOPER/test-model -y
Purpose:
This command permanently removes one of your models (and all its variations and versions) from Kaggle. Use with caution.
kaggle models topics list Lists discussion topics for a model.
Usage:
bashkaggle models topics list <MODEL> [options]
Arguments:
*
<MODEL>: Model ref in format <owner>/<model-slug> (e.g., google/gemma).Options:
*
--sort-by <SORT_BY>: Sort order. Valid options: hot, top, new, recent, active, relevance.
* -s, --search <SEARCH_TERM>: Search query to filter topics.
* --page-size <PAGE_SIZE>: Number of items per page.
* --page-token <PAGE_TOKEN>: Page token for pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.Example:
bashkaggle models topics list google/gemma --sort-by hot
Purpose:
This command lets you browse discussion topics for a specific model.
kaggle models topics show Displays a model discussion topic with all comments in tree form.
Usage:
bashkaggle models topics show <TOPIC_REF> [options]
Arguments:
*
<TOPIC_REF>: A topic reference, which can be:
* <model>/<topic-id> (e.g., google/gemma/12345 - note that this supports multi-slash model slugs)
* <model> <topic-id> (two separate arguments, where <topic-id> is passed as second argument)
* <topic-id> (bare numeric ID)Options:
*
--page-size <PAGE_SIZE>: Number of comments to show per page.
* --page-token <PAGE_TOKEN>: Page token for comment pagination.
* -v, --csv: Print results in CSV format.
* -q, --quiet: Suppress verbose output.Example:
bashkaggle models topics show google/gemma/12345
Purpose:
This command displays a full discussion topic along with all of its comments rendered in an indented tree structure.
---
Models Metadata
A full model is composed of 3 types of entities:
1. The model
2. The variations
3. The variation versions
Let's take the example of efficientnet to explain these entities.
A model like
efficientnet contains multiple variations.A variation is a specific variation of the model (e.g. B0, B1, ...) with a certain framework (e.g. TensorFlow2).
Model
To create a model, a special
model-metadata.json file must be specified. Here's a basic example for
model-metadata.json:
text{
"ownerSlug": "INSERT_OWNER_SLUG_HERE",
"title": "INSERT_TITLE_HERE",
"slug": "INSERT_SLUG_HERE",
"subtitle": "",
"isPrivate": true,
"description": "Model Card Markdown, see below",
"publishTime": "",
"provenanceSources": ""
}
You can also use the API command
kaggle models init -p /path/to/model to have the API create this file for you for a new model. If you wish to get the metadata for an existing model, you can use kaggle models get username/model-slug.Contents
We currently support the following metadata fields for models.
*
ownerSlug: the slug of the user or organization
* title: the model's title
* slug: the model's slug (unique per owner)
* licenseName: the name of the license (see the list below)
* subtitle: the model's subtitle
* isPrivate: whether or not the model should be private (only visible by the owners). If not specified, will be true
* description: the model's card in markdown syntax (see the template below)
* publishTime: the original publishing time of the model
* provenanceSources: the provenance of the modelModel Variation
To create a model variation, a special
model-instance-metadata.json file must be specified. Here's a basic example for
model-instance-metadata.json:
text{
"ownerSlug": "INSERT_OWNER_SLUG_HERE",
"modelSlug": "INSERT_EXISTING_MODEL_SLUG_HERE",
"instanceSlug": "INSERT_INSTANCE_SLUG_HERE",
"framework": "INSERT_FRAMEWORK_HERE",
"overview": "",
"usage": "Usage Markdown, see below",
"licenseName": "Apache 2.0",
"fineTunable": False,
"trainingData": [],
"modelInstanceType": "Unspecified",
"baseModelInstance": "",
"externalBaseModelUrl": ""
}
You can also use the API command
kaggle models variations init -p /path/to/model-variation to have the API create this file for you for a new model variation.Contents
We currently support the following metadata fields for model variations.
*
ownerSlug: the slug of the user or organization of the model
* modelSlug: the existing model's slug
* instanceSlug: the slug of the variation
* framework: the variation's framework (possible options: tensorFlow1,tensorFlow2,tfLite,tfJs,pyTorch,jax,coral, ...)
* overview: a short overview of the variation
* usage: the variation's usage in markdown syntax (see the template below)
* fineTunable: whether the variation is fine tunable
* trainingData: a list of training data in the form of strings, URLs, Kaggle Datasets, etc...
* modelInstanceType: whether the model variation is a base model, external variant, internal variant, or unspecified
* baseModelInstance: if this is an internal variant, the {owner-slug}/{model-slug}/{framework}/{variation-slug} of the base model variation
* externalBaseModelUrl: if this is an external variant, a URL to the base modelLicenses
Here is a list of the available licenses for models:
- Apache 2.0
- Attribution 3.0 IGO (CC BY 3.0 IGO)
- Attribution 3.0 Unported (CC BY 3.0)
- Attribution 4.0 International (CC BY 4.0)
- Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)
- Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)
- Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)
- Attribution-NonCommercial-ShareAlike 3.0 IGO (CC BY-NC-SA 3.0 IGO)
- BSD-3-Clause
- CC BY-NC-SA 4.0
- CC BY-SA 3.0
- CC BY-SA 4.0
- CC0: Public Domain
- Community Data License Agreement - Permissive - Version 1.0
- Community Data License Agreement - Sharing - Version 1.0
- GNU Affero General Public License 3.0
- GNU Free Documentation License 1.3
- GNU Lesser General Public License 3.0
- GPL 2
- MIT
- ODC Attribution License (ODC-By)
- ODC Public Domain Dedication and Licence (PDDL)
- GPL 3
Usage
The following template variables can be used in this markdown:
-
${VERSION_NUMBER} is replaced by the version number when rendered
- ${VARIATION_SLUG} is replaced by the variation slug when rendered
- ${FRAMEWORK} is replaced by the framework name
- ${PATH} is replaced by /kaggle/input/<model_slug>/<framework>/<variation_slug>/<version>.
- ${FILEPATH} is replaced by /kaggle/input/<model_slug>/<framework>/<variation_slug>/<version>/<filename>. This value is only defined if the databundle contain a single file
- ${URL} is replaced by the absolute URL of the model---
Output Format
Kaggle CLI Output Formatting Documentation
This documentation describes the output formatting options available in the Kaggle CLI.
Output Format Options
The Kaggle CLI supports choosing the output format for various commands that list information.
--csv (or -v) -v)')" title="Copy section prompt for LLMs"> Copy SectionHistorically, many commands supported a
-v or --csv option to display output as comma-separated values (CSV) instead of a formatted table.Example:
shkaggle competitions list --csv
--format We have introduced a new
--format option to provide a unified way to specify the output format.
It accepts the following values:
* csv: Display output as comma-separated values.
* table: Display output as a formatted table (default).
* json: Display output as JSON.Example:
shkaggle competitions list --format csv
kaggle competitions list --format table
kaggle competitions list --format json
For most commands, the JSON output is a list of objects representing the rows, with keys corresponding to the column headers. For detailed commands like
topics show, it returns a structured object:
json{
"topic": { ... },
"comments": [ ... ]
}
Projections (Field Selection)
The
--format option supports optional gcloud-style field selection (projections) by appending a comma-separated list of fields in parentheses to the format name. This allows you to limit the output to only the specified fields and control their order.Projections are supported for all formats (
csv, table, json).Example:
shOnly show 'ref' and 'reward' columns for competitions in a table
kaggle competitions list --format "table(ref,reward)"Export only 'id' and 'publicScore' to JSON for team submissions
kaggle competitions team-submissions --format "json(id,publicScore)" <team_id>Export only 'name' and 'size' to CSV for dataset files
kaggle datasets files -d zillow/zecon --format "csv(name,size)"
You can specify fields using either their field names (e.g.
totalBytes) or their display labels (e.g. size). If a field is not recognized, the CLI will display an error listing the allowed fields.#### Special Case: Topics Show
For
topics show commands, which output both a parent topic and a list of comments, the projection is applied to both types of objects. Fields matching the topic are applied to the topic output, and fields matching comments are applied to the comment output.Example:
shkaggle forums topics show 123 --format "json(title,content)"
In this case, title (which is a topic field) will be preserved in the topic output, and content (which is a comment field) will be preserved in the comments output.
json{
"topic": {
"title": "Test Title"
},
"comments": [
{
"content": "Comment Content"
}
]
}
Mutual Exclusion
The
--csv (or -v) option and the --format option are mutually exclusive. You cannot specify both at the same time.If you attempt to use both, the CLI will display an error:
shkaggle competitions list --csv --format csv
Error: argument --format: not allowed with argument -v/--csv
Supported Commands
The following commands support both
--csv (legacy) and --format options:Competitions
* kaggle competitions list
* kaggle competitions files
* kaggle competitions submissions
* kaggle competitions leaderboard
* kaggle competitions team-submissions
* kaggle competitions episodes
* kaggle competitions pages
* kaggle competitions topic-messages
* kaggle competitions topics list
* kaggle competitions topics showDatasets
* kaggle datasets list
* kaggle datasets files
* kaggle datasets topics list
* kaggle datasets topics showKernels
* kaggle kernels list
* kaggle kernels files
* kaggle kernels topics list
* kaggle kernels topics showModels
* kaggle models list
* kaggle models topics list
* kaggle models topics show
* kaggle models instances list
* kaggle models instances files
* kaggle models instances versions list
* kaggle models instances versions filesForums
* kaggle forums list
* kaggle forums topics list
* kaggle forums topics showBenchmarks
* kaggle benchmarks topics list
* kaggle benchmarks topics showQuota
* kaggle quota---
README
Kaggle CLI Documentation
Welcome to the Kaggle CLI documentation. This guide provides detailed information on how to use the Kaggle command-line interface to interact with Kaggle's platform.
Installation
Note: Ensure you have Python 3.11+ and the package manager
pip installed.Install the
kaggle package with pip:shpip install kaggle
If you run into a
Command kaggle not found error, ensure that your Python executable scripts are in your $PATH. For a local user install on Linux, the default location is ~/.local/bin. On Windows, the default location is $PYTHON_HOME/Scripts.Authentication
First, you will need a Kaggle account. You can sign up here.
After login, you can download your Kaggle API credentials at https://www.kaggle.com/settings/api by clicking on the "Generate New Token" button under the "API" section.
Option 1: OAuth
Obtains access credentials for your Kaggle user accounts via a web-based authrorization flow.
shkaggle auth login
Option 2: Environment variable
shexport KAGGLE_API_TOKEN=xxxxxxxxxxxxxx # Copied from the settings UI
Option 3: API token file
Store your Kaggle API token obtained from your Kaggle account API tokens settings page in a file at
~/.kaggle/access_token.Option 4: Legacy API credentials file
From your Kaggle account API tokens settings page, under "Legacy API Credentials", click on the "Create Legacy API Key" button to generate a
kaggle.json file and store it at ~/.kaggle/kaggle.json.CLI Usage
Run the following command to list the available commands:
shkaggle --help
The Kaggle CLI is organized into several command groups:
* Competitions: Manage and participate in Kaggle competitions.
* Datasets: Search, download, and manage Kaggle datasets.
* Forums: Browse and read Kaggle discussion forums.
* Kernels: Interact with Kaggle Kernels (notebooks and scripts). Includes information on using Kaggle Secrets.
* Models: Manage your Kaggle Models.
* Model Variations: Manage variations of your Kaggle Models.
* Model Variation Versions: Manage versions of your Kaggle Model Variations.
* Benchmarks: Define evaluation tasks, run them against LLM models, and download results.
* Configuration: Configure the Kaggle CLI.
Many commands produce output, which can be formatted for different purposes:
* Output Format: Control the format of output.
Tutorials
Explore these tutorials to learn how to perform common tasks:
* Tutorials
* Create a Dataset
* Find and Download a Dataset
* Create a Model
* Create a Model Variation
* Create a Model Variation Version
* How to Submit to a Competition
* How to Submit to a Code Competition
---
Search
Search Command
Search across all Kaggle content from a single command.
kaggle search Runs a unified search over Kaggle competitions, datasets, notebooks, models,
users, and discussions and returns one ranked list of results. This is the
cross-content equivalent of the per-command
-s/--search flags (such as
kaggle datasets list --search); use it when you don't yet know which content
type you're looking for, or when you want results from several types at once.By default,
kaggle search searches all CLI-supported content types
(competition, dataset, notebook, model, user, discussion, benchmark) — not every
backend document type (it excludes types the CLI cannot render usefully, such as
comments, blogs, and courses). Result ordering uses the backend's canonical
cross-content ranking. Use --type to narrow to specific types.Usage:
bashkaggle search "<query>" [options]
Options:
*
query: The term(s) to search for (required).
* -t, --type <TYPES>: Restrict results to a comma-separated list of content types. Valid types: competition, dataset, notebook, model, user, discussion, benchmark. If omitted, all of these CLI-supported types are searched.
* -m, --mine: Restrict the search to your own content.
* --sort-by <SORT_BY>: Sort order. One of: relevance (default), hotness, votes, dateCreated, dateUpdated, totalComments, lastViewed.
* --page-size <SIZE>: Number of results to show on a page (default: 20, max: 100).
* --page-token <TOKEN>: Page token for results paging (printed as Next Page Token = ... at the top of a page when more results exist).
* -v, --csv: Print results in CSV format instead of a table.
* --format <FORMAT>: Print results in the selected format (csv, table, json). Supports field projection, e.g. --format 'json(type,ref)'.Result columns:
type, ref, title, owner, votes. The ref column
is the identifier you can pass to other commands — owner/slug for datasets,
notebooks, and models; the bare slug for competitions and users.Examples:
1. Search everything for a term:
bashkaggle search "protein folding"
2. Search only datasets and models:
bashkaggle search "diffusion" --type dataset,model
3. Find users:
bashkaggle search "andrew ng" --type user
4. Search your own content, most recently updated first:
bashkaggle search "baseline" --mine --sort-by dateUpdated
5. Get machine-readable output:
bashkaggle search "titanic" --format json
6. Fetch the next page:
bashkaggle search "llm" --page-size 50 --page-token <TOKEN>
---
Simulation Competitions
Tutorial: Simulation Competitions
This tutorial walks you through interacting with a Kaggle simulation competition using the CLI — from finding the competition to downloading episode replays and agent logs.
Simulation competitions (e.g., Connect X, Lux AI) differ from standard competitions. Instead of submitting a CSV of predictions, you submit an agent (code) that plays against other agents in episodes. Each episode contains multiple agents competing against each other. You can identify simulation competitions on the competitions page by their "Simulation" tag, or by looking for competitions that mention agents, bots, or game environments in their description.
1. Find and Inspect the Competition
Search for simulation competitions by keyword:
bashkaggle competitions list -s simulation
Once you've identified a competition (e.g.,
connectx), view its pages to read the rules, evaluation criteria, and other details:bashkaggle competitions pages connectx
This lists the available pages (e.g.,
description, rules, evaluation, data-description). To read the full content of a page:bashkaggle competitions pages connectx --content
You can also browse the competition's discussion forum to see what other participants are talking about — top strategies, common pitfalls, environment quirks. List the topics with:
bashkaggle competitions topics list connectx
This prints a table of topics with
id, title, authorName, commentCount, votes, and postDate. Sort and paginate with -s/--sort-by (one of hot, top, new, recent, active, relevance) and --page-size:bashkaggle competitions topics list connectx -s top --page-size 10
To read the full discussion under a topic, use the
show subcommand:bashkaggle competitions topics show connectx 12345
This returns the topic content and all its comments rendered in an indented tree structure.
text2. Accept the Competition Rules
Before you can submit or download data, you must accept the competition rules on the Kaggle website. Navigate to the competition page (e.g.,
https://www.kaggle.com/competitions/connectx) and click "Join Competition" or "I Understand and Accept".You can verify you've joined by checking your entered competitions:
bash
kaggle competitions list --group entered
text3. Download Competition Data
Download the competition's starter kit and any provided data:
bash
kaggle competitions download connectx -p connectx-data
text4. Submit Your Agent
Simulation competitions require you to submit agent code. You can upload files directly from your local machine.
Single file agent — if your agent is a single
main.py:
bash
kaggle competitions submit connectx -f main.py -m "Single file agent v1"
textMulti-file agent — if your agent spans multiple files, bundle them into a submission.tar.gz with main.py at the root:
bash
tar -czf submission.tar.gz main.py helper.py model_weights.pkl
kaggle competitions submit connectx -f submission.tar.gz -m "Multi-file agent v1"
textNotebook submission — alternatively, you can submit via an existing Kaggle notebook:
bash
kaggle competitions submit connectx -k YOUR_USERNAME/connectx-agent -f submission.tar.gz -v 1 -m "Notebook agent v1"
text5. Monitor Your Submission
Check the status of your submissions:
bash
kaggle competitions submissions connectx
textNote the submission ID from the output — you'll need it to view episodes.6. List Episodes for a Submission
Once your submission has played some games, list the episodes:
bash
kaggle competitions episodes 12345678
textReplace 12345678 with your submission ID. This shows a table of episodes with columns: id, createTime, endTime, state, and type.To get the output in CSV format for scripting:
bash
kaggle competitions episodes 12345678 -v
text7. Download an Episode Replay
To download the replay data for a specific episode (useful for visualizing what happened):
bash
kaggle competitions replay 98765432
textThis downloads the replay JSON to your current directory as episode-98765432-replay.json. To specify a download location:
bash
kaggle competitions replay 98765432 -p ./replays
text8. Download Agent Logs
To debug your agent's behavior, download the logs for a specific agent in an episode. You need the episode ID and the agent's index (0-based):
bash
Download logs for the first agent (index 0)
kaggle competitions logs 98765432 0Download logs for the second agent (index 1)
kaggle competitions logs 98765432 1 -p ./logs
textThis downloads the log file as episode-98765432-agent-0-logs.json.9. Inspect Top Teams' Active Agents
You can study how the leading teams' agents are performing — useful for scouting strategies or understanding the metagame. Start from the leaderboard to grab the team ID:
bash
kaggle competitions leaderboard connectx -s
textThis prints a table with columns teamId, teamName, submissionDate, score. Take the teamId of the team you want to inspect (e.g., first place), then list every active submission they have on the leaderboard:
bash
kaggle competitions team-submissions 42
textThis returns the team's public-safe submissions — id, dateSubmitted, and publicScore. For simulation competitions every leaderboard-eligible submission is listed (not just the best one), so you can see the full rotation of agents a top team is fielding.Pick the submission with the highest
publicScore and list its episodes, just like you would for your own:
bash
kaggle competitions episodes 98765432
textFrom there you can pull replays and agent logs for any episode that submission played in (kaggle competitions replay <episode_id> / kaggle competitions logs <episode_id> <agent_index>).Putting It All Together
Here's a typical workflow for iterating on a simulation competition agent:
bash
Download competition data
kaggle competitions download connectx -p connectx-dataSkim discussion topics for tips before iterating
kaggle competitions topics connectx -s top
kaggle competitions topic-messages connectx <topic-id>Submit your agent (single file)
kaggle competitions submit connectx -f main.py -m "v1"Check submission status
kaggle competitions submissions connectxList episodes (replace with your submission ID)
kaggle competitions episodes 12345678Download replay and logs for an episode
kaggle competitions replay 98765432
kaggle competitions logs 98765432 0Check the leaderboard
kaggle competitions leaderboard connectx -sScout the leader: list their active agents, then pick the best one's episodes
kaggle competitions team-submissions <leader-team-id>
kaggle competitions episodes <best-submission-id>
text---Tutorials
Kaggle CLI Tutorials
These tutorials illustrate how to use a sequence of Kaggle CLI commands to accomplish common tasks.
Introduction
Before starting these tutorials, please make sure you have:
1. Installed the Kaggle CLI, following the instructions here.
2. Set up your API credentials, following the instructions here
3. Logged in to Kaggle in a web browser. This will allow you to verify the results of the CLI commands in the
Your Work section of your Kaggle profile.Tutorial: Create a Dataset
This tutorial walks you through creating a new dataset on Kaggle.
1. Start from an empty directory. Create a new directory for your dataset files and navigate into it.
bash
mkdir my-new-dataset
cd my-new-dataset
text2. Create a sample data file. For this example, create a CSV file named sample_data.csv with an index column and three random data columns, and a few rows of data.
bash
echo "id,col_a,col_b,col_c" > sample_data.csv
echo "1,0.5,0.2,0.8" >> sample_data.csv
echo "2,0.1,0.7,0.3" >> sample_data.csv
echo "3,0.9,0.4,0.6" >> sample_data.csv
text3. Initialize dataset metadata. This creates a dataset-metadata.json file in your current directory.
bash
kaggle datasets init
text4. Edit the metadata file. Open dataset-metadata.json in a text editor and make the following changes:
* Replace "INSERT_TITLE_HERE" with your desired dataset title, e.g., "My Sample Dataset".
* Replace "INSERT_SLUG_HERE" with a URL-friendly version of your title, e.g., "my-sample-dataset". The URL-friendly version is made by converting the title to lower-case and changing spaces to dashes.
* You can also add licenses, descriptions, and other relevant information.5. Create the dataset. This command uploads your
sample_data.csv and dataset-metadata.json to Kaggle.
bash
kaggle datasets create -p .
textYou can add --public to make it public immediately.Datasets tab in Your Work. You should see "My Sample Dataset".Tutorial: Find and Download a Dataset
This tutorial explains how to find and download using the CLI.
1. Search for a Dataset (Optional).
* If you know the dataset you want, you can skip this step. Otherwise, you can search for datasets. For example, to search for datasets related to "iris":
bash
kaggle datasets list -s iris
text* This command will list datasets matching your search query. Note the dataset's "id" (e.g., uciml/iris) which you'll use for downloading.2. Choose a Dataset and Create a Directory.
* For this tutorial, we'll use the classic "Iris" dataset, which has the id
uciml/iris.
* Create a new directory for your dataset and navigate into it:
bash
mkdir iris-dataset-analysis
cd iris-dataset-analysis
text3. Download the Dataset.
* Use the kaggle datasets download command with the dataset's id.
bash
kaggle datasets download -d uciml/iris
text* This will download the dataset files, typically as a ZIP archive (e.g., iris.zip), into your current directory (iris-dataset-analysis).4. Unzip the Dataset.
* Note: you could skip this step by using the
--unzip flag on the previous command.
* Most datasets are downloaded as ZIP files. You'll need to unzip the archive to access the data files (e.g., CSV files).
bash
# Make sure you have unzip installed, or use your OS's GUI to extract
# The actual zip file name might vary based on the dataset.
# For uciml/iris, it's iris.zip
unzip iris.zip
text5. Verify the results.
* After unzipping, you should see the data files (e.g., Iris.csv, database.sqlite).
Tutorial: Update a Kernel (Notebook)
This tutorial shows how to download an existing kernel, modify it, and push the changes back to Kaggle.
1. Create or identify a kernel on Kaggle.com.
* Log in to kaggle.com.
* Find an existing notebook you own (or create one). For this tutorial, let's assume its title is "My CLI Test Kernel".
* Note the kernel slug from the browser's address bar. It will be something like
YOUR_USERNAME/my-cli-test-kernel.2. Create a new local directory for your kernel.
bash
mkdir my-kernel-project
cd my-kernel-project
text3. Pull the kernel. Use the kaggle kernels pull command with your username and the kernel slug. The -m flag includes the kernel-metadata.json file, which is required for pushing updates.
bash
# Replace YOUR_USERNAME with your actual Kaggle username
kaggle kernels pull YOUR_USERNAME/my-cli-test-kernel -m
textThis will download my-cli-test-kernel.ipynb (or .py/.Rmd) and kernel-metadata.json.4. Edit the kernel or metadata.
* Open the downloaded notebook file (e.g.,
my-cli-test-kernel.ipynb) and make some changes to the code or content.
* Open kernel-metadata.json. Let's add "benchmark" to the keywords. Find the "keywords": [] line and change it to "keywords": ["benchmark"].
Note: While you can edit keywords here, it's often best to manage them on kaggle.com, as there is a restricted list of allowed keywords.*5. Push the kernel. This uploads your changes and the updated metadata, then runs the kernel on Kaggle.
bash
kaggle kernels push -p .
text6. Verify on Kaggle.com. Refresh the Code tab in Your Work. You should see your code changes and the "benchmark" tag added to the kernel settings.Tutorial: Create a Model
This tutorial guides you through creating a new model on Kaggle.
1. Start from an empty directory. Create a new directory for your model files and navigate into it.
bash
mkdir my-new-model
cd my-new-model
text2. Copy your model definition files (optional for this step). If you have files that define your model (e.g., Python scripts, model weights), copy them into this directory. For the kaggle models create step, only the metadata is strictly required, but you'll need files when you create a model variation.3. Initialize model metadata. This creates a
model-metadata.json file.
bash
kaggle models init
text4. Edit the metadata file. Open model-metadata.json and make the following changes:
* Replace "INSERT_OWNER_SLUG_HERE" with your Kaggle username (e.g., "YOUR_USERNAME").
* Replace "INSERT_TITLE_HERE" with your model's title (e.g., "My Awesome AI Model").
* Replace "INSERT_SLUG_HERE" with a URL-friendly version of the title (e.g., "my-awesome-ai-model").
* Fill out the "description" field and other relevant sections like "licenses".5. Create the model.
bash
kaggle models create -p .
text6. Verify on Kaggle.com. Refresh the Models tab in Your Work. You should see "My Awesome AI Model".Tutorial: Create a Model Variation
This tutorial shows how to create a variation under an existing model. A model variation usually represents the model implemented in a specific framework (like TensorFlow, PyTorch, JAX, etc.) and includes the actual model files.
1. Ensure you have a parent model. Follow the "Create a Model" tutorial if you haven't already. Let's assume your model slug is
my-awesome-ai-model and your username is YOUR_USERNAME.2. Prepare your model variation files. In your model directory (e.g.,
my-new-model), create or place the files for this specific variation. For example, a JAX model might have a flax_model.params file.
bash
# In the my-new-model directory
echo "This is a placeholder for JAX model parameters" > flax_model.params
text3. Initialize model variation metadata. This creates model-instance-metadata.json.
bash
# Still in the my-new-model directory
kaggle models variations init
text4. Edit the variation metadata file. Open model-instance-metadata.json and make changes:
* Replace "INSERT_OWNER_SLUG_HERE" with your Kaggle username (e.g., "YOUR_USERNAME").
* Replace "INSERT_EXISTING_MODEL_SLUG_HERE" with your parent model's slug (e.g., "my-awesome-ai-model").
* Replace "INSERT_INSTANCE_SLUG_HERE" with a slug for this variation (e.g., "jax-implementation").
* Replace "INSERT_FRAMEWORK_HERE" with the model framework (e.g., "jax", "tensorflow", "pytorch", "sklearn").
* Update the "instance_size_bytes" if known, and add a "description".5. Create the model variation. This uploads the files in the current directory (e.g.,
flax_model.params) along with the variation metadata.
bash
kaggle models variations create -p .
text6. Verify on Kaggle.com. Go to your model's page on Kaggle by clicking on the model under in the Models tab on Your Work. You should see a new "jax-implementation" variation listed, and it will have one version containing flax_model.params.Tutorial: Create a Model Variation Version
This tutorial explains how to add a new version to an existing model variation, for example, when you have updated model weights or files.
1. Ensure you have a model variation. Follow the "Create a Model Variation" tutorial. Let's assume your variation is
YOUR_USERNAME/my-awesome-ai-model/jax/jax-implementation.2. Prepare your updated files. In your model variation directory (e.g.,
my-new-model), update or add new files for this version. For example, create flax_model_v2.params.
bash
# In the my-new-model directory
echo "Updated JAX model parameters for V2" > flax_model_v2.params
# You might also remove or update flax_model.params if it's being replaced
text3. Create the new model variation version. You need to specify the parent model variation and provide version notes. The files from the -p path will form the contents of this new version.
bash
# Replace YOUR_USERNAME and the slugs for model and variation accordingly
kaggle models variations versions create YOUR_USERNAME/my-awesome-ai-model/jax/jax-implementation -p . -n "Second version with updated parameters"
textNote: The -p . means all files in the current directory will be uploaded as part of this new version. If you only want to upload flax_model_v2.params, ensure only it (and any other V2 files) are in a directory and point -p to that directory, or manage your files carefully.4. Verify on Kaggle.com. Go to your model variation page on Kaggle (e.g.,
YOUR_USERNAME/my-awesome-ai-model/jax/jax-implementation) by clicking on the Models tab on Your Work. You should see a new version (e.g., version 2) listed with your notes and the new files.Tutorial: How to Submit to a Competition
This tutorial walks you through the process of making a submission to a Kaggle competition using the CLI.
1. Find a Competition and Accept Rules.
* First, you need to find a competition. You can list active competitions using
kaggle competitions list.
* For this tutorial, we'll use the "titanic" competition, which is a common starting point. You can find it at https://www.kaggle.com/c/titanic.
Important: Before you can download data or submit, you must* join the competition and accept the competition's rules on the Kaggle website. Navigate to the competition on kaggle.com to do this.2. Create a Directory and Download Competition Files.
* Create a new directory for your competition files and navigate into it.
bash
mkdir titanic-competition
cd titanic-competition
text* Download the competition files. This usually includes training data, test data, and a sample submission file.
bash
kaggle competitions download -c titanic
text* This will download titanic.zip. You'll need to unzip it to see the files (e.g., train.csv, test.csv, gender_submission.csv).
bash
# Make sure you have unzip installed, or use your OS's GUI to extract
# The actual zip file name might vary based on the competition.
unzip titanic.zip
text3. Create Your Submission File.
* The required format for the submission file is specific to each competition. You can find this information on the competition's "Evaluation" page or by examining the sample submission file (e.g., gender_submission.csv for the Titanic competition).
* For the Titanic competition, the submission file needs two columns: PassengerId and Survived. The Survived column should contain your predictions (0 for deceased, 1 for survived).
* Let's create a very simple submission file based on the gender_submission.csv (which predicts survival based on gender). For this tutorial, we'll just copy it and use it as our submission. In a real scenario, you would generate this file from your model's predictions on the test.csv data.
bash
cp gender_submission.csv my_submission.csv
text* Your my_submission.csv should look something like this:
PassengerId,Survived
892,0
893,1
894,0
...
text4. Submit to the Competition.
* Use the kaggle competitions submit command. You need to specify:
* The competition ID (titanic).
* The path to your submission file (-f my_submission.csv).
* A message describing your submission (-m "My first submission via CLI").
bash
kaggle competitions submit titanic -f my_submission.csv -m "My first submission via CLI"
text5. Check Your Submission Status.
* After submitting, you'll get a message indicating success or failure.
* You can check your submission's score and status on the "My Submissions" tab of the competition page on Kaggle.com (e.g., https://www.kaggle.com/c/titanic/submissions).
* You can also list your recent submissions and their scores via the CLI:
bash
kaggle competitions submissions -c titanic
text* This command will show your submission, its status (e.g., complete, error), and your public/private scores if available.
Tutorial: How to Submit to a Code Competition
This tutorial walks you through the process of submitting to a code competition on Kaggle.
1. Find a Code Competition.
* First, you need to find a code competition to participate in. You can browse the available competitions on the Kaggle competitions page. Many Featured Competitions are code competitions.
2. Download the Dataset.
* Once you have chosen a competition, you need to download the dataset. You can do this using the
kaggle competitions download command:
bash
kaggle competitions download -c <competition-name>
text* Replace <competition-name> with the name of the competition you want to participate in.3. Create a Notebook.
* Next, you need to create a Kaggle Notebook to work on your submission. A Kaggle Notebook contains the code and environment settings for Kaggle to run and evaluate your submission. Follow the tutorial on Creating / Updating Notebooks if you're not sure how to do this.
4. Write Your Code.
* Now it's time to write your code! You can use any programming language or framework that is supported by Kaggle. The goal is to create a model that can make predictions on the test set.
5. Submit Your Prediction.
* Once you are happy with your model, you can submit your prediction to the competition. You can do this using the
kaggle competitions submit command:
bash
kaggle competitions submit <competition-name> -k <username>/<notebook-slug> -f <output-filename> -v <notebook-version> -m <message>
text* Replace:
* <competition-name> with the name of the competition
* <username>/<notebook-slug> with the identifier of your notebook
* <output-filename> with the name of the submission file produced by your notebook (e.g. submission.csv).
* <notebook-version> with the version to submit (e.g. 3 to submit the 3rd version of your notebook).
* <message> with a brief description of your submission.6. Check Your Score.
* After you have submitted your prediction, you can check your score on the competition leaderboard. The leaderboard shows the scores of all the participants in the competition. You can download the leaderboard using the
kaggle competitions leaderboard command:
bash
kaggle competitions leaderboard <competition-name>
text---CHANGELOG
Changelog
====
Next
* Add kaggle competitions host-add <comp> -u <user> to grant host access on a competition to a Kaggle user
* Suggest a next step on 403/404/429/5xx API errors, report unexpected errors as bugs instead of a traceback (with a new --debug flag), and list common examples in kaggle --help
* Add kaggle benchmarks quota to show Model Proxy (AI inference) spend quota, and bump kagglesdk to >= 0.1.37
* Add kaggle competitions submission-download <id> to download the submitted file for a single submission (requires kagglesdk >= 0.1.36)
* Add deadline (Competition Deadline) to the competition settings command and bump kagglesdk to >= 0.1.36
* Document that NvidiaTeslaP100 is unusable for GPU compute with the default Kaggle image (PyTorch cu128 omits Pascal sm_60 kernels)
* Add unified kaggle search command across competitions, datasets, notebooks, models, users, and discussions
* Add --wait/--poll-interval to kaggle competitions submit to wait for scoring, and add kaggle competitions submission <ref> to look up a single submission's status and score
2.2.4
* fix(benchmarks): support owner/task separator in benchmark commands (#1146)
* Feat/competition submissions limits (#1144)
* add competitions solution create/status commands (#1141)
* fix(cli): prevent stale file corruption when resuming downloads (#1142)
* fix(cli): fix collaborator role handling in dataset metadata update (#1138)
* Refactor paging to use Protocols (#1137)
* fix(cli): retry transient connection errors in with_retry (#1132)
* Add Kaggle Secrets documentation (#1131)
* Fix model and owner slug validation (#1134)
* Implement ignore_patterns in uploading (combined) (#1130)
* Refactor parser fixtures (#1118)
* fix(auth): avoid skipping auth for programmatic imports (#1117)
* fix(cli): resumable upload start offset when zero bytes uploaded (#1113)
* refactor(cli): reuse _resolve_projection in dataset_status (#1116)
* update supported model list (#1115)
* fix(cli): handle deleted comments in topics show (#1114)
* Add leaderboard subcommand to kaggle benchmarks (#1112)
* feat(cli): add competitions settings update command (#1104)
* feat(cli): add competitions hosts list command (#1107)
* feat(cli): add competitions settings get command (#1103)
* feat(cli): support --page-token and --page-size, preserve --page (#1098)
* feat(cli): expose userRank in competitions list output (#1094)
* fix(cli): read kernel metadata and source files using UTF-8 in kernels_push (#1093)
* Fix crash when running kaggle command with invalid credentials (#1092)
* feat(cli): add competitions data push command (#1085)
* fix(cli): restore fallback for unknown kernel language/type in kernels_pull (#1091)
* fix(auth): prioritize OAuth credentials over anonymous fallback (#1089)
* feat(cli): add competitions pages update command (#1083)
* fix(cli): stop treating subcommand -v as version flag (#1082)
* fix(cli): honor --unzip for cached dataset downloads (#1086)
* feat(cli): add competitions pages delete command (#1084)
* feat(cli): add competitions init and create commands (#1080)
* docs(competitions): add competition_creation.md for new host commands (#1081)
* feat(cli): add competitions launch command (#1079)
* feat(cli): add competitions pages create command (#1078)
* fix(cli): avoid success message after canceled model deletion (#1077)
* fix(cli): avoid success message after canceled dataset deletion (#1073)
2.2.3
* Update --format help text to reference output_format.md (#1074)
* Update kernel pull docs with version example (#1072)
* Reorganize tests and rename unit_tests.py to backend_tests.py (#1071)
* Add support for formatting projections (#1068)
* Rewrite kaggle kernels logs --follow to use SSE log stream (#999)
* Add --format option to CLI commands supporting --csv (#1062)
2.2.2
* Clarify LLMS_AVAILABLE vs. full model set in benchmarks docs (#1061)
* Add kernels topics command (#1056)
* Improve benchmark task error messages in kaggle CLI (#1057)
* Fix dataset metadata column/file description updates and docs (#1055)
* Expand Kaggle CLI skill references (#1054)
* Tag benchmarks token requests with CLI source for analytics (#1050)
* Add machine_shape to kernels_initialize metadata template and docs (#1048)
* Fix 403 for dataset, model, and benchmark topics list (#1051)
* Fix test_benchmarks_cli.py assertions (#1049)
* Add paginated downloads for kernel output files (#1046)
* fix(tests): resolve infinite loop in test_kernels_d_status (#1043)
2.2.1
* Add kaggle competitions team-submissions command (#1036)
* Add kaggle quota command for GPU/TPU accelerator quota (#1029)
* Support optional kernel version in specifier (#1035)
* feat(benchmarks): Add log and download source files (#1019)
* Fix benchmarks CLI error handling and UX improvements (#1024, #1026, #1028, #1030, #1032, #1037, #1039)
* Fix JSON serialization and download label display (#1038, #1040, #1042)
* Set proper permissions on auth file (#1033)
2.2.0
* Add test runner workflow
* Patch discussions code (#1018)
* fix(benchmarks): normalize provider-prefixed and @-containing model s… (#1016)
* fix(benchmarks): handle EOF when selecting models without -m (#1013)
* fix(benchmarks): dual layer rate limiting (#1014)
* Small changes to improve debugging (#1008)
* feat: add forums commands for browsing Kaggle discussions (#993)
* Add competitions topics CLI command (#982)
2.1.2
* Update kagglesdk version
2.1.1
* Add instructions re kagglesdk (#1000)
* fix(benchmarks cli): bugs and additional features (#997)
* Add submission ref to competition submissions output (#989)
* Add Gemini Agent Skill for Benchmarks CLI (#994)
* (Off Platform SDK) add new models (#991)
* fix (cli): kaggle benchmark tasks (#988)
* Update kaggle b init to include example and reference (#990)
* Update API token page URL (#987)
* Update b auth and b init confirmations (#986)
* Enable & document OAuth authentication flow. (#983)
* Add --format flag to datasets status for JSON output (#972)
2.1.0
* Add kaggle benchmarks init command (#981)
* Fix mypy typing checks (#979)
* feat: Implement kaggle benchmark client (#955)
* Update default Python version in cicd CB config
* Make a list (#978)
2.0.2
* Add kaggle benchmarks auth command (#976)
* Create Cloud Build script to run linter (#974)
* Add kaggle kernels logs CLI command (#966)
* Fix(benchmarks tasks push): handle 403 (#971)
* Fix: respect Retry-After header on HTTP 429 responses (#938) (#940)
* Update kagglesdk dependency version to 0.1.19 (#970)
* Support dataset-cover-image.png upload for datasets metadata --update (#969)
* Add CLI commands for simulation episodes and competition pages (#968)
* Feature(benchmarks): implement Kaggle client (push/run functionality) (#960)
2.0.1
* Add --sandbox flag to kaggle competitions submit for sandbox submissions (competition hosts/admins only) (#932)
* Optimize large dataset download functionality (#936, s/o katoue)
* Fix 403s and null file handling when listing kernel session output (#951, s/o 4kaws)
* Support updating more types of dataset metadata through datasets metadata --update:
* Expected update frequency, user specified sources (#958)
* Dataset images (#959)
2.0.0
* General Availability release
* Change more "instance" to "variation"
* Update link for the integration test auth instructions (#926)
* Fix string formatting in upgrade nudge message (#928) Thanks PythonicVarun!
1.8.4
* Rename kaggle-api to kaggle-cli
* Allow auth to happen multiple times (#922)
* Add --acc to set accelerator for: kaggle kernels push ... (#907)
* Add automatic retry and resume to download_file (#905) Thanks katoue!
* Restore model validation check (#902)
* Add file pattern matching in output download (#901) Thanks piotr-ginal!
1.8.3
* Add packaging dep (#883)
* Add version checking against server known-version (#880)
* Fix edit error (#876)
* Use kagglesdk from pypi (#875)
* Fix Kaggle access token auth KeyError when KAGGLE_API_TOKEN is unset (#874)
1.8.2
* Changes to build script
1.8.1
* Fix memory exhaustion when downloading large files (#869)
* Add python-dateutil to pyproject.toml dependencies (#866)
1.8.0
* Fix resumable download error (#865)
* Fix dataset version spec (#862)
* Add machine_shape to the metadata of kaggle kernels pull (#856)
* Add pagination options to models
* Add pagination options for submissions (#832)
* Add pagination options to list commands (#815)
* Add canonical aliases for push/pull (#787)
* Add parquet as a filter option (#786)
* Add variations as alt for instances (#784)
* Enable (and rename) synonyms i and v (#782)
1.7.5.0 (not released)
* Require Python 3.11.
* Add KernelExecutionType (#775)
* Output docker_image as part of the pull metadata (#773)
* Allow user to specify docker_image during kernel push (#774)
* Add kernel version type to save request (#771)
* Add tests for delete and de-flake (#769)
* Rename "yes" params and make confirmation consistent (#765)
* Fix bug that caused double serialization (#764)
* Add kaggle kernels delete (#762)
* Add test for dataset_delete() and make script more robust (#760)
* Check dataset status before uploading (#759)
* Add kaggle datasets delete (#755)
* Fix calls to download_file() (#752)
* Add type annotations for mypy (#746)
* Use Optional[...] in cases where the proto file does (#744)
* Improve some type hints and fix a bug (#741)
* Reformat everything with black (#737)
* Add more type hints (#736)
* Add type annotations to main file (#735)
* Bulk reformat docstrings (#732)
* Merge envars before sending a request (#729)
* Use PROD if no environment is specified. (#726)
* Add a no response action to auto-close issues (#723)
1.7.4.2
* Fix a problem in downloading kernel output files.
1.7.4.1
* Fix a dataset download problem. Datasets that had a license were failing to download.
* Update the documentation to include code competition submit.
1.7.4
Version 1.7.3 was never released. There were errors in versioning on
test.pypi.org. For consistency, we decided to jump several version numbers.
This is the first release since 1.6.17.
The actual changes are described in 1.7.3.
1.7.3
There was an error in versioning. We went from 1.6.17 to 1.7.3.
* Added the ability to submit to a code competition. Some required arguments have been made optional.
* Added a --timeout option to kaggle kernels push to limit the run-time to the specified number of seconds.
* Removed Swagger. Projects that use kaggle/api/kaggle_api.py may be affected. That file is deprecated and will be
removed. Most of its functions still work, but those that involve uploading files no longer work.
The command-line tool uses a higher-level abstraction for uploading, and client code needs
to be converted to use that.
1.7.3b2
* Added the ability to submit to a code competition. Some required arguments have been made optional.
* Added a --timeout option to kaggle kernels push to limit the run-time to the specified number of seconds.
1.7.3b1
* Fix escaped-quote issue in HTTP requests.
1.7.3b0
* Remove Swagger. No user-visible changes to the command-line tool. However, projects that
use kaggle/api/kaggle_api.py may be affected. That file is deprecated and will be removed.
Most of its functions still work, but those that involve uploading files no longer work.
The command-line tool uses a higher-level abstraction for uploading and client code needs
to be converted to use that.
1.6.17
* No changes; release 1.6.16 did not complete.
1.6.16
* No changes; release 1.6.15 isn't usable. We're working on process updates to prevent this from happening again.
1.6.15
* Support XDG base directory specification on Linux
* Disable out-of-date API version warning with -W
* Allow an array of strings in "source" when uploading .ipynb files (thanks to GitHub user mgallifrey for the contribution!)
* Add triton framework for models
* Update model licenses
1.6.14
* No changes; release 1.6.13 isn't usable.
1.6.13
* Add --page-size and --page-token CLI options to all commands that display lists of files.
1.6.12
* Re-release 1.6.11 without the src directory included in the package.
1.6.11
* Allow unauthenticated usage of "datasets download", "datasets files".
* This will only work after April 8th, 2024. More more details, see:
<https://www.kaggle.com/discussions/product-feedback/485439>
* Allow "help" and "version" to be used for all commands, unauthenticated.
* Fix: "dataset download -f" can accept a specific dataset version.
1.6.10
Repackage of 1.6.8 as a new release, to fix the problematic 1.6.9 release.
1.6.9
* Do not use. Problematic release that causes an error:
ModuleNotFoundError: No module named 'kaggle.api'
1.6.8
* Add "gguf"
1.6.7
* Add "TensorRtLlm" model framework.
1.6.6
* Add "GemmaCpp" and "GGML" model frameworks.
1.6.5
* Add "MaxText" model framework.
1.6.4
* Add "Transformers" model framework.
1.6.3
Release date: 01/11/24
* Add "Flax" and "Pax" model frameworks.
1.6.2
Release date: 01/09/24
* Add "Other" model framework.
1.6.1
Release date: 01/08/24
* Fix dataset/model upload.
1.6.0
Release date: 01/04/24
* Release the pre-release branch with models endpoints.
#### 1.6.0a7
Release date: 11/22/23
* Add model_instance_type and base_model_instance_id to ModelInstance
#### 1.6.0a6
Release date: 9/19/23
* Include version_number and version_id in the model-instance-metadata.json file
#### 1.6.0a5
Release date: 8/02/23
* Add Keras model framework.
#### 1.5.16
Release date: 7/17/23
* Fix dataset download bug with locale
* Resumable uploads
* Retry some failed requests
#### 1.6.0a4
Release date: 7/07/23
* Resumable uploads
* Retry some failed requests
* Flag -y to delete model/instance/version without confirmation
#### 1.6.0a3
Release date: 7/06/23
* Confirmation for deleting a model, instance or version
* Merge changes from 1.5.14 and 1.5.15
#### 1.5.15
Release date: 6/30/23
* Add missing licenses for datasets
* Re-add option to pass dataset with -d
* Download / list files for a specific version of a dataset
* Documentation improvements
#### 1.5.14
Release date: 6/29/23
* Show the full error message from the API
* Improve and fix documentation
* Fix kernel's data sources bug, and add the model data source to push/pull
* Implement resumable downloads
* Fix unreachable code bug
* Make some arguments required
* Add enable_tpu to kernel's push/pull
#### 1.6.0a2
Release date: 6/12/23
* Add endpoint to get a modelInstance
* Simplify the modelInstanceVersion creation
* Fix Model files zipping
#### 1.6.0a0
Release date: 6/07/23
* Add Models endpoints
#### 1.5.13
Release date: 2/27/23
* Add ability to add a model to a kernel
1.5.12
Release date: 03/12/21
* No changes
1.5.11
Release date: 03/12/21
* Add support for non-ASCII characters for kernels.
1.5.10
Release date: 11/30/20
* Remove dependency on slugify.
1.5.9
Release date: 10/21/20
* Drop version restriction on urllib3 in setup.py.
1.5.8
Release date: 09/03/20
* No user-facing changes
#### 1.5.7
Release date: 8/31/20
* Add ability to specify the kernel docker image pinning type
* Kernels have internet enabled by default
* Various competitions fixes
#### 1.5.6
Release date: 9/19/19
* Downloading all files for a competition downloads a zip instead of individual files
#### 1.5.5
Release date: 8/30/19
* Add vote count and usability rating to datasets listing
* Add min and max dataset size filters to datasets listing
* Add additional information to dataset metadata API
* Allow updating dataset metdata
#### 1.5.4
Release date: 5/28/19
* Make kernels init more friendly
* Make directories if needed for kernels output
#### 1.5.3
Release date: 2/20/19
* Bump urllib3 version
#### 1.5.2
Release date: 1/28/19
* Don't error on encoding errors when printing tables
* Exit with error code when an exception is caught
#### 1.5.1.1
Release date: 12/5/18
* Add missing cli option for dataset subfolders
#### 1.5.1
Release date: 12/5/18
* Allow custom ca_cert files
* Support uplodaing datasets with subfolders
* Fix kaggle.json permissions warning
#### 1.5.0
Release date: 10/19/18
* Update API to work with new competitions submissions backend. This change will force old API clients to update.
* Update error message when config file is not found.
#### 1.4.7.1
Release date: 8/28/18
* Fix host
#### 1.4.7
Release date: 8/28/18
* Make dataset version -p argument actually optinal
* Don't require the resources field when updating a dataset
* Don't automatically unzip datasets
* Add an unzip option for dataset downloads
* Add validation for kernel title and slug length
* Give a warning if kernel title does not resolve to the specified slug
* Show kernel version number after pushing
* Respect code_file value in kernel metadata when pulling kernels
#### 1.4.6
Release date: 8/7/18
* Allow setting config values through environmental variables
#### 1.4.5
Release date: 8/1/18
* Add error if dataset metadata repeats files
#### 1.4.4
Release date: 7/30/18
* Fix issue with reading kernel metadata
#### 1.4.3
Release date: 7/30/18
* Add more competitions list options
* Add more datasets list options
* Add a couple more fields to kernels list display
* Add support for kernel and dataset ID's
* Allow generating metadata for an existing dataset
* Fix issue with downloading from datasets whose titles don't match their slugs
* Use kernel slug as filename for kernel output
* Make upload and download directory default to current working directory
* Use a default username on downloading kernel or dataset data if none is specified
* Support extended data types on datasets
* Stop requiring -c, -d, and -k arguments
* Don't require resources field in dataset metadata
#### 1.4.2
Release date: 7/20/18
* Validate dataset slug and title length before uploading
* Fix issue with dataset metadata file detection
* Cleaned up KeyboardInterrupt errors
* Validate all specified files in a dataset exist prior to uploading
* Make ApiExceptions (slightly) less ugly
#### 1.4.1
Release date: 7/20/18
* Add python 3.7 compatibility
#### 1.4.0
Release date: 7/19/18
* Add kernels support
List and search kernels
Push kernels code
Pull kernels code
Download kernel output
Get latest kernel run status
#### 1.3.12
Release date: 6/25/18
* Allow setting a 'KAGGLE_CONFIG_DIR' environmental token
* Return metadata file after creating
* Alert users that dataset creation takes time
#### 1.3.11.1
* Fix other invalid tags check
#### 1.3.11
Release date: 6/12/18
* Improve version check
* Fix invalid tags check
#### 1.3.10
Release date: 6/10/18
* Restrict urllib3's version due to requests dependency problem
#### 1.3.9.1
Release date: 6/9/18
* Fix bug with competitions submissions.
#### 1.3.9
Release date: 6/8/18
* Improve error message for closed competitions
* Remove stacktrace on errors
* Print any invalid tags
* Warn if there are no competition files to download
* Implement resumable uploads
* Add subtitle metadata to dataset uploads
* Add progress bars for uploads and downloads
* Add command for downloading competitions leaderboard
* Add command for viewing the top of the leaderboard
#### 1.3.8
Release date: 5/18/18
* Add option to delete all previous dataset versions
#### 1.3.7
Release date: 5/18/18
* Add aliases for subcommands (ex. kaggle c is the same thing as kaggle competitions)
* Add version command
* Show full download path for files
* Remove file size limitation from uploads
#### 1.3.6
Release date: 5/7/18
* Give the option to add tags to datasets.
* Known limitiation - you cannot delete tags through the API. Those changes must be done through the website.
#### 1.3.5
Release date: 5/4/18
* Fix schema declaration in dataset resources
#### 1.3.4
Release date: 4/30/18
* Rename columns to fields
#### 1.3.3
Release date: 4/26/18
* Fix UnicodeEncodeError for certain datasets
* Include Swagger yaml and config files
#### 1.3.2.1
Release date: 4/24/18
* Fix bug with column metadata
#### 1.3.2
Release date: 4/24/18
* Give the option to specify a schema for uploaded datasets
* Give the option to set the dataset description during updates
#### 1.3.1
Release date: 4/19/18
* Give the option to set dataset file descriptions
* Give the option to not convert tabular datasets to csv
#### 1.3.0
Release date: 4/18/18
* Give the option to set the dataset description during creation
#### 1.2.1
Release date: 4/17/18
* Issue #5 - Reformat code for consistency and to align with Google's python coding style. Most of the changes are cosmetic, but most cases of camelCasing other than class names have been changed to snake_case. This is a breaking change for anyone directly using the python code rather than simply using the command line.---
CONTRIBUTING
How to Contribute
We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.
Contributor License Agreement
Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution;
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.
You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.
Code reviews
All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
GitHub Help for more
information on using pull requests.
Community Guidelines
This project follows Google's Open Source Community
Guidelines.---
README
Kaggle CLI
The official CLI to interact with Kaggle.
---
User documentation
---
Key Features
Some of the key features are:
* List competitions, download competition data, submit to a competition.
* List, create, update, download or delete datasets.
* List, create, update, download or delete models & model variations.
* List, update & run, download code & output or delete kernels (notebooks).
* Browse and read discussion forums.
Installation
Install the kaggle package with pip:
sh
pip install kaggle
`
Additional installation instructions can be found here.
Quick start
Explore the available commands by running:
`sh
kaggle --help
`
See the User documentation for more examples & tutorials.
Hosting a competition
End-to-end host commands — scaffold a new competition, author its pages,
tune its settings, and launch it — are documented in
docs/competition_creation.md. Covers
kaggle competitions init, create, pages create, hosts,
settings get, settings update, and launch.
Development
kagglesdk Updates
New features that interact with kaggle.com probably require changes to the Python library, kagglesdk.
Make sure to bump the minimum version required for kagglesdk in the dependencies list specified in
[pyproject.toml][pyproject.toml]]. Make sure the required version is available on the
pypi.org kagglesdk project.
Prerequisites
We use hatch to manage this project.
Follow these instructions to install it.
Run
kaggle from source
#### Option 1: Execute a one-liner of code from the command line
`sh
hatch run kaggle datasets list
`
#### Option 2: Run many commands in a shell
`sh
hatch shell
Inside the shell, you can run many commands
kaggle datasets list
kaggle competitions list
...
`
Lint / Format
`sh
Lint check
hatch run lint:style
hatch run lint:typing
hatch run lint:all # for both
Format
hatch run lint:fmt
`
Tests
Note: These tests are not true unit tests and are calling the Kaggle web server.
`sh
Run against kaggle.com
hatch run test:prod
Run against a local web server (Kaggle engineers only)
hatch run test:local
`
Integration Tests
To run integration tests on your local machine, you need to set up your Kaggle credentials. You can do this by following the authentication instructions.
After setting up your credentials, you can run the integration tests as follows:
`sh
hatch run test:integration
`
Code Coverage
We measure code coverage using pytest-cov.
To run unit tests with coverage and generate reports:
`sh
hatch run test:cov
`
This generates:
* Terminal output with a coverage summary.
* coverage.xml (XML report in the root, used by IDE integrations).
* htmlcov/index.html (HTML report for browser viewing).
#### Editor Integration
##### VSCode
Install the Coverage Gutters extension. After running the coverage command, click the Watch button in the status bar to see coverage indicators in the editor margins.
##### JetBrains Rider
With the Python plugin installed:
* Run with Coverage: Create a Pytest run configuration and click the shield icon ("Run with Coverage").
* Import Report: Go to Tools -> Show Code Coverage Data, click Add (+), and select coverage.xml.
Running
hatch commands inside Docker
This is useful to run in a consistent environment and easily switch between Python versions.
The following shows how to run hatch run lint:all but this also works for any other hatch commands:
`
Use default Python version
./docker-hatch run lint:all
``
Changelog
See CHANGELOG.
Contributing
See CONTRIBUTING.md.
License
The Kaggle CLI is released under the Apache 2.0 license.
---
SECURITY
Security Policy
Supported Versions
Security updates are applied only to the latest release.
Reporting a Vulnerability
If you have discovered a security vulnerability in this project, please report it privately. Do not disclose it as a public issue. This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
Please disclose it at security advisory.
The vulnerabilities will be addressed as soon as possible, with a maximum of 90 days before a public exposure.
---