NEOLearn

The Scripts panel

Watch and control the running game's scripts from the Studio, check them, generate neo.d.ts and neo.pyi, and use the matching commands.

Updated October 17, 2026

On this page

The Scripts panel shows every script the running game is executing and lets you edit, reload, pause and unload them while the game runs. It also runs Check, which compiles your scripts, validates the [script] manifest and writes the type declarations your editor uses.

Open it from Project ▾ ▸ Scripts…. Esc, Close or a click outside closes it. It works the same in the browser Studio and on the desktop.

What the panel shows#

The header line shows the simulation tick, the world's script hash chain and how many scripts are running, for example tick 1200 · hash chain 3fa2… · 1 running.

Running#

One row per running script:

ShownMeaning
NameThe script, for example assets/scripts/twist.js.
Who it runs asThe creator (your game's own scripts), or a player and their roles.
StateRunning or paused.
Fuelfuel <used> / <budget> per tick (<percent>%): how much of its per-tick budget it used last tick.
FaultsHow many times it has faulted, and the last fault's first line in red.
State hashA hash of the script's state, which shows whether two runs agree.

Each row has Edit, Reload, Pause or Resume, and Unload.

Script files (not running)#

Script files in the project's assets/scripts/ (.js and .py) that aren't running, each with Edit and Load.

Log#

Log (loads, reloads, moderation) lists every load, reload, refusal and moderation action.

If the game has no scripting, the panel says how to turn it on: the game needs the script plugin and a [script] section in neo.toml. Projects made from the GASP template have scripting on.

The controls#

ButtonWhat it does
EditOpens the script in Source mode. Saving it there hot-reloads it in the running game and keeps its this.state.
ReloadReloads the script from its file.
Pause / ResumeStops running the script's handlers, and starts them again.
UnloadRemoves the script from the running game.
LoadStarts a script file that isn't running.
CheckCompiles and validates everything (below).
Live reload: on / offTurns hot reload on save on or off.

Hot reload on save is on by default. The Live reload: on button in the panel's header turns it off (it then reads Live reload: off), as does editor.scripts.live_reload {on}.

Check#

Check is the panel's test runner. It:

  1. compiles every script file in assets/scripts/;
  2. validates the [script] section of neo.toml against the kinds and fields the game exposes;
  3. writes the generated declarations next to your scripts: assets/scripts/neo.d.ts for JavaScript and assets/scripts/neo.pyi for Python;
  4. runs the game's own script tests, if it has any.

The result shows at the top of the panel, green when everything passed and red with the problems when something didn't. The declaration files describe exactly what your scripts may touch (the kinds, fields and methods your manifest grants), so the code editor can check and complete your code against them. Run Check again after you change the manifest.

Commands#

Everything in the panel is also a command, so agents and tests can do the same:

CommandWhat it does
editor.scripts.panel {open}Shows or hides the panel.
editor.scripts.filesThe project's script files and whether each is running.
editor.scripts.edit {name}Opens a script in Source mode.
editor.scripts.checkRuns Check and returns its report.
editor.scripts.live_reload {on}Turns hot reload on save on or off.
script.listThe running scripts, their fuel, faults and hashes, the hash chain and the log.
script.load {name, source, ...}Loads or hot-reloads a script.
script.pause, script.resume, script.unload {name}Pause, resume and unload a script.
script.types {format}The generated declarations, as ts, py, md or json.
script.apiThe creator's script API as JSON.

The script.* commands and their options are covered in Script commands.

Next steps#