steam-publish

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Steam Publish (Steamworks + SteamPipe)

Steam 发布(Steamworks + SteamPipe)

Take a finished build to a live Steam store page. Two tracks run in parallel and both must be approved before release: the store page (presence) and the build (SteamPipe upload + the release checklists). This skill is the operational checklist; deep build-script, CI/CD, and troubleshooting detail lives in
references/steampipe-build-scripts.md
.
将完成的构建版本发布至Steam商店页面。发布前有两条并行流程必须获得批准:商店页面(展示信息)和构建版本(SteamPipe上传 + 发布检查清单)。本指南为操作清单;关于构建脚本、CI/CD和故障排查的详细内容请查看
references/steampipe-build-scripts.md

When to use

使用场景

  • Use when setting up a Steam app, building/editing the store page, configuring depots and packages, uploading a build via SteamPipe/steamcmd, managing beta branches, or releasing and updating a Steam title.
  • Triggers:
    steam_appid.txt
    , the Steamworks SDK
    tools/ContentBuilder
    ,
    app_build_*.vdf
    ,
    steamcmd
    , "publish on Steam", "depot", "set build live".
When not to use: publishing on itch.io (use
itch-publish
); writing the Steamworks API in-game (achievements/cloud/overlay live in engine SDK integrations, not here); store/financial advice (pricing strategy, tax) — direct the user to Steamworks docs and their own counsel.
  • 适用于Steam应用设置、商店页面创建/编辑、depot和包配置、通过SteamPipe/steamcmd上传构建版本、测试分支管理,以及Steam游戏的发布与更新场景。
  • 触发关键词:
    steam_appid.txt
    、Steamworks SDK的
    tools/ContentBuilder
    app_build_*.vdf
    steamcmd
    、"在Steam上发布"、"depot"、"设置构建版本上线"。
不适用于以下场景: 在itch.io发布游戏(请使用
itch-publish
);编写游戏内的Steamworks API(成就/云存储/ overlay功能属于引擎SDK集成范畴,不在本指南覆盖范围内);商店/财务建议(定价策略、税务等)——请引导用户查看Steamworks文档并咨询专业顾问。

Prerequisites (do these once, in order)

前置条件(按顺序完成一次即可)

  1. Partner account + Steam Direct fee. Each new app requires the Steam Direct recoupable fee (USD $100 per app at time of writing). You receive an App ID — find it on your Steamworks homepage. Treat the App ID as the key to everything below.
  2. A dedicated build account with least privilege. Builds require a Steam account in your partner group with Edit App Metadata and Publish App Changes To Steam. Create a separate build account with only those permissions (not your admin login). Releasing the app additionally needs Manage pricing and discounts.
  3. Download the Steamworks SDK on the upload machine. The SteamPipe tools are under
    tools/ContentBuilder/
    .
Security note: never commit account passwords or the
config.vdf
login token to the repo. See the CI/CD section in the reference for the supported token workflow.
  1. 合作伙伴账号 + Steam Direct 费用。每个新应用都需要支付可收回的Steam Direct费用(撰写本文时为每应用100美元)。你会获得一个App ID——可在Steamworks主页找到它。请将App ID视为后续所有操作的关键。
  2. 权限最小化的专用构建账号。构建版本上传需要合作伙伴群组中的Steam账号具备编辑应用元数据向Steam发布应用变更权限。请创建一个仅拥有这些权限的独立构建账号(不要使用管理员登录账号)。发布应用还需要管理定价与折扣权限。
  3. 在上传机器上下载Steamworks SDK。SteamPipe工具位于
    tools/ContentBuilder/
    目录下。
安全提示:切勿将账号密码或
config.vdf
登录令牌提交至代码仓库。请参考文档中的CI/CD章节了解支持的令牌工作流。

Core workflow

