Back to home

How SteamTools.games works

A four-step walkthrough of how the manifest + Lua generator works under the hood.

Last updated: 2026-06-29

The whole site is one tool: type a game name, get a working manifest and Lua pair for SteamTools. There is nothing to install, nothing to sign up for, and nothing stored on a server after the page renders. This page walks through what happens between the moment you press a key and the moment the two files land on your disk.

1. You type a game name

The input box on the home page debounces your keystrokes by 250 ms and then asks our /api/search endpoint for a short list of matches. The endpoint proxies Steam's public store search and returns the top five results, each with the App ID, the display name, and a small capsule image.

There is no local index. Every search is a live round-trip to Steam.

2. You pick a result

Clicking a result in the dropdown sets two hidden state values: the App ID (an integer) and the game name. The input box updates to the display name, and the "Generate" button becomes enabled.

If you already know the App ID and would rather skip the search step, you can paste it directly into the input box. The generator detects a 4–7 digit number and skips the lookup.

3. The generate request

Clicking Generate sends a POST /api/generate request with the App ID (and an optional branch name — useful for Steam beta branches). The endpoint:

  1. Validates that the App ID is a positive integer in the legal range.
  2. Calls Steam's appdetails endpoint to confirm the game actually exists and to fetch the canonical name and capsule image. This is the one and only place we touch Steam's API for the generate flow.
  3. Builds the manifest URL and the Lua URL using the standard SteamTools CDN layout.
  4. Returns both URLs along with the validated game metadata and a short list of placement instructions.

The whole round-trip usually takes 200–400 ms.

4. You place the files

The result card gives you two buttons. The "Manifest" button downloads appmanifest_<APPID>.acf. The "Lua" button downloads the matching Lua script. The card also shows the two URLs in plain text so you can copy them and use them with curl or wget if that is your workflow.

A short instruction block below the URLs tells you, in order:

  1. Create a depotcache folder next to SteamTools if you don't have one.
  2. Drop the manifest file in depotcache.
  3. Drop the Lua file in SteamTools/scripts.
  4. Restart SteamTools.

That is the whole flow. There is no installer, no daemon, no background process. The site never touches your machine beyond the two downloads you explicitly click.

What runs in the browser

The home page itself is a server-rendered TanStack Start app. After hydration, the only JavaScript that runs is:

  • The debounced search input.
  • The result card copy-to-clipboard helper.
  • The "Recent" strip that reads from localStorage.

No third-party scripts. No analytics. No tag manager.

What runs on the server

  • The Nitro server, which serves the routes and bundles the paraglide message modules.
  • The two API routes, both in src/routes/api/.
  • A 1.5 s per-IP rate limiter on /api/generate and a 300 ms one on /api/search.
  • Edge-level request logging for abuse detection. Logs are rotated every 14 days.

What the service does not do

  • It does not modify any game files on your machine.
  • It does not bypass Steam's DRM, license checks, or authentication.
  • It does not store your search history on a server.
  • It does not require an account, an email, or a phone number.

If you ever want to confirm the service is doing what it says, the entire server side is in src/routes/api/ and src/server.ts of the open-source project. The client side is in src/blocks/generator.tsx.