Skip to content

The dev menu ​

Every TypeTorch game has an in-game developer menu. It ships in the framework, so it updates with every deploy.

  • Open it: the DEV button (devs only), Ctrl+Shift+D, or /tt dev in chat. Framework 0.6.2+ puts the DEV button in Roblox's top-bar row, right of Roblox's own buttons, so it never covers a game's top-left HUD (without a top-bar inset it falls back to the old spot under the bar). A dot on it (and on the Server tab) shows while the server has warnings (yellow) or errors (red).
  • Find anything: the command palette (Ctrl+K, Cmd+K on a Mac, or the search button in the menu header).
  • Who: devs only. The server decides and re-checks every request: the experience owner, members from typetorch.json (after typetorch access push; kernel 0.3.8+), dev-badge holders, anyone in a Studio playtest; minus revoked. Until the server has read the settings record once, members and badge holders are not devs (the owner and Studio are).
  • Only devs receive the code (framework 0.5.6+ with kernel 0.5.6+): the kernel leaves the framework's devtools folder off the client tree every player gets, and the server copies it into each dev's PlayerGui (on join, on every generation, and when someone becomes a dev). Other players never download the menu. On older kernels the folder is in the shared tree as before. A failed copy costs that dev the menu, with a warning, never the generation.
  • Two roles: owner (the experience's creator or the owning group's owner, members with the role "owner", and anyone in a Studio playtest) and dev. A members entry with the old role "admin" counts as a dev.
  • Prod servers are read-only: the dev-only tools are off there. Owners can still switch the server they are in (Server > Branch).
  • The window can be dragged by its header and resized from its corner (double-tap the header to reset). It remembers its panes and windows across swaps.
  • The sidebar, top to bottom: Artifact, Server, Network, Modules, Manage, Logs, Dex, Claude.
  • The header reads <artifact id> #<generation> (in a code font), so a screenshot says which build and generation it came from. The menu is a ScreenGui named TypeTorchDev in PlayerGui. Framework 0.5.2+ stamps it with a TypeTorchGeneration attribute and destroys any TypeTorchDev from an older generation when it starts; two menus on screen on an older framework means the old generation didn't stop cleanly (Troubleshooting).
  • Roblox games can't write to the clipboard, so every Copy opens a small box with the text selected: press Ctrl+C, or long-press > Copy on touch.

Dev-only tools ​

Framework 0.5.0+. Claude, Logs > Upload, Dex edits, Network packet blocking, Server > Experiments and Modules > State's server state for devs who aren't owners, and the hot-swap sound work only:

  • under dev rules (private, reserved and Studio servers on a dev branch): for every dev;
  • on a public server an owner switched to a dev branch (Server > Branch): for owners only.

Everywhere else (every prod server, so every normal public server) they are read-only and say why: "Dev branch only", "Owners only on public servers" or "Owner-switched servers only". Owners keep server state and Server > Experiments everywhere. The rules themselves don't change: TypeTorch.channel, signatures and owner-only rollbacks stay as they are.

Panes and windows ​

Show two pages at once, for example Network > Packets next to Modules > State (framework after 0.3.2).

  • Every page sits in a pane with a small header: the page's name (tap it to pick another page) and four buttons: Split right, Split down, Open in new window and Close.
  • Split adds a pane beside or under this one, on the same page. Drag the line between two panes to resize them.
  • The sidebar opens pages in the focused pane. Tap a pane to focus it; with several panes, the focused one has an orange outline.
  • Windows float over the game. Drag one by its title bar and resize it from its corner; double-tap the title bar to maximise it. The title bar has Minimise, Dock (back into the main panel, next to the focused pane) and Close. A window can be split too. Tap a window to bring it to the front. Windows show and hide with the menu.
  • Some pages open once: Claude, Server > Branch and the Manage pages. Picking one again focuses its pane. Every other page can be open in several panes, each with its own settings (two State panes can show two modules).
  • The layout survives swaps: panes, windows and each pane's settings come back after a hot swap. A fresh join starts with one pane.
  • Panes you can't see don't refresh: closing the menu or minimising a window stops their requests. Panes on the same data share one request, so two panes don't hit the server's limits.
  • Limits: 6 panes in the main panel, 4 per window, 6 windows. On phones and small screens panes only stack (two at most), and windows (3 at most) open maximised with one pane each.

Command palette ​