核心工作流程

  1. Configure the app (App Admin).
    • Set launch options (executable path + args per OS) under Installation. For a sub-folder exe, put the sub-folder in the Executable field — no leading slashes/dots.
    • Add depots on the Depots page (a depot is a bucket of files). Name each depot ("Base Content", "Windows Content"). Leave [All languages] / [All OSes] unless the depot is genuinely OS- or language-specific.
    • Grant yourself the depots: add them to your Developer Comp package on the Associated Packages & DLC page, or you won't own the content you upload.
    • Publish the configuration. Unpublished config is the most common cause of upload failures.
  2. Build the store page (presence track). Fill graphical assets, description, tags, trailers, system requirements. When complete, click Mark as ready for review. Store review takes ~3-5 business days; submit at least 7 days before you want it live. It must be in Coming Soon for at least 2 weeks before release.
  3. Create your build scripts. Start with the simple app-build
    .vdf
    in Patterns below; for multi-depot/multi-platform apps use depot scripts (see the reference). The script maps local files into depots and names where build output/logs go.
  4. Bootstrap steamcmd and upload. Run
    steamcmd
    once to self-update, then run the build (Patterns). steamcmd chunks files (~1 MB), uploads only changed chunks, and registers a global BuildID.
  5. Set the build live on a branch. Go to
    https://partner.steamgames.com/apps/builds/<AppID>
    , pick the build, Preview Change, then Set Build Live Now for a branch. Test on a beta branch first (see
    references/steampipe-build-scripts.md
    for branch setup).
  6. Run the Game Build checklist and Mark as ready for review (store presence must be submitted before the build review). Both tracks must be approved.
  7. Release manually. When approved and Coming Soon has run its time, use the green Release App button → Publish NowRelease Now. Approved titles do not release themselves.
  8. Update later by uploading a new build and setting it live on
    default
    (manually) or shipping to a beta branch first. See
    references/steampipe-build-scripts.md
    .
  1. 配置应用(应用管理员操作)
    • 在「安装设置」下配置启动选项(各操作系统对应的可执行文件路径 + 参数)。如果可执行文件位于子文件夹,请在可执行文件字段中填写子文件夹路径——不要加前导斜杠/点。
    • 在「Depot管理」页面添加depot(depot是文件存储容器)。为每个depot命名(如"基础内容"、"Windows内容")。除非depot确实是特定操作系统或语言专属,否则保留「所有语言」/「所有操作系统」设置。
    • 为自己分配depot权限:在「关联包与DLC」页面将depot添加到你的「开发者测试包」中,否则你无法拥有自己上传的内容。
    • 发布配置。未发布的配置是导致上传失败最常见的原因。
  2. 创建商店页面(展示信息流程)。填写图形资源、描述、标签、预告片、系统要求。完成后点击「标记为待审核」。商店审核需要约3-5个工作日;请至少在计划发布前7天提交。发布前商店页面必须处于「即将推出」状态至少2周
  3. 创建构建脚本。从下方示例中的简易app-build
    .vdf
    脚本开始;多depot/多平台应用请使用depot脚本(参考相关文档)。该脚本用于将本地文件映射到depot,并指定构建输出/日志的存储位置。
  4. 初始化steamcmd并上传。运行一次
    steamcmd
    进行自我更新,然后执行构建操作(参考示例模板)。steamcmd会将文件分割为约1MB的块,仅上传变更的块,并生成一个全局BuildID
  5. 在分支上设置构建版本上线。访问
    https://partner.steamgames.com/apps/builds/<AppID>
    ,选择构建版本,点击「预览变更」,然后为目标分支点击「立即设置构建版本上线」。请先在beta分支上测试(分支设置请参考
    references/steampipe-build-scripts.md
    )。
  6. 执行游戏构建检查清单并标记为待审核(商店展示信息必须在构建版本审核前提交)。两条流程都必须通过审核。
  7. 手动发布。当审核通过且「即将推出」时长满足要求后,点击绿色的「发布应用」按钮 →「立即发布」→「立即上线」。已通过审核的游戏不会自动发布
  8. 后续更新:上传新版本构建,然后手动在
    default
    分支设置上线,或先发布到beta分支。详情请查看
    references/steampipe-build-scripts.md

Patterns

示例模板

1. SteamPipe ContentBuilder layout (Steamworks SDK)

1. SteamPipe ContentBuilder 目录结构(Steamworks SDK)

text
tools/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 here
text
tools/ContentBuilder/
  builder/         steamcmd.exe (Windows)   <- 运行一次完成初始化
  builder_linux/   steamcmd (Linux)
  builder_osx/     steamcmd (macOS)
  content/         <- 最终可运行的构建版本存放于此(玩家将获取的文件)
  output/          构建日志 + 块缓存(可安全删除;能加速重新上传)
  scripts/         <- 你的*.vdf构建脚本存放于此

2. Minimal app build script —
scripts/app_build_1000.vdf

2. 极简应用构建脚本 ——
scripts/app_build_1000.vdf

text
// 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
            }
        }
    }
}
text
// AppID 1000 搭配一个depot(1001):递归上传../content下的所有文件。
// VDF是Valve键值对格式:"key" "value",用大括号实现嵌套。请根据你的应用调整ID。
"AppBuild"
{
    "AppID"       "1000"                 // 你的App ID
    "Desc"        "1.0.0 launch build"   // 仅内部可见;可在「你的构建版本」页面查看

    "ContentRoot" "..\content\"          // 待上传文件的根目录(相对于本文件的路径)
    "BuildOutput" "..\output\"           // 日志 + 块缓存存储路径

    "Depots"
    {
        "1001"                           // 你的Depot ID
        {
            "FileMapping"
            {
                "LocalPath"  "*"         // ContentRoot下的所有文件
                "DepotPath"  "."         // 映射到depot根目录
                "recursive"  "1"         // 包含子文件夹
            }
        }
    }
}

3. Upload the build (Windows; substitute the platform builder elsewhere)

3. 上传构建版本(Windows平台;其他平台请替换对应目录下的builder)

bat
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 ^
  +quit
