Scripting commands

Goblin Core embeds six independent scripting interpreters. Each is reached through its own command prefix and keeps its own script cache and VM; they share nothing but the key space (one Store).

Interpreter Language Commands
PUC-Lua 5.1 the dialect real Redis scripts target EVAL · EVALSHA · SCRIPT
Luau Roblox's typed, sandboxed Lua LUAU.EVAL · LUAU.EVALSHA · LUAU.SCRIPT
Wren a small class-based language (wren.io) WREN.EVAL · WREN.EVALSHA · WREN.SCRIPT
Jim Tcl a small embeddable Tcl (jim.tcl.tk) TCL.EVAL · TCL.EVALSHA · TCL.SCRIPT
MicroPython a lean Python (micropython.org) UPYTHON.EVAL · UPYTHON.EVALSHA · UPYTHON.SCRIPT
QuickJS JavaScript (quickjs-ng) QUICKJS.EVAL · QUICKJS.EVALSHA · QUICKJS.SCRIPT

The data-type commands that share this key space are documented separately: strings (SET / GET / INCR / GETRANGE / …), lists (GOBLIN.PMA.LPUSH / GOBLIN.PMA.LINDEX / standard aliases / …), arrays (ARSET / GOBLIN.CLASSIC.AR* / GOBLIN.RT.AR* / …), keys (DEL / EXISTS / TYPE), and ttl (EXPIRE / TTL / PERSIST / …). The Pub/Sub reference covers subscriptions, publishing, introspection, wire-mode behavior, and slow consumers. Goblin Core's own additions — memory introspection, compaction, snapshots, and the native GOBLIN.CAD compare-and-delete — are in goblin.

Why more than one?

EVAL runs PUC-Lua 5.1 for bug-for-bug compatibility with other Redis implementations — scripts written for Redis run unchanged. The prefixed commands opt into a different interpreter: LUAU.EVAL gives you Luau, WREN.EVAL gives you Wren, QUICKJS.EVAL gives you JavaScript. They deliberately do not share behavior with EVAL, so choosing one is an explicit decision.

Concepts shared by all of them

Indexing differs by language: Lua (EVAL, LUAU.EVAL) is 1-based
(KEYS[1]), while Wren (WREN.EVAL), Python (UPYTHON.EVAL), and
JavaScript (QUICKJS.EVAL) are 0-based (KEYS[0]); Tcl (TCL.EVAL)
exposes them as lists read with lindex ([lindex $KEYS 0]).

Return values

A script's return value is converted to a RESP reply. The rules are analogous across the languages (numbers become integers, strings become bulk strings, arrays/lists become multi-bulk, a designated shape becomes a status or error reply). The exact table is on each …EVAL page.