steamship 0.8.1

Commands

Every command steamship takes and every option, generated from its own command line, so this page and steamship --help say the same thing. steamship help <command> prints any of these at a terminal.

steamship login

Log in to Steam, once, for uploads.

Asks for the account's name when none is given or remembered, then the password, and a Steam Guard code or approval in the Steam Mobile app. What you type is passed directly to steamcmd, never logged or saved. At a terminal it then offers to keep the publisher Web API key, which builds and the other commands that ask Steam's Web API use, in the system's credential store.

steamship login [OPTIONS]
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered
--web-api-key
Only keep the publisher Web API key, checked with Steam first, without logging in

steamship status

Show the login and steamcmd, checking the login with Steam.

Shows the home, the build account and steamcmd, then logs in with the login steamcmd saved, as an upload does, and says whether Steam takes it. Nothing is asked for.

steamship status [OPTIONS]
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered

steamship check

Check the build scripts, without logging in.

Reads an app build script and every depot script it names, and refuses anything that would upload the wrong thing.

steamship check <SCRIPT>
<SCRIPT> required
The app build script, such as steam/app_build.vdf

steamship upload

Check, build and upload, then print the build ID.

Runs check, then the build, with steamcmd out of sight, and says the build's ID and the branch it was set live on.

steamship upload [OPTIONS] --version <VERSION> <SCRIPT>
<SCRIPT> required
The app build script, such as steam/app_build.vdf
--version <VERSION> required
The version being shipped, which with the commit becomes the build's description
--preview
Valve's dry run: the whole build is computed and logged, and nothing is uploaded
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered
--json
Once steamcmd has run, print what came of it on standard output as one line of JSON: outcome, app, build_id, branch, live and description. Everything else goes to standard error

steamship workshop

Upload a Workshop item, then print its ID.

Checks a workshopitem script and what it names, then has steamcmd upload the item with the saved login. A script with no publishedfileid makes a new item, whose ID is printed to add to the script so that later uploads update the same item. In CI that is refused without --new, since every run would make another.

steamship workshop [OPTIONS] <SCRIPT>
<SCRIPT> required
The item script, such as workshop/item.vdf
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered
--new
Make a new item from CI, which a script with no publishedfileid otherwise is not

steamship builds

Show an app's branches and last builds.

Lists each branch with the build live on it, then the last builds uploaded, through Steam's partner Web API, with the publisher key from STEAMSHIP_WEB_API_KEY, or else the one login kept; at a terminal, one is asked for when there is neither.

steamship builds [OPTIONS] <APP>
<APP> required
The app, by its ID or its app build script
--count <COUNT> default 10
How many of the last builds to list

steamship achievements

Show an app's achievements and stats, or check them against a file.

Lists the achievements and stats Steam holds for the app, in English, through Steam's partner Web API with the publisher key as builds finds it. With --check, compares them with a file by API name, and exits 2 naming every achievement missing on either side and every display name, description, hidden flag or icon that differs; and the same of the stats, their display names and defaults, when the file lists them. Nothing on Steam is changed.

steamship achievements [OPTIONS] <APP>
<APP> required
The app, by its ID or its app build script
--check <FILE>
A JSON file of the achievements the app should have, each with its api_name, name, description and hidden, and of its stats if they are to be checked, each with its api_name, name and default

steamship assets

Check store and library artwork against Valve's sizes, before it is uploaded.

Reads every PNG, JPEG and icon in the folder, each named for the asset it is (header_capsule.png, library_logo.png, screenshot_01.jpg), and exits 2 naming every one that is not the size or format Steamworks takes, is named for no asset, or cannot be read, and too few screenshots. Nothing is sent anywhere.

steamship assets <FOLDER>
<FOLDER> required
The folder the artwork is kept in, such as steam/store

steamship drm-wrap

Wrap a Windows executable in Steam DRM, before it is uploaded.

Has Valve's servers add the app's Steam DRM to the executable, through steamcmd with the saved login, and replaces the executable with the wrapped one, or writes that to --output. Nothing is replaced unless the wrap succeeded. Valve's tool adds DRM only to an executable that already imports GetModuleHandleA, which Godot's do not, and says so when it refuses one.

steamship drm-wrap [OPTIONS] <APP> <EXECUTABLE>
<APP> required
The app, by its ID or its app build script
<EXECUTABLE> required
The Windows executable, such as build/windows/game.exe
--output <FILE>
Write the wrapped executable here instead of replacing the one given
--compatibility
Valve's compatibility mode, for an executable the default wrap breaks
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered

steamship settings

Show an app's settings in Steamworks, or check them against a snapshot.

Asks Steam, through steamcmd with the saved login, for the settings made in Steamworks that a build depends on: the app's name, type and systems, its install folder, launch options and runtime, its depots' systems, and Steam Cloud. --save keeps them in a file beside the build scripts, in Valve's own format; --check exits 2 naming every setting that differs from that file. Nothing on Steam is changed.

steamship settings [OPTIONS] <APP>
<APP> required
The app, by its ID or its app build script
--save <FILE>
Write the settings to this file, replacing it, to check against later
--check <FILE>
Compare the settings with this file, as --save wrote it
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered

steamship leaderboards