Framework 0.5.7+. Ctrl+K (Cmd+K on a Mac), or the search button in the menu header (touch has no keyboard), opens the menu if it is closed and a search box over every command you may run right now. The same keys close it.

  • Search is fuzzy: each word you type must match a command's title, a keyword or its group, letter by letter in order (swdev finds Switch to dev branch, srv rel finds Reload this server). On an empty query your recent commands come first (8 at most), then the rest. Some commands (single builds, servers, players, experiments) only show when you type.
  • Keys: Up / Down pick, Enter runs, Shift+Enter opens a page in a split, Escape closes. Clicking a row runs it (Shift+click: in a split).
  • Never while typing: the hotkey does nothing while chat or a text box has focus.
  • Two steps for anything that swaps what runs on the server (reload, roll back, switch, load a build, migrate): the first Enter or tap arms it and the status line says what will happen ("Reload this server (4 players) to its branch head?"); a second one within 4 s runs it. The status line then follows the action.
  • The palette shows only what you may do, but that is cosmetic: the kernel and the server re-check every request.
GroupCommandsWho
Pagesopen any page in the focused pane (Shift+Enter: in a split)dev
PanesSplit right, Split down, Open pane in new window, Close pane, Dock all windowsdev
ServerSwitch to dev branch (or Join a dev branch server; framework 0.6.1+), Reload this server, Roll back this server, Migrate all players to a new server (0.6.1+), New server on this branch (moves only you)the Branch tab's and Server > Status' rules; New server: owners
Branches / Buildsone per Server > Branch row with a button: Switch, Load here, Join, with the same wordsthe Branch tab's rules
ServersJoin server <job id> (a listed server)owners
Playersa player by name, display name or UserId (opens them in Manage > Players), Kick / Ban (opens their card), Player: Teleport to / Bring / Respawn (0.6.1+; "Player: Respawn me" lists without typing)owners
ExperimentsExperiment <name>: use <variant>, Experiment <name>: clear my variant (Server > Experiments)devs where the dev-only tools are open; owners everywhere
Copyjob id, artifact id, commit, branch, place version (the copy box)dev
ClaudeAsk Claude: <what you typed> puts it in the Claude tab's draftdev

"Switch to dev branch" is the branch named dev, else the only dev-channel branch; it doesn't show when the server already runs it or when there are several dev branches and none is named dev.

Tabs ​