text
What 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.
bat
REM 从SDK目录运行。先初始化一次,再执行构建。请使用构建账号,不要使用管理员登录账号。
tools\ContentBuilder\builder\steamcmd.exe ^
  +login <build_account> <password> ^
  +run_app_build ..\scripts\app_build_1000.vdf ^
  +quit
text
执行过程:steamcmd自我更新 -> 登录账号 -> 为每个depot将文件哈希为约1MB的块 -> 仅上传新增的块 -> 写入depot清单 -> 生成全局BuildID。此时构建版本并未上线;请按照上述工作流程设置上线。

4. Iterate safely with a preview build (uploads nothing)

4. 使用预览构建安全迭代(不会上传任何内容)

text
// 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"
text
// 在AppBuild块中添加以下配置,可在不上传的情况下验证文件映射:
"Preview" "1"     // 仅在BuildOutput中输出日志和文件清单
// 如需在构建成功后自动设置到BETA分支上线(切勿用于'default'分支):
"SetLive" "beta-qa"

Pitfalls

常见陷阱

  • The
    default
    branch cannot be set live automatically.
    SetLive
    only works for a beta branch; you must set the default (customer) build live by hand in App Admin. Plan releases around this.
  • Store page must be approved before the build. You cannot submit the build for review until store presence is submitted; both must pass, and Coming Soon must run ~2 weeks.
  • Titles never auto-release. Even after approval, a human must click Release App at the chosen moment.
  • Mac/Linux install nothing. Almost always: the OS-specific depots aren't in the package. Add every depot to the package on Associated Packages & DLC.
  • Unpublished app config. "Failed to get application info" / build errors usually mean depots, launch options, or the App ID config were never Published.
  • status = 6
    on build.
    The build account lacks permission for the App ID, or
    ContentRoot
    /
    LocalPath
    points at the wrong (empty) path.
  • Committing the login token. The
    config.vdf
    Steam Guard token and account password are secrets. Keep them out of the repo; use the CI workflow in the reference.
  • Released-app safety delay. Changing the build account's email/phone forces a 3-day wait before you can set a build live for a released app — don't reconfigure the account right before launch.
  • default
    分支无法自动设置上线
    SetLive
    仅对beta分支生效;你必须在应用管理页面手动设置默认(面向用户)的构建版本上线。请据此规划发布时间。
  • 商店页面必须先于构建版本通过审核。商店展示信息未提交前,无法提交构建版本审核;两者都必须通过审核,且「即将推出」状态需持续约2周。
  • 游戏永远不会自动发布。即使通过审核,也必须由人工在指定时间点击「发布应用」按钮。
  • Mac/Linux平台无安装内容。几乎都是因为特定操作系统的depot未添加到包中。请在「关联包与DLC」页面将所有depot添加到包中。
  • 未发布的应用配置。「获取应用信息失败」/构建错误通常意味着depot、启动选项或App ID配置从未发布
  • 构建时出现
    status = 6
    错误
    。原因是构建账号缺少对应App ID的权限,或
    ContentRoot
    /
    LocalPath
    指向错误(空)路径。
  • 提交登录令牌
    config.vdf
    中的Steam Guard令牌和账号密码属于敏感信息。请勿提交至代码仓库;请参考文档中的CI工作流。
  • 已发布应用的安全延迟。修改构建账号的邮箱/电话后,针对已发布应用设置构建版本上线会强制触发3天等待期——切勿在发布前重新配置账号。

References

参考资料

  • For advanced multi-depot/multi-platform build scripts,
    FileExclusion
    /
    FileProperties
    , beta-branch setup, the CI/CD login-token workflow, and the SteamPipe troubleshooting table, read
    references/steampipe-build-scripts.md
    .
  • Primary docs: Steamworks "Uploading to Steam" (
    partner.steamgames.com/doc/sdk/uploading
    ), "Release Process" (
    /doc/store/releasing
    ), "Branches (Betas)" (
    /doc/store/application/branches
    ), "Depots" (
    /doc/store/application/depots
    ).
  • 如需了解高级多depot/多平台构建脚本、
    FileExclusion
    /
    FileProperties
    、beta分支设置、CI/CD登录令牌工作流以及SteamPipe故障排查表,请阅读
    references/steampipe-build-scripts.md
  • 官方文档:Steamworks「上传至Steam」(
    partner.steamgames.com/doc/sdk/uploading
    )、「发布流程」(
    /doc/store/releasing
    )、「分支(测试版)」(
    /doc/store/application/branches
    )、「Depot」(
    /doc/store/application/depots
    )。

Related skills

相关指南

  • itch-publish
    — the same game shipped on itch.io with
    butler
    (often done alongside Steam).
  • game-jam
    /
    prototype-fast
    — earlier stages of the same project's lifecycle.
  • itch-publish
    —— 使用
    butler
    在itch.io发布同款游戏(通常与Steam发布同步进行)。
  • game-jam
    /
    prototype-fast
    —— 同一项目生命周期的早期阶段。