返回首页

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 分支)。该接口会:

  1. 校验 App ID 是合法范围的正整数。
  2. 调 Steam 的 appdetails 接口确认游戏真实存在,并取回规范名与 capsule 图。这是 generate 流程中我们唯一一次触碰 Steam API 的地方。
  3. 用 SteamTools 标准的 CDN 布局拼出 manifest URL 和 lua URL。
  4. 把两个 URL 连同校验过的游戏元信息、简短的放置说明一起返回。

整个往返通常耗时 200–400 ms。

4. 你放置文件

结果卡片上有两个按钮。"Manifest" 按钮下载 appmanifest_<APPID>.acf,"Lua" 按钮下载对应的 Lua 脚本。卡片下方还有两段纯文本 URL,方便你用 curlwget 复刻同样的下载。

URL 下方有一段简短的步骤说明:

  1. 如果没有,先在 SteamTools 同级目录建一个 depotcache
  2. 把 manifest 放进 depotcache
  3. 把 Lua 放进 SteamTools/scripts
  4. 重启 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