.NET kit.
How SCRIPT//GO scripts run on .NET kit: setup, capabilities, protection, limits and the real runs behind its status.
scriptgo-sdk/docs/site/platforms/dotnet.mdA library that C# engines and servers embed to run Lua, TypeScript and JavaScript scripts.
This page is generated from the SDK's platform registry (sdk/environments.json) and the adapter's SETUP.md. The .NET kit page on the site is the short version.
| Status | Experimental: first real runs passed, more to measure |
| Runs on | Server and client |
| Languages | Lua 5.4; TypeScript; JavaScript |
| Protection | Code escrow |
| Runtime | .NET 10, with KeraLua 1.4.9 (Lua 5.4) and Jint 4.17.0 |
How it runs
An embedded host kit: ScriptGo.Host, a .NET 10 library that a C# engine or server references and ticks from its own loop. It runs Lua 5.4 (KeraLua) and JavaScript or TypeScript (Jint) side by side, one VM per resource side and language. Its console host, scriptgo-dotnet, runs the verification.
The adapter's code and README: sdk/dotnet.
Set up
The .NET kit is a library (ScriptGo.Host, .NET 10) that a C# engine or server embeds, plus a
console host (scriptgo-dotnet) that runs and verifies resources without an engine. It runs Lua
resources (Lua 5.4 through KeraLua) and TypeScript or JavaScript resources (Jint). It is
experimental and has been measured on Windows x64 only.
Install the .NET 10 SDK. The
scriptgoCLI finds it on thePATH, inDOTNET_ROOT, in the default install folder, or through--dotnet <path>/SCRIPTGO_DOTNET.Verify a resource on the kit. The first run builds the console host; TypeScript entries are compiled with esbuild into a temporary copy (the source folder is not changed):
bashscriptgo verify resources/sg_inventory --env dotnet scriptgo verify resources/my_ts_resource --env dotnet --lang tsRun resources with the console host. It loads compiled TypeScript (
x.ts.jsnext tox.ts), which ascriptgo packarchive contains:bashdotnet sdk/dotnet/ScriptGo.Host.Standalone/bin/Release/net10.0/scriptgo-dotnet.dll run resources/sg_inventory --search resources --for 2000Privileges, per-resource values and convars come from a JSON file (
--config), as in the standalone host;--data <dir>keeps storage in JSON files instead of memory:json{ "permissions": { "1": ["inventory.give"] }, "resources": { "sg_inventory": { "slots": 12 } }, "convars": { "scriptgo_api": "https://api.scriptgo.dev" } }
To embed the kit in an engine, see sdk/dotnet/README.md.
Player perks
Player perks (ScriptGo.perks, docs/spec/perks.md): the server asks SCRIPT//GO which of the operator's perks a player has. It needs the server linked to the operator's account (Dashboard, Perks, Servers) and the link's token, a secret, in the host's settings.
{ "convars": { "scriptgo_api": "https://api.scriptgo.dev", "scriptgo_server_token": "sg_srv_..." } }Lua guests have ScriptGo.perks: the kit runs the portable perks module in the guest, over
IHostHttp and IHostPlayers.Identifier (the engine's own account id). JavaScript and TypeScript
guests do not have it yet: capability_unavailable:perks@dotnet. The cache is kept in memory.
Capabilities
What the adapter provides. See SDK and capabilities for what each one is.
| Capability | Support | Note |
|---|---|---|
events |
Supported | |
logging |
Supported | |
storage |
Supported | The integrator's IHostStorage; the console host keeps it in memory, or in JSON files with --data. |
players |
Partial | The console host simulates players; an integrating engine supplies its own through IHostPlayers. |
permissions |
Supported | |
commands |
Supported | |
config |
Supported | |
ui |
Fallback | The console host writes notifications to its log; an engine implements IHostUi. |
http |
Supported | HttpClient off the host thread; the answer is delivered on the next tick. |
licensing |
Supported | Through the kit's HTTP, against the SCRIPT//GO API (checked against the API schemas by --stub-api). |
perks |
Partial | Lua guests: the kit runs the core's perks module in the guest, over IHostHttp and IHostPlayers.Identifier. JavaScript and TypeScript guests do not have it yet (capability_unavailable). |
presence |
Partial | Lua guests: the kit runs the core's presence module over IHostHttp, IHostPlayers.Identifier and the optional IHostPlayerAddresses, with .NET's HMACSHA256. JavaScript and TypeScript guests do not have it (capability_unavailable). Proven in the kit's tests with a fake API (reports, removal, /link), and by sg_probe_presence through the kit's runner against the stub API, the fingerprint equal to Node's HMAC-SHA256. One Lua resource per host should declare it. |
Protection
Code escrow: the kit's compiled loader decrypts in memory with a key released to this server only. The operator of the machine can still inspect their own process; that takes real effort and the copy is traceable.
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
- TypeScript must be compiled first (scriptgo pack or scriptgo verify do it with esbuild); the kit loads x.ts.js next to x.ts.
- The JavaScript memory quota bounds what one entry allocates on the host thread, not the live heap (Jint has no per-engine heap limit).
- Server and client run in one process: no real network between them.
- C# guests are not available yet (planned).
- Measured with .NET 10 on Windows x64 only.
Real runs
Each row is a scriptgo verify run on .NET kit 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_probe probe |
0.1.0 | .NET 10.0.11; KeraLua 1.4.9 (Lua 5.4); Jint 4.17.0 | dotnet-0.1.0 | 31/31 | 2026-11-09 |
sg_probe_net probe |
0.1.0 | .NET 10.0.11; KeraLua 1.4.9 (Lua 5.4); Jint 4.17.0 | dotnet-0.1.0 | 18/18 | 2026-11-09 |
sg_probe_ts probe |
0.1.0 | .NET 10.0.11; KeraLua 1.4.9 (Lua 5.4); Jint 4.17.0 | dotnet-0.1.0 | 32/32 | 2026-11-09 |
sg_xlang_lua probe |
0.1.0 | .NET 10.0.11; KeraLua 1.4.9 (Lua 5.4); Jint 4.17.0 | dotnet-0.1.0 | 26/26 | 2026-11-09 |