Show an app's leaderboards, or check them against a file and make those missing.

Lists the leaderboards Steam holds for the app, through Steam's partner Web API with the publisher key as builds finds it. With --check, compares them with a file by name, and exits 2 naming every leaderboard missing on either side and every setting that differs. With --create too, those in the file that Steam lacks are made first, as the file has them. Steam keeps an existing leaderboard's settings and scores, so none is ever changed, made again or deleted.

steamship leaderboards [OPTIONS] <APP>
<APP> required
The app, by its ID or its app build script
--check <FILE>
A JSON file of the leaderboards the app should have, each with its name, sort, display, trusted_writes and friends_only
--create
Make the file's leaderboards that Steam lacks, before checking

steamship rich-presence

Upload an app's rich presence localisation.

Sends Valve's rich presence files, one per language, through Steam's partner Web API with the publisher key as builds finds it. Each language's tokens on Steam are replaced by the file's, so a token taken out of the file is gone from Steam after the upload. Files are checked first: a token that does not start with #, a token twice, or a text referring to tokens that none starts as, and nothing is sent while one is wrong.

steamship rich-presence [OPTIONS] <APP> <FILES>...
<APP> required
The app, by its ID or its app build script
<FILES> required
The rich presence files, such as steam/rich_presence_english.vdf
--preview
Check the files and show what would be sent, without sending anything

steamship promote

Set an uploaded build live on a branch.

Sets a build live on a beta branch without uploading it again, through Steam's partner Web API, with the publisher key as builds finds it. The default branch is set live in Steamworks only.

steamship promote --build <BUILD> --branch <BRANCH> <APP>
<APP> required
The app, by its ID or its app build script
--build <BUILD> required
The build, by its build ID
--branch <BRANCH> required
The branch to set it live on

steamship branch

Set the description players see for a beta branch.

Sets the text Steam shows for a beta branch where players choose one, in the game's Betas properties, through Steam's partner Web API with the publisher key as builds finds it. The default branch's is set in Steamworks only.

steamship branch --description <DESCRIPTION> <APP> <BRANCH>
<APP> required
The app, by its ID or its app build script
<BRANCH> required
The beta branch
--description <DESCRIPTION> required
Its new description, such as the version live on it

steamship ci

Set up uploads from CI, the login kept as a secret.

Finds the GitHub repository, its app build script and the saved login, checks the script, and the login with Steam, then sets the login as a secret with the GitHub command line, gh, and shows the workflow step that uploads. What it cannot find it asks for, and each option answers ahead. The secret holds the token steamcmd saved, never a password.

steamship ci [OPTIONS]
--script <SCRIPT>
The app build script, if not the one found in the repository
--repo <REPO>
The GitHub repository as owner/name, if not the one origin points at
--account <ACCOUNT> or STEAMSHIP_ACCOUNT
The build account, if not the one the last login remembered
--secret <SECRET> default STEAMSHIP_LOGIN
The name of the secret the login is kept in
--output <OUTPUT>
Write the login to this file instead, for a CI other than GitHub Actions

steamship logout

Forget the saved login.

Removes the login steamcmd saved, the account steamship remembered and the Web API key kept for the Web API; the next upload needs steamship login first.

steamship logout

steamship init

Write starter build scripts for an app.

Writes an app build script, and a depot build script for each depot, into steam/, commented, in Valve's own format, for check and upload to read. Without --depot, the one depot is the app's ID plus one, shipping build/. Nothing already there is overwritten.

steamship init [OPTIONS] <APP>
<APP> required
The app's ID, from Steamworks
--depot <ID=FOLDER>
A depot and the folder its files ship from, such as 1001=build/windows; once for each depot
--folder <FOLDER> default steam
The folder the scripts are written into

steamship install

Install or verify the pinned steamcmd.

login and upload do this themselves; this does it ahead of time, as in CI.

steamship install

steamship completions

Print tab completion for bash, zsh, fish, PowerShell or elvish.

Print tab completion for bash, zsh, fish, PowerShell or elvish, for the shell to load.

bash: steamship completions bash > ~/.local/share/bash-completion/completions/steamship zsh: steamship completions zsh > "${fpath[1]}/_steamship" fish: steamship completions fish > ~/.config/fish/completions/steamship.fish PowerShell: steamship completions powershell >> $PROFILE

steamship completions <SHELL>
<SHELL> required
The shell to complete in

Exit codes

CodeMeaning
0Done
1The upload or login failed; the reason is printed, and for an upload the logs' paths
2check refused the scripts, or the command line was wrong
3Not logged in, or the token expired; run steamship login
4steamcmd is missing or has been altered

Environment

VariableMeaning
STEAMSHIP_HOMEWhere steamcmd, its token and build output live; a per-user folder by default
STEAMSHIP_ACCOUNTThe build account, if not the one login remembered
STEAMSHIP_LOGINIn CI, the login steamship ci set as a secret; upload and status use it
STEAMSHIP_WEB_API_KEYThe publisher Web API key, for builds and the other Web API commands, before any kept one
STEAMSHIP_NO_UPDATE_CHECKSet to anything to never ask GitHub for a newer release

There is no password setting anywhere: a password is typed at steamship login and passed straight to steamcmd.