SteamTools.games 是怎么工作的
对 manifest + lua 生成器背后原理的四步拆解。
最近更新: 2026-06-29
整个站点只有一个工具:输入一个游戏名,得到一对能直接给 SteamTools 用的 manifest 与 lua 文件。无需安装、无需注册、页面渲染完之后服务端也不会留下任何东西。本页把"按下第一个键"到"两个文件落地"之间发生的事情完整讲清楚。
1. 你输入游戏名
首页的输入框会对你按键做 250 ms 的去抖,然后请求我们自己的 /api/search 接口。该接口是 Steam 公开 store 搜索的代理,返回前 5 条匹配结果,每条带上 App ID、显示名、一个小尺寸的 capsule 图。
没有本地索引,每次搜索都是到 Steam 的实时往返。
2. 你选择一条结果
点击下拉里的某一条,会在内部设置两个状态值:App ID(整数)和游戏名。输入框更新为显示名,"Generate" 按钮变为可用。
如果你已经知道 App ID,也可以直接把它粘贴进输入框跳过搜索。生成器会识别 4–7 位数字并跳过查表步骤。
3. generate 请求
点击 Generate 会发出 POST /api/generate,带上 App ID(以及可选的 branch 名,用于 Steam 的 beta 分支)。该接口会:
- 校验 App ID 是合法范围的正整数。
- 调 Steam 的
appdetails接口确认游戏真实存在,并取回规范名与 capsule 图。这是 generate 流程中我们唯一一次触碰 Steam API 的地方。 - 用 SteamTools 标准的 CDN 布局拼出 manifest URL 和 lua URL。
- 把两个 URL 连同校验过的游戏元信息、简短的放置说明一起返回。
整个往返通常耗时 200–400 ms。
4. 你放置文件
结果卡片上有两个按钮。"Manifest" 按钮下载 appmanifest_<APPID>.acf,"Lua" 按钮下载对应的 Lua 脚本。卡片下方还有两段纯文本 URL,方便你用 curl 或 wget 复刻同样的下载。
URL 下方有一段简短的步骤说明:
- 如果没有,先在 SteamTools 同级目录建一个
depotcache。 - 把 manifest 放进
depotcache。 - 把 Lua 放进
SteamTools/scripts。 - 重启 SteamTools。
整个流程就是这样。没有安装器,没有守护进程,没有后台任务。除了你主动点的那两次下载,网站不会碰你电脑上的任何东西。
浏览器里跑什么
首页本身是 TanStack Start 服务端渲染的应用。Hydration 之后真正在客户端跑的 JavaScript 只有:
- 去抖搜索输入。
- 结果卡片的"复制 URL"小工具。
- 从
localStorage读"最近"那条横栏。
没有第三方脚本、没有分析、没有标签管理器。
服务端跑什么
- Nitro 服务,承载路由并打包 paraglide 消息模块。
- 两个 API 路由,都在
src/routes/api/下。 /api/generate每个 IP 1.5 s 限速,/api/search每个 IP 300 ms 限速。- 边缘节点的请求日志,仅用于防滥用。每 14 天滚动清理。
服务不会做什么
- 不会修改你电脑上的任何游戏文件。
- 不会绕过 Steam 的 DRM、授权或登录校验。
- 不会把搜索历史存到服务端。
- 不会要你注册账号、邮箱或手机号。
如果你想验证服务确实按它说的方式工作,整个服务端代码在开源项目的 src/routes/api/ 和 src/server.ts。客户端在 src/blocks/generator.tsx。