Artifact ​

  • The build this client and this server run: artifact id, branch, channel, commit, build time, #seq, asset id, and the notes ("what changed": your --message and the commits since the last deploy).
  • How long things have run: "Running" for the client generation and for the server generation, "Server up" (the server's uptime), and "Built" with the build's age ("2026-10-05 17:51:37 UTC (8m ago)"). They update every 5 s.
  • The generation (<artifact>#<n>) and this server's history of swaps with their timings.
  • Verified badges: two after the server artifact when both signatures check out (Root Key and Fallback Key), one when only one does, none for unsigned dev builds.
  • Signing (kernel 0.3): the mode ("Root Key", "Fallback Key only" or "No keys"), whether this server is signed-only, the key asset and its version, the last key load and error, the last key change, "Rejected" (count and last reason), the public, revoked and fallback keys by fingerprint (tap to copy), the bootstrap heads, and "No trusted prod head" when there is none.

Modules ​

A sidebar group with a Server | Client toolbar:

  • Overview: every running module, its lifecycle hooks, dependencies and onInit time.
  • State (framework 0.3.2): a live state explorer. The roots are every running module (services on the server, controllers on the client) and the persist store. Tap a row to open it: a module's own fields, then tables, arrays, Maps and Sets, 100 entries per page (Prev / Next).
    • Each value has a short preview: strings, numbers, booleans, nil, datatypes, an Instance as its full path, a Player as its name, function, thread, buffer sizes.
    • Raw reads only: no metamethod, getter or function ever runs. A value that is its own ancestor shows as a cycle, with its path.
    • A key filter (open rows stay listed), Refresh, and Auto (every 2 s).
    • Server state: owners everywhere, other devs only where the dev-only tools are open to them (server state can hold player data). Rate-limited and size-capped.
  • Assets: hot assets: each key, its source (KEPT, BAKED, LOADED, FAILED, LOADING), version, load time and last error; on the client, the live copies it sees.

Server ​

  • Status: JobId, server type, uptimes, the build's health window ("3 errors / 30 s"), place version, players, memory, server TPS (kernel 0.4.2+), the last deploy message and how long it took to arrive, recent swaps, and (kernel 0.3.8) Settings: the signed settings record this server holds ("#12, 3m old (sig)"). The senders to your backend each get a line: Fleet API, Error reports (kernel 0.4.0+) and Analytics (with an AnalyticsEngine), plus Detached jobs (kernel 0.3.8+) and the kernel version with its API. Attention lists what needs a look, and the tab shows a badge (red for errors, yellow for warnings):

    Attention itemMeaning
    Kernel update (with Migrate)this server's kernel is older than the newest kernel this framework release knows (0.5.3 in framework 0.7.1): republish the place with the new kernel, then Migrate moves everyone here to a fresh server
    Kernel update required (with Migrate)the kernel's API is too old for this framework (same fix)
    No game runningno build is mounted on this server
    Failed health checka new build failed its health window here in the last 15 minutes and the server went back to the last good one (safe deploys)
    Errors nthe running build keeps erroring after its health window
    Health windowthe new build's window is open: its errors against its limit and the time left, e.g. "1/3 errors, 24 s left" (yellow once an error counted; "no rollback" when health turns it off)
    Health settings / No health windowthe build's health values were out of range (defaults used) / the place doesn't map the kernel's Health module
    Rolled backan automatic or server rollback happened in the last 15 minutes
    Clients failed n / Clients moved nsome players' client side of the build failed to start / those players were moved to another server because their game didn't load here
    No fleet API / Fleet settings / Fleet API failingthe kernel can't send to the fleet API
    No deploy reportsthe kernel is older than 0.3.2
    Booted an unverified prod headthe boot fail-safe ran an unsigned stored build
    No trusted prod headnothing verified for this branch; waiting for a signed deploy
    Keys changed / Keys rotated / Fallback Key revoked / Fallback Key only / No signing keys / Rejected nsigning state (Prod signing)
    Hot asset failed / Hot asset missing / Asset manifesthot assets
    Analytics failing xn / Analytics settings / Analytics dropped nthe analytics uploads fail (with the reason, the fix and the next retry), its settings are invalid, or rows were lost
    HTTP offthe Claude tab and the fleet API need Allow HTTP Requests
    run_luau offLoadStringEnabled is off (dev servers; right for a live game)
    Pinned / A/B experimentthis server holds a pinned build
    Studio: local payloada Studio session runs your local code (Testing in Studio)
    Running the backup build / Moving players out / Backup build failednever an empty server: nothing else could run, the server runs the place's backup build, or moves players out
    Detached job slow / Detached jobs near the capTypeTorch.runDetached jobs run long or near the 256 cap
    Registry, High memorythe settings record can't be read; the server uses a lot of memory
    No settings / Settings refused / Settings unreadable / Settings copy refusedthe settings record is missing, doesn't verify, can't be read, or a newer copy was refused while a good one is kept (typetorch settings status)
    Messaging offline / Messaging busy / Messages droppedTypeTorch.messaging: the kernel can't subscribe, the universe's topic is near its rate limit, or messages were given up
  • Branch: this server (type, branch, channel, the running build, whether it is pinned, and switched by <user> <ago> after an owner's switch), the known branches, and the deployed builds, newest first, grouped by branch (tap a row to see what changed). Framework 0.5.2+ labels each group with the branch's own channel, plus <channel> artifact when the group's newest build has another one (a promoted prod build on a dev branch); older frameworks print the channel of the group's first build. The full record per #seq (action, channel, by) is deployments.jsonl (the deployment log). A row's button says what it does:

    • Switch (a branch): this server follows that branch. Load here (a build): this server runs it (a pin). Both take two taps: a green Confirm, then a locked "Switching..." or "Loading...". Everyone stays in the game.
    • Join: moves only you to a reserved server on that branch or build. Devs who aren't owners get it on public servers.
    • Owners get Switch and Load here on every server, public and prod included (kernel 0.3.4 and framework 0.3.2). On a public server a switch lasts for this server's lifetime only; new servers still boot prod. To go back, switch to prod. Details: Branches and channels.
    • Devs get them on private and reserved servers of dev branches.
    • Reload and Rollback as before. The dev menu allows one swap (reload, switch, rollback, load) per server every 2 s.
    • On older kernels, prod servers show "Use the CLI: typetorch pin" instead of in-place loads.
  • Budget (kernel 0.4.0+): what TypeTorch spends of this server's DataStore, MemoryStore, HTTP and MessagingService limits in the last minute, as bars against Roblox's limits for the player count; who spends it (kernel, devtools, analytics, framework, game); the DataStore budget left (shared with your game's own requests); and memory. Older kernels show one line.

  • Experiments (framework 0.7.1+): pick your own variant of an analytics experiment. The page lists every experiment the game asked about for you (or that the settings name), the variant you're in and why ("random", "forced by the settings", "your pick"), a button per variant and Clear. The palette has the same commands.

    • It only ever changes your own variant, at most one change a second, and only to a variant the game passed to experiment(...). Owners everywhere; other devs where the dev-only tools are open.
    • The pick is stored in the analytics DataStore (TypeTorchAnalytics, key dexp/<UserId>, 32 experiments at most), so it follows you to every server. It wins over the signed settings (stop, settle, weights, players).
    • Your experiment rows are stamped forced while it holds, so the backend leaves you out of the results.
    • The game sees it the next time it asks for your variant, usually your next join ("Rejoin to see it if the game asked already").
    • While the rule doesn't allow you (a dev on a prod server, a revoked role), a stored pick is ignored. "Set for this server only" means the DataStore write failed. Without an AnalyticsEngine the page says "Analytics isn't running on this server."

Manage ​

Owners only. (Called Admin before framework 0.3.2.) Players, Servers and Bans. Every action is re-checked on the server, logged, and rate-limited.

  • Players: each player's role, user id and ping, and the actions: Teleport to, Bring, Respawn, Kick (with a reason), Ban (1 h, 1 d, 7 d or permanent; alt accounts too by default).

  • Servers: the game's live servers (type, branch, channel, build, players, uptime), found by a MessagingService roll call when you open the list (3 s, cached 15 s; no storage; game code gets the same list from TypeTorch.servers()). A summary line per build says how many servers and players run it. Join a server, open a New server on this branch, Shut down a server, Migrate this server.

  • Load a build...: pick a build, then where it runs:

    • This server (players stay);
    • Selected servers (tick them in the list);
    • Share of a branch's servers (5, 10, 25 or 50%, stable per server).

    One summary line says it ("Load #36 on 2 servers"), and the button says the action. A status line under the list follows it ("Loading #36 on 2 servers", "Done: 2 switched"). Other servers on prod take only signed pins, so the card says "Other prod servers: typetorch pin" (pins).

  • Back to branch head: ends the pins on the picked servers, or every A/B server of a branch.

  • Bans: unban by user id, and a user's ban history.

Logs ​

The server's log, your own client's log, and Others (another player's client log, fetched on demand). Filter by level and text; errors are pinned. Dev builds carry [file:line] on $print lines. Kernel notes ([TypeTorch] ... info lines) are dim.

Upload (framework 0.3.2) sends the log shown to the dev PC paired in the Claude tab, which saves it under <repo>/.typetorch/logs/ and prints one line. No Claude run, no prompt used. Not paired: "Pair in the Claude tab first".

Dex ​

A client and server explorer: the instance tree, properties (from ReflectionService), attributes and tags. Selecting an instance highlights it in the world. Right-click or long-press a row for Copy value, Copy name or Copy path (a path you can paste into code). Editing (properties, attributes, tags, delete, clone, move) is a dev-only tool and is logged.

Network ​

  • Packets: a remote spy for your createNetwork traffic: time, direction, path, kind (fire, invoke, response, unreliable), player, size, the guard's verdict (accepted, or why it was rejected), and the decoded arguments. Filter, pause, search, and (where the dev-only tools are open) block one path on your client. Nothing is captured while nobody watches.
  • Stats: per network leaf, messages in and out, rejected and errors, for the server and your client.

Claude ​

Chat with Claude Code running on your own PC, where the dev-only tools are open: remote-claude.

/tt commands ​

They work even when a build is broken. Devs only.

CommandWhat it doesWho
/tt statusbranch, channel, generation, uptime, kernel build, signing modedev
/tt branch <name>switch this server to a branchdevs on private or reserved servers; owners on any server
/tt new <branch> [assetId]open a reserved server on a branch and teleport youdev
/tt reloadload the branch head againdev
/tt rollbackback to this server's previous builddev; owners on prod-channel servers
/tt pin <assetId> / /tt unpinhold this server on a known build / release itdevs on dev servers; owners on any server
/tt bundlesend a debug bundle of this server to the backend (kernel 0.5.3+)dev
/tt devopen the dev menudev
/tt / /tt helplist the commandsdev

Released under the MIT License.