API · 1 of 3
TCP / OxiWire commands
OxiScript surfaces six wire commands. All use length-prefixed JSON over the standard OxiDB TCP port (default 4444).
compile_oxiscript
Compile a script to JSON steps without persisting. Useful for syntax checking in CI.
{"cmd": "compile_oxiscript",
"script": "proc hi(n) { return {hi: n} }"}
{"ok": true, "data": {
"name": "hi",
"params": ["n"],
"steps": [{"step": "return", "value": {"hi": "$param.n"}}]
}}
create_procedure
Compile + persist. Procedure is stored in the _procedures collection.
{"cmd": "create_procedure",
"script": "proc hi(n) { return {hi: n} }"}
# Or skip OxiScript and pass a pre-compiled JSON definition:
{"cmd": "create_procedure",
"name": "hi",
"params": ["n"],
"steps": [{"step": "return", "value": {"hi": "$param.n"}}]}
call_procedure
{"cmd": "call_procedure",
"name": "hi",
"params": {"n": "world"}}
// success
{"ok": true, "data": {"hi": "world"}}
// abort
{"ok": false, "error": "insufficient funds"}
list_procedures
{"cmd": "list_procedures"}
{"ok": true, "data": ["hi", "transfer", "place_order"]}
get_procedure
{"cmd": "get_procedure", "name": "hi"}
{"ok": true, "data": {"name": "hi", "params": ["n"], "steps": [...]}}
delete_procedure
{"cmd": "delete_procedure", "name": "hi"}
Wire format
Same as the rest of OxiDB: 4-byte little-endian length prefix, then UTF-8 JSON. Max payload 16 MiB.
import socket, struct, json
s = socket.create_connection(("127.0.0.1", 4444))
def call(payload):
data = json.dumps(payload).encode()
s.sendall(struct.pack("<I", len(data)) + data)
n = struct.unpack("<I", s.recv(4))[0]
buf = b""
while len(buf) < n:
buf += s.recv(n - len(buf))
return json.loads(buf)