CLI reference
Every studio and player command of the depot CLI, with its subcommands and flags.
This page lists the depot commands studios and players use, grouped by task. Each command also prints its own help:
depot --help
depot push --help
depot game page --helpCommon options
These work on every command that talks to Depot:
| Option | What it does |
|---|---|
--api <url> | The API URL. Default: $DEPOT_API, then the default saved by depot auth login. Use https://api.staging.depot.games. |
--json | Machine-readable output, on commands that list it. Most other commands print JSON already. |
-v, -vv, -vvv | More logging (info, debug, trace). RUST_LOG overrides it. |
-h, --help | Help for the command. |
-V, --version | The CLI version. |
Credentials: commands that act for an organization use DEPOT_TOKEN or a key stored with depot auth login first, then the session from depot login. See Install the CLI.
--game takes a game's slug or id. --org takes an organization's id or slug, and defaults to the API key's organization or the only one you belong to. Where --platform is optional, it defaults to the machine you run the command on, such as linux-x64 or macos-arm64.
Account
depot login
Sign in to Depot in the browser. The session is kept in the OS keychain.
| Option | Description |
|---|---|
--no-browser | Print the sign-in URL instead of opening the browser. |
--timeout-secs <n> | Give up after this many seconds. Default 300. |
--json | JSON output. |
depot whoami
Show the signed-in Depot identity and your @handle. Options: --json.
depot logout
Sign out: revoke the session and remove it from the OS keychain.
depot auth
Store an organization API key for an API, or show the current credential. For people, depot login is the usual way in.
| Subcommand | Description | Options |
|---|---|---|
login | Store an organization API key (dpk_…). It's read from standard input or $DEPOT_TOKEN, never from a flag. Also saves the API as the default. | --api <url> (required) |
status | Show the current credential. API key: its organization and permissions. Person: identity and organizations. | |
logout | Forget the stored API key for an API. |
depot auth login --api https://api.staging.depot.games < ci.keyStudio
depot org
Organizations (studios): create, list, members, invitations and the audit log.
| Subcommand | Description | Options |
|---|---|---|
create | Create an organization. You become its owner. | --slug <slug> (3-48 lowercase letters, digits and -), --name <name>, --json |
list | Organizations you belong to. | --json |
show | An organization, and your role and permissions in it. | --org |
members | Members of an organization. | --org |
invite | Invite someone by email. They accept on the invitation page Depot emails them. | --org, --email <email>, --role <role>: owner, admin, publisher or member (default member) |
set-role | Change a member's role. | --org, --user <user id> (see org members), --role <role> |
remove | Remove a member, or yourself to leave. Their access ends on their next request. | --org, --user <user id> |
audit | The organization's audit log, newest first. | --org, --limit <n> (default 50) |
depot api-key
Organization API keys for CI, integrations and agents. Managing keys needs a signed-in person. See CI and agents.
| Subcommand | Description | Options |
|---|---|---|
create | Create a key. Permissions must be a subset of your role. Keys can't manage members or keys. The secret is written to --out (owner-only file) or printed with --print, once. | --org, --name <name>, --permissions <list> (comma-separated resource:action, for example release:publish,channel:write,game:read), --expires-in-days <1-365> (default 90), --out <file>, --print |
list | The organization's keys (never the secrets). | --org |
rotate | Replace a key with the same name and permissions. The old key stops now, or after the grace period. | --org, --id <key id>, --grace-seconds <n> (default 0), --out <file>, --print |
revoke | Revoke a key immediately. | --org, --id <key id> |
Games and builds
depot game
Create, show and edit games and their store pages.
| Subcommand | Description | Options |
|---|---|---|
create | Create a game in an organization. | --org, --slug <slug>, --name <name>, --json |
show <game> | Show a game (public fields). | |
page | Write the game's store page and, optionally, publish it. Prints the page URL. | see below |
art | Upload store art. | --game, --kind <kind>: icon, cover, hero or logo (the game's wordmark, a transparent PNG or WebP), --file <file> |
screenshot | Upload a screenshot and add it to the end of the page's gallery (draft). | --game, --file <file>, --caption <text> |
video | Upload an MP4 for the page (draft). | --game, --file <file>, --purpose <purpose>, --poster <file>, --caption <text> |
update | List the game in the launcher catalog (or unlist it), set its description. | --game, --listed <true|false>, --description <text> |
depot game page options:
| Option | Description |
|---|---|
--game | The game. |
--tagline <text> | The line under the title. |
--short-description <text> | Shown in link previews. |
--description <text> | Plain text: paragraphs, - lists, **bold** and https links. |
--access <access> | free (anyone signed in can claim it), key (redeem a key) or invite (grants only). |
--status <status> | alpha, beta, early-access or released. |
--channel <name> | The channel players install from. Default stable. |
--publish <visibility> | Publish after writing: public (listed) or unlisted (link only). |
--unpublish | Take the page down instead. Players who own the game keep it. |
--listed <true|false> | Also list the game in the Depot launcher's catalog. It shows there while the page is public and free or key only. |
--accent <color> | The page's colour, for example "#e0a030" (Depot adjusts it for contrast), or none. |
--accessibility <list> | Accessibility notes, comma-separated, for example "Full controller support, Subtitles". |
depot game video --purpose: loop plays muted over the hero (up to 30 seconds and 40 MB), trailer plays on request, clip goes in the gallery (default). --poster is the still frame shown before it plays (PNG, JPEG or WebP).
Images for art and screenshot must be .png, .jpg or .webp. More in Store pages.
depot keys
Ed25519 signing keys for your releases. Not game keys: see depot game-keys. Guide: Signing keys.
| Subcommand | Description | Options |
|---|---|---|
generate | Generate a signing key. The private key stays local, in an owner-only file. | --out <file> (default ~/.config/depot/keys/default.json), --force (replace an existing file; the old key is lost) |
enroll | Enroll the key's public half for a game. | --game, --key <file> |
revoke | Revoke a key for a game. | --game, --key-id <key id> |
list | A game's keys and their states. | --game |
depot sign
Sign a release descriptor offline.
| Option | Description |
|---|---|
--descriptor <file> | The descriptor JSON to sign. Required. |
--key-id <key id> | The enrolled key id to sign as. Required. |
--key <file> | The signing key file. Default ~/.config/depot/keys/default.json. |
depot push
Build a release from a folder and publish it. Resumable. Guide: Push builds.
| Option | Description |
|---|---|
--game <game> | The game. Required. |
--release <name> | The release name, for example 1.2.0. Required. |
--input <dir> | The build folder. Required. |
--platform <platform> | The platform, for example windows-x64. Default: this machine. |
--package <name> | The package. Default base. |
--key <file> | The signing key file. |
--content-key <file> | The content key backup file. Default <config>/content-keys/<domain>.json. |
--encrypt | Encrypt even though the game is public. Only matters for older public games. |
--channel <name> | Move this channel to the new release after publishing. |
--note <text> | What's in this release, for players (the store page's "What's new"). Needs --channel. |
--launch-file <file> | JSON array of launch targets: [{"platform": "linux-x64", "path": "bin/game", "args": [], "working_dir": ".", "env": {}}]. |
--rebuild | Ignore a staged build from an earlier, interrupted push. |
--min-chunk-kib <n> | Smallest chunk. Default 512. |
--avg-chunk-kib <n> | Average chunk. Default 2048. |
--max-chunk-kib <n> | Largest chunk. Default 8192. |
--pack-mib <n> | Target pack size. Default 128. |
--zstd-level <n> | zstd compression level. Default 3. |
--parallel <n> | Parallel uploads. Default 4. |
--json | Print the push report as JSON. |
Keep the chunk settings the same from release to release. Changing them moves chunk boundaries, so fewer chunks match earlier releases and more is uploaded and downloaded.
depot release
List or show releases. Guide: Channels and releases.
| Subcommand | Description | Options |
|---|---|---|
list | A game's releases, newest first. | --game, --platform |
show | One release. | --game, --release-id <rel_…> |
depot channel
Move or show channels.
| Subcommand | Description | Options |
|---|---|---|
set | Point a channel at a published release (compare-and-swap). | --game, --platform, --channel <name>, --release-id <rel_…>, --allow-rollback, --note <text> (what changed, for players: the store page's "What's new") |
show | The release a channel points at, and its revision. | --game, --platform, --channel <name> |
Players and access
depot package
Packages of a game, the things players can own: base, dlc, bundle or test.
| Subcommand | Description | Options |
|---|---|---|
create | Define a package. Content packages (base, dlc, test) hold the releases pushed with depot push --package <name>. A bundle includes other packages. | --game, --name <name> (matches depot push --package; default base), --kind <kind> (default base), --title <title>, --includes <ids> (bundle members, package ids, comma-separated), --free-claim (any signed-in player may claim it for free), --json |
list | A game's packages. | --game |
update | Enable or disable a package, or change its title. A disabled package grants nothing new. | --game, --id <package id>, --enabled <true|false>, --title <title> |
depot entitlement
Grant, list or revoke players' entitlements to your packages.
| Subcommand | Description | Options |
|---|---|---|
grant | Grant a package to a Depot user, by user id or @handle. If they already own it, nothing changes. | --game, --package <name or id> (default base), --user <user id>, --handle <@handle>, --ends-at <time> (time-limited access, ISO 8601), --reference <text> (an external reference, such as an order id), --json |
list | Entitlements to your packages. | --game, --package, --user |
revoke | Revoke an entitlement. New downloads and key delivery stop now. Installed copies keep launching. | --game, --id <entitlement id>, --reason <text> |
depot game-keys
Game keys for a package: issue a batch, list, revoke. Not signing keys: see depot keys.
| Subcommand | Description | Options |
|---|---|---|
create | Issue a batch of single-use keys. The codes are delivered once. | --game, --package <name or id> (default base), --quantity <1-1000>, --label <text>, --expires-at <time> (ISO 8601; unredeemed keys stop working after this), --out <file> (codes one per line, owner-only file), --print, --idempotency-key <key> (reuse it to retry safely after a timeout; the same key never issues a second batch) |
list | Batches with available, redeemed and revoked counts. Never codes. | --game |
revoke | Revoke a batch's still-available keys. Redeemed keys keep their entitlements. | --game, --batch <batch id>, --reason <text> |
depot redeem
Redeem a game key into your library. Needs depot login.
depot redeem # paste the key; read from standard input, so it stays out of shell history
depot redeem <code>Options: --json.
depot library
The games you own. Needs depot login. Options: --json.
depot license
Offline licenses for games that use the Depot SDK. The license is stored where the game can read it.
| Subcommand | Description | Options |
|---|---|---|
refresh | Fetch your account's offline license for a game and store it. | --game <slug or id>, --json |
show | The cached license for a game: state, expiry, entitlements. No network. | --game, --json |
depot retail
Retailer delegation: a publisher lets a retailer organization issue keys, and the retailer issues them per order.
| Subcommand | Who | Description | Options |
|---|---|---|---|
delegate | Publisher | Let a retailer organization issue keys for a package, up to a quota. | --game, --package (default base), --retailer <org id>, --quota <n>, --expires-at <time> |
delegations | Publisher | Delegations you granted, for the game's organization. | --game |
revoke | Publisher | Stop a delegation now. Issued keys stay valid unless you pass --revoke-issued-keys. | --game, --id <delegation id>, --revoke-issued-keys |
holdings | Retailer | Delegations you hold and what's left of them. | --org (default: the API key's) |
issue | Retailer | Issue keys for an order. Unique per order id. Codes are delivered once. | --org, --delegation <id>, --order <order id>, --quantity <n> (default 1), --out <file>, --print |
depot access
Hand-issued download grants for restricted games. Players normally get access from their entitlements instead.
| Subcommand | Description | Options |
|---|---|---|
grant | Issue a download grant and write it to an owner-only file, or print it. | --game, --package (default base), --ttl-days <n> (default 7), --max-sessions <n> (default 20), --out <file>, --print |
revoke | Revoke a grant. Its sessions stop working. | --game, --grant-id <dpg_…> |
Tools
depot doctor
Check configuration, API reachability, credentials and, optionally, an installation.
| Option | Description |
|---|---|
--destination <dir> | Also check this installed game: its record, trusted keys and files. |
--json | JSON output. |
It exits with 0 when every check passes and 5 when one fails.
Low-level tools
The CLI also includes the engine underneath Depot. Most studios never need these.
Installing from Depot. depot install --game <game> --destination <dir> installs a game you own, and depot update --destination <dir> follows its channel. depot verify checks an installation against its release, and depot recover finishes or undoes an interrupted install or update. The launcher does all of this for players. Useful options include --platform, --channel, --allow-rollback (accept a channel that moved to an older release), --trust-key <key> (trust exactly this publisher key on first install) and --trust-new-keys (also trust keys enrolled after the first install).
Offline repositories and analysis. These work on local folders and don't talk to Depot:
| Command | Purpose |
|---|---|
build | Chunk a release folder and publish it into a local repository. |
delta | Add zstd patch (delta) frames for an already-published local release. |
inspect | Report file, chunk and pack statistics for a release. |
serve | Serve a repository's packs over HTTP with range support. |
plan | Show the download requests for a release without downloading (dry run). |
bench, bench-chain | Benchmark the pipeline across scenarios and network profiles. |
fixture | Generate deterministic test trees. |
compare | Compare two folders: paths, bytes and executable bits. |
Run any of them with --help for their options.