Luanti.
How SCRIPT//GO scripts run on Luanti: setup, capabilities, protection, limits and the real runs behind its status.
scriptgo-sdk/docs/site/platforms/luanti.mdScripts on Luanti (formerly Minetest) servers, through one regular mod.
This page is generated from the SDK's platform registry (sdk/environments.json) and the adapter's SETUP.md. The Luanti page on the site is the short version.
| Status | Beta: usable, tested on a real runtime, conformance partial |
| Runs on | Server only |
| Languages | Lua 5.1, LuaJIT |
| Protection | Licence check and signed releases |
| Runtime | Luanti 5.18.0 server (LuaJIT 2.1) |
How it runs
One regular Luanti mod, scriptgo, runs the core in the server's Lua and ticks it from a globalstep. It needs no trusted-mod entry; HTTP needs the server owner to list it in secure.http_mods.
The adapter's code and README: sdk/adapters/luanti.
Set up
Build the mod, optionally with resources bundled in:
bashnode sdk/adapters/luanti/build.mjs --with sdk/packages/sg_inventory --with sdk/packages/sg_eventbusCopy
dist/luanti/scriptgo/into the server'smods/folder and enable it for the world (load_mod_scriptgo = trueinworld.mt). It is a regular mod: it needs no entry insecure.trusted_mods.Put further resources in
<world>/scriptgo/resources/<name>/. Every resource withauto_start truestarts with the server, dependencies first.Optional
<world>/scriptgo.json:json{ "resources": { "sg_inventory": { "slots": 30 } }, "convars": { "scriptgo_api": "https://api.scriptgo.dev" }, "permissions": { "alice": ["command.giveitem"] } }
Only the server side runs. HTTP, and so online license checks, needs the mod listed in
secure.http_mods by the server owner.
Capabilities
What the adapter provides. See SDK and capabilities for what each one is.
| Capability | Support | Note |
|---|---|---|
events |
Partial | Server side only; client scripts do not run (Luanti mods are server-side). |
logging |
Supported | |
storage |
Supported | |
players |
Supported | Player names get session-stable integer ids; identifier is luanti:<name>. |
permissions |
Supported | server or scriptgo_admin privilege, then the grants in <world>/scriptgo.json. |
commands |
Supported | Resource commands are ordinary chat commands. |
config |
Supported | |
ui |
Fallback | Notifications are sent as chat messages. |
http |
Partial | Needs the mod listed in secure.http_mods by the server owner. |
licensing |
Partial | |
perks |
Not available | Not switched on: the core implements perks over http and the player identifier, which this adapter has, but it has not been wired or run here. |
presence |
Partial | With http: /link works, and presence reports only in address mode (scriptgo_presence_addr, default off; the owner's decision on it is pending): the normalised address is sent and SCRIPT//GO fingerprints it at once, from core.get_player_ip; Luanti has no HMAC. The identifier is the player name, which is not an account other servers share. Unit-tested through the core; not run on a Luanti server with a connected player. |
Protection
Licence check and signed releases. The host runs plain script, so its operator can read what it loads: no code-secrecy claim.
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 | Supported |
assets |
mod media (textures/, sounds/, models/, media/, locale/, fonts/) in a generated media mod: the engine sends it to every client at join |
environment_asset |
the same media folders |
| Pack | scriptgo pack --target luanti |
Run on Luanti 5.18.0 (official server image): every packed media file was announced to clients with the SHA-1 of its bytes. No client was run.
Asset escrow: Not feasible without forking the engine.
Limits
- No client side.
- HTTP, and so online license checks, only when the server owner allows it.
- Verified headless on Luanti 5.18.0 (LuaJIT); paths that need a connected player are not yet covered by a run.
Real runs
Each row is a scriptgo verify run on Luanti 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 | Luanti 5.18.0 · LuaJIT 2.1.1793275035 | luanti-0.1.0 | 6/6 | 2026-11-09 |
sg_inventory |
1.0.2 | Luanti 5.18.0 · LuaJIT 2.1.1793275035 | luanti-0.1.0 | 6/6 | 2026-11-09 |
sg_permissions |
1.0.2 | Luanti 5.18.0 · LuaJIT 2.1.1793275035 | luanti-0.1.0 | 6/6 | 2026-11-09 |
sg_probe probe |
0.1.0 | Luanti 5.18.0 · LuaJIT 2.1.1793275035 | luanti-0.1.0 | 30/30 | 2026-11-09 |

