ShotBase
The language and its checker.
Declare one class, module or func per file and write a system's types once. shot check reports every mistake at its line and column, from parse errors to Luau type errors. ShotRBX and ShotSystem both build on it.
New
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.
Docs
OverviewWrite your Roblox game as classes, modules and funcs in plain Luau, and ShotScript writes the metatables, types and boilerplate around them.FilesLay out a project the way Roblox sees it: a folder per system, one declaration per file, and Roblox paths everywhere.ClassesDeclare a class in one block, its fields, constructors and methods side by side, and ShotScript writes the metatable and the types for you.ModulesKeep one shared table of properties and functions for the whole game: a registry, a service or a catalog.FuncsPut a single function in a file of its own and require it wherever you need it.TypesWrite a folder's types once in its Types.shot and every file of the folder can use them by name, with imports from other systems in the same place.UsesWrite down which systems each system may use, and shot check catches every link you didn't plan and every pair of systems that would use each other.EventsDeclare an event once in a system's Types.shot, and shot check checks every publish and every listener against it.Id kindsDeclare a kind of string id, like id ProductId, and shot check catches every misspelt id in the game and names the one you meant.Owned fieldsGive a field to its system with owns Purse.Coins via WalletServer.Grant, and shot check names that function at every write from anywhere else.Start orderSay which start runs first with function Start() after Wallet.Start, and shot check checks the order of the calls in the start script.Saved data lockSaved.lock records the shape each saved section promises to existing saves, and shot check reports a change no Version bump and Migrate step covers.InvariantsDeclare a rule that must always hold with invariant WalletServer.CoinsInRange, and shot run checks it after every frame of every scenario.MatchBranch on a string union with match. Add a value to the union and shot check points at every match that doesn't handle it yet.InterfacesPromise that several classes share the same methods and fields, then pass any of them wherever the interface is the type.Doc commentsDocument members with doc { } and whole files with rootdoc { }, and shot check makes sure every code name you put in backticks still exists.The shot commandCheck and build your project from the terminal, and find your way around its code, from a map of every system down to each real use of a member.RulesLook up any error shot check prints: what causes it, and how to fix it.Luau tipsGet past the Luau type checker traps that cost the most time, each with the exact error it prints and the fix.CompiledSee the plain Luau your ShotScript turns into: a Rojo layout on disk, and strict Luau for every class, module and func.
