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,liveanddescription. 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
publishedfileidotherwise 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,descriptionandhidden, and of its stats if they are to be checked, each with itsapi_name,nameanddefault
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
--savewrote 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_writesandfriends_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
originpoints 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 logoutsteamship 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 installsteamship 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
| Code | Meaning |
|---|---|
0 | Done |
1 | The upload or login failed; the reason is printed, and for an upload the logs' paths |
2 | check refused the scripts, or the command line was wrong |
3 | Not logged in, or the token expired; run steamship login |
4 | steamcmd is missing or has been altered |
Environment
| Variable | Meaning |
|---|---|
STEAMSHIP_HOME | Where steamcmd, its token and build output live; a per-user folder by default |
STEAMSHIP_ACCOUNT | The build account, if not the one login remembered |
STEAMSHIP_LOGIN | In CI, the login steamship ci set as a secret; upload and status use it |
STEAMSHIP_WEB_API_KEY | The publisher Web API key, for builds and the other Web API commands, before any kept one |
STEAMSHIP_NO_UPDATE_CHECK | Set 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.