Loading...
Loading...
Publish or update a game on Steam with Steamworks and SteamPipe: configure depots and packages, upload builds with steamcmd, set a build live on a branch, and run the release checklists. Use for Steam publishing, app_build.vdf/steamcmd uploads, depots, beta branches, or a store page release.
npx skill4agent add gamedev-skills/awesome-gamedev-agent-skills steam-publishreferences/steampipe-build-scripts.mdsteam_appid.txttools/ContentBuilderapp_build_*.vdfsteamcmditch-publishtools/ContentBuilder/Security note: never commit account passwords or thelogin token to the repo. See the CI/CD section in the reference for the supported token workflow.config.vdf
.vdfsteamcmdhttps://partner.steamgames.com/apps/builds/<AppID>references/steampipe-build-scripts.mddefaultreferences/steampipe-build-scripts.mdtools/ContentBuilder/
builder/ steamcmd.exe (Windows) <- run once to bootstrap
builder_linux/ steamcmd (Linux)
builder_osx/ steamcmd (macOS)
content/ <- your final, runnable build goes here (the files players get)
output/ build logs + chunk cache (safe to delete; speeds up re-uploads)
scripts/ <- your *.vdf build scripts live herescripts/app_build_1000.vdf// AppID 1000 with one depot (1001): upload everything under ../content recursively.
// VDF is Valve KeyValues: "key" "value", braces for nesting. Adjust IDs to your app.
"AppBuild"
{
"AppID" "1000" // your App ID
"Desc" "1.0.0 launch build" // internal only; visible in Your Builds
"ContentRoot" "..\content\" // root of files to upload (relative to this file)
"BuildOutput" "..\output\" // logs + chunk cache
"Depots"
{
"1001" // your Depot ID
{
"FileMapping"
{
"LocalPath" "*" // all files from ContentRoot
"DepotPath" "." // mapped to the depot root
"recursive" "1" // include subfolders
}
}
}
}REM Run from the SDK. Bootstrap once, then build. Use a build account, not your admin login.
tools\ContentBuilder\builder\steamcmd.exe ^
+login <build_account> <password> ^
+run_app_build ..\scripts\app_build_1000.vdf ^
+quitWhat happens: steamcmd self-updates -> logs in -> for each depot, hashes files into ~1 MB
chunks -> uploads only NEW chunks -> writes a depot manifest -> finishes with a global
BuildID. The build is NOT live yet; set it live per the workflow above.// Add to the AppBuild block to validate file mappings without uploading:
"Preview" "1" // outputs logs + a file manifest into BuildOutput only
// And to auto-set live on a BETA branch after a successful build (never 'default'):
"SetLive" "beta-qa"defaultSetLivestatus = 6ContentRootLocalPathconfig.vdfFileExclusionFilePropertiesreferences/steampipe-build-scripts.mdpartner.steamgames.com/doc/sdk/uploading/doc/store/releasing/doc/store/application/branches/doc/store/application/depotsitch-publishbutlergame-jamprototype-fast