返回首页

Steam manifest 文件详解

appmanifest_*.acf 文件是什么、里面装了什么、SteamTools 为什么需要它。

最近更新: 2026-06-29

每用 SteamTools 解锁一个游戏,都需要两个文件。本页把第一个文件 —— appmanifest_<APPID>.acf —— 讲得足够细,让你能在文本编辑器里直接打开一份看明白每一行在做什么。Lua 文件是简单的另一半(只是告诉 SteamTools 要加载哪些 depot 的小脚本);让人犯迷糊的总是 manifest。

文件是什么

manifest 是一段文本文件,格式是 Valve 自家的 "ACF"(Application Configuration File)。ACF 是一种带分节头的 key-value 格式,跟 INI 差不多。Steam 会在 steamapps 目录里为你装过的每一个应用写一份这样的文件。命名约定是 appmanifest_<APPID>.acf,其中 <APPID> 就是这个游戏的 App ID。

要让 SteamTools 工作,你需要在它会扫描的目录里放一份这样的文件(通常是 <SteamTools>/depotcache/)。

manifest 里面装了什么

一份真正的 appmanifest_400.acf(Portal)长这样:

"AppState"
{
    "appid"         "400"
    "name"          "Portal"
    "installdir"    "Portal"
    "StateFlags"    "4"
    "UpdateLocalTime"   "Wed Jan  1 12:34:56 2025"
    "buildid"       "1234567"
    "LastOwner"     "12345678901234567"
    "BytesToDownload"   "0"
    "BytesDownloaded"   "0"
    "AutoUpdateBehavior" "0"
    "UserConfig"
    {
        "language"   "english"
    }
    "MountedDepots"
    {
        "400"    "2345678"
    }
}

知道要看哪里之后,这些字段大多数是一目了然的。SteamTools 真正关心的只有两个:

  • appid —— App ID。必须与文件名一致。
  • MountedDepots —— 从 depot ID 到该 depot 当前 build ID 的映射。SteamTools 用它来知道每个 depot 要拉取哪个 build。

生成器实际给你什么

从本站请求 manifest 时,你拿到的是一份小文本文件,里面只装 SteamTools 需要的字段。具体包括:

  • appid
  • name(从 appdetails 解析)
  • installdir
  • buildid(最新 public build,或你指定分支的 build)
  • MountedDepots,每个 depot 一条

我们不带 UpdateLocalTimeUserConfigLastOwner,因为 SteamTools 不读它们;而从别人的 manifest 里复制它们只会指向别人的 Steam 安装,不是你的。

30 秒讲清 Lua 文件

Lua 文件(你下载的两份文件里的第二份)是个非常小的脚本,告诉 SteamTools 这个 app 要加载哪些 depot。一份典型的 400_public.lua 看上去大致是:

addappid(400, 1, "abcdef0123456789abcdef0123456789")
setmanifest("2345678", "1234567890abcdef1234567890abcdef")
  • addappid(<appid>, 1, <depot_key>) 注册 app 并提供主 depot 的解密密钥。
  • setmanifest(<depot_id>, <manifest_id>) 让 SteamTools 拿到这个 depot 的具体 build。

生成器从 Steam 公开数据中推导出 depot key 和 manifest ID。没有别的秘密。

为什么 SteamTools 两个文件都要

  • manifest 告诉 SteamTools 要加载哪个 build
  • Lua 告诉 SteamTools 怎么加载它(哪些 depot、哪个解密密钥)。

只有 manifest 没有 Lua,SteamTools 不知道 depot 怎么解密。只有 Lua 没有 manifest,SteamTools 不知道要拉哪个 build。两个文件缺一不可,且 App ID 必须对得上。

关于分支

有些游戏除了 public 之外,还有 betaptb 分支。生成器在 UI 上暴露了一个 "Branch" 字段;如果你填了它,返回的 manifest 和 Lua 会指向该分支的 build,而不是 public build。默认值是 public

分支名必须与 Steam 上显示的完全一致。常见值有 publicbetabeta_1ptbexperimental。如果你不确定要哪个,留空就会拿到 public build。

关于下架应用

如果一个游戏已经从 Steam 下架,本生成器里的 manifest 和 Lua 也许还能下到,但已经不能用了。SteamTools 上游同样无法为已下架应用拿到可工作的 build,SteamDB 也不行。没有 workaround —— 唯一继续使用下架应用的方式是在它下架前保留一份安装,且永不卸载。

延伸阅读