Godot 4.
How SCRIPT//GO scripts run on Godot 4: setup, capabilities, protection, limits and the real runs behind its status.
scriptgo-sdk/docs/site/platforms/godot.mdScripts in Godot 4 games, through a Lua add-on.
This page is generated from the SDK's platform registry (sdk/environments.json) and the adapter's SETUP.md. The Godot 4 page on the site is the short version.
| Status | Beta: usable, tested on a real runtime, conformance partial |
| Runs on | Server and client |
| Languages | Lua 5.4, LuaJIT |
| Protection | Licence check and signed releases, planned |
| Runtime | Godot 4.5.2 with lua-gdextension 0.7.0 (Lua 5.4 or LuaJIT) |
How it runs
An autoload node, ScriptGoHost, creates a Lua state through the lua-gdextension addon, runs the core in it and ticks it from _process. Server and local client share the game process.
The adapter's code and README: sdk/adapters/godot.
Set up
Measured with Godot 4.5.2 and lua-gdextension 0.7.0 (0.8.x needs Godot 4.6).
Copy
addons/lua-gdextensionfrom the lua-gdextension release into the project.Copy
scriptgo_host.gdandscriptgo_watchdog.gdfromsdk/adapters/godot/tores://addons/scriptgo/and register them as autoloads, watchdog first:ini[autoload] ScriptGoWatchdog="*res://addons/scriptgo/scriptgo_watchdog.gd" ScriptGoHost="*res://addons/scriptgo/scriptgo_host.gd"Import once (
Godot --headless --import --path <project>, or open the editor) so the extension is registered.Point the host at the SDK (
sdk_root,--scriptgo-sdk <dir>, or a copy underres://addons/scriptgo/sdk/), then boot it:gdscriptfunc _ready(): ScriptGoHost.boot({ "config": { "permissions": { "1": ["inventory.*"] } } }) ScriptGoHost.add_search_path(ScriptGoHost.sdk_path + "packages") ScriptGoHost.add_resource(ScriptGoHost.sdk_path + "packages/sg_inventory") ScriptGoHost.start_all() ScriptGoHost.join(1, "Player")
The host ticks from _process. There is no HTTP yet, so licensed packages do not run on Godot.
Capabilities
What the adapter provides. See SDK and capabilities for what each one is.
| Capability | Support | Note |
|---|---|---|
events |
Supported | |
logging |
Supported | |
storage |
Supported | JSON files at user://scriptgo/storage/<key>.json, written with FileAccess. |
players |
Partial | Single local player (id 1) joined by the scene; ScriptGoHost.join adds simulated ones. |
permissions |
Supported | Privileges per player id from the config passed to ScriptGoHost.boot. |
commands |
Supported | |
config |
Supported | Per-resource values and convars from the config passed to ScriptGoHost.boot. |
ui |
Supported | Queued for the scene (ScriptGoHost.notified signal) and logged; the demo draws them as toasts. |
http |
Not available | Not implemented: no outbound HTTP from resources yet. |
licensing |
Not available | Needs http. |
perks |
Not available | Needs http, which this adapter does not have. |
presence |
Not available | Needs http, which this adapter does not have. |
Protection
Licence check and signed releases, once the adapter has HTTP. The adapter is script-level, so the operator can read what it loads; a native GDExtension loader would be a later upgrade.
See Protect your work for what protection does and does not do.
Assets
Maps, models, textures, sounds and other files players download. See Selling assets.
| Support | Bundled with the resource |
assets |
files of the resource (resource.readFile) |
environment_asset |
files of the resource |
No game client downloads anything: assets are files of the resource.
Asset escrow: The host can read containers itself, but its operator holds the key: at-rest encryption only.
Limits
- Needs the lua-gdextension addon, 0.7.0 for Godot 4.5 (it declares 4.4 as its minimum; the 0.8.x binaries are built for Godot 4.6 and refuse 4.5.2).
- No HTTP, so no online license checks.
- Single-player only: no real network between server and client.
- Measured with Godot 4.5.2 on Windows x86_64, headless and windowed, with the Lua 5.4 and LuaJIT builds of lua-gdextension 0.7.0; exported builds, macOS, Linux, mobile and Web are not measured yet.
Real runs
Each row is a scriptgo verify run on Godot 4 itself, not on a mock or an emulator: the package started there and its own tests reported back. Rows marked probe are SCRIPT//GO's conformance probes, which exercise the runtime and are never published as packages. See how a status is earned.
| Script | Version | Ran on | Adapter | Checks passed | Date |
|---|---|---|---|---|---|
sg_eventbus |
1.0.2 | Godot 4.5.2-stable · Lua 5.4 | godot-0.1.0 | 8/8 | 2026-11-09 |
sg_inventory |
1.0.2 | Godot 4.5.2-stable · Lua 5.4 | godot-0.1.0 | 8/8 | 2026-11-09 |
sg_permissions |
1.0.2 | Godot 4.5.2-stable · Lua 5.4 | godot-0.1.0 | 8/8 | 2026-11-09 |
sg_probe probe |
0.1.0 | Godot 4.5.2-stable · Lua 5.4 | godot-0.1.0 | 32/32 | 2026-11-09 |

