The Editor
The Monaco-based script editor: tabs, the file explorer, the console pane, and the toolbar that runs your code.
The editor is the same one VS Code is built on, so autocomplete, multi-cursor, find-and-replace and the keyboard shortcuts all behave the way you expect them to.
File explorer
Left rail. Shows the workspace scripts/ folder. Double-click a file to open it in a new tab.
Tabs
Across the top. Each tab is an independent script — you can keep a hub, a scratch pad and a test harness open at once.
Editor pane
The code itself, with Luau syntax highlighting, autocomplete and inline error markers.
Console pane
Below the editor. Roblox output, your own print and warn calls, and execution errors with a traceback.
Toolbar
Execute, Save and Attach. Attach turns green once the client is injected.
Execute sends the current tab to the attached client and runs it. Nothing is saved to disk first, so you can iterate on a script without leaving files behind.
- Execution is asynchronous — a script that yields does not lock the editor.
- Running the same tab twice runs it twice. If your script connects events, connect guards or you will stack duplicate handlers.
- Errors surface in the console pane with a traceback. debug.traceback() inside your own pcall handlers gives you the rest.
- You can run as many scripts at once as you like; they share one global environment.
-- A connect guard, so re-running a tab does not stack handlers.
if _G.__mytool_connection then
_G.__mytool_connection:Disconnect()
end
_G.__mytool_connection = game:GetService("RunService").RenderStepped:Connect(function(dt)
-- per-frame work
end)Use getgenv() for shared state
Anything you park on getgenv() survives between executions and is visible to every script you run, which makes it the natural place for a "already loaded" flag or a shared config table.
| Shortcut | Does |
|---|---|
| Ctrl + Space | Force the autocomplete list open. |
| Ctrl + F | Find in the current tab. Ctrl + H for replace. |
| Alt + Click | Add another cursor. Ctrl + Alt + Up/Down adds one on the line above or below. |
| Ctrl + / | Comment or uncomment the selection. |
| Ctrl + D | Select the next occurrence of the current word. |
| Ctrl + S | Save the tab into the workspace scripts/ folder. |
| Alt + Shift + F | Reformat the document. |
The pane under the editor mirrors Roblox's own output plus anything your scripts print. It is not the same thing as the rconsole library — that opens a separate OS window your script owns, which is useful when you want output that survives the editor being closed or you want to prompt for input.
rconsolecreate()
rconsolesettitle("my tool")
rconsoleprint("waiting for input...\n")
local answer = rconsoleinput()
rconsoleprint("you typed: " .. answer .. "\n")
rconsoledestroy()The Console chapter documents the whole library, including the coloured rconsoleinfo / rconsolewarn / rconsoleerr variants.