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 需要的字段。具体包括:
appidname(从appdetails解析)installdirbuildid(最新 public build,或你指定分支的 build)MountedDepots,每个 depot 一条
我们不带 UpdateLocalTime、UserConfig、LastOwner,因为 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 之外,还有 beta 或 ptb 分支。生成器在 UI 上暴露了一个 "Branch" 字段;如果你填了它,返回的 manifest 和 Lua 会指向该分支的 build,而不是 public build。默认值是 public。
分支名必须与 Steam 上显示的完全一致。常见值有 public、beta、beta_1、ptb、experimental。如果你不确定要哪个,留空就会拿到 public build。
关于下架应用
如果一个游戏已经从 Steam 下架,本生成器里的 manifest 和 Lua 也许还能下到,但已经不能用了。SteamTools 上游同样无法为已下架应用拿到可工作的 build,SteamDB 也不行。没有 workaround —— 唯一继续使用下架应用的方式是在它下架前保留一份安装,且永不卸载。
延伸阅读
- 故障排查指南 涵盖了生成器会返回的四种错误及对应的修法。
- SteamTools 上游文档 解释 manifest 与 lua 放好之后 SteamTools 会拿它做什么。
- SteamDB 应用页 是
buildid和 depot 列表的权威来源。