New in ShotBase

shot adopt: the tools on a plain Luau game17 Oct 2026New

shot adopt <folder> runs the shot tools on a Roblox game mirrored to disk as plain Luau, converting nothing.

Events on another bus16 Oct 2026New

event ItemSold(...) on ShopBus puts an event on a bus module of your own instead of EventBus.

Who may publish an event16 Oct 2026New

event CoinsGiven(...) published by Wallet, Shop names the systems that publish it; shot check flags any other publish.

Rules that always hold16 Oct 2026New

invariant WalletServer.CoinsInRange names a function that checks a rule, and shot run checks it after every frame of every scenario.

Saved data lock16 Oct 2026New

shot savelock records each saved section's shape; shot check flags a change that no Version bump and Migrate step covers.

Declared start order16 Oct 2026New

function Start() after Wallet.Start says which start runs first, and shot check checks the order of the start calls.

Owned fields16 Oct 2026New

owns Purse.Coins via WalletServer.Grant: a write to the field from another system is an error naming that function.

Id kinds15 Oct 2026New

id ProductId declares a kind of string id, and shot check catches a misspelt one and names the id you meant.

Typed events15 Oct 2026New

Declare an event once in a system's Types.shot, and shot check checks every publish and every listener against it.

What a member reads and connects to15 Oct 2026New

shot needs Bank.Give lists the state it reads and who writes it, and shot show lists what a member connects to.

One page for the task at hand14 Oct 2026New

shot brief takes what you are about to do and prints one page: the systems it touches, their rules and members.

Errors that name the fix14 Oct 2026New

A use that finds nothing or an unknown type says how to fix it, and a mistyped command suggests the nearest one.

Plain Luau files in a project13 Oct 2026New

Keep .luau files beside your .shot files: they build as they are, are type checked, and use reaches them.

Super calls the parent class13 Oct 2026New

In a class that extends another, super.new(...) and super:Name(...) call the parent's constructor and methods.

A map of the whole project12 Oct 2026New

shot graph writes one page of every system, what it uses and its events, and marks events nobody sends or hears.

Declare which systems a system uses12 Oct 2026New

List a system's uses in its Types.shot, and shot check flags every link you didn't plan and every pair that would use each other.

Interfaces and required functions12 Oct 2026New

implements and required are promises shot check keeps: every member an interface lists, every function the game must call.

Match on string unions12 Oct 2026New

Branch on a string union's value with match, and shot check names every value a match doesn't handle yet.

Follow code across systems12 Oct 2026New

shot trace Bank.Give shows what runs after it, through calls, events and remotes. --up shows what leads to it.

Rename a member everywhere12 Oct 2026New

shot rename Wallet.Add Deposit renames a member and every real use of it, then checks the project.

The use keyword instead of require12 Oct 2026New

use Bank requires the nearest module named Bank, looking up through the folders.

Doc sections and checked code names12 Oct 2026New

doc and rootdoc take Rules and Extend sections, and shot check flags a backticked name that no longer exists.

Find your way around from the terminal12 Oct 2026New

shot map, outline, show, find, refs and wiring answer with the file and line of what you asked for.

Every mistake at its line12 Oct 2026New

shot check reports parse errors, ShotScript's rules and Luau type errors at the .shot line and column.

Classes, modules and funcs in plain Luau12 Oct 2026New

Declare one class, module or func per .shot file, and the build writes the metatables, types and Types module.