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)
Report Issue