Provn

Terminal

Keyless JavaScript runs with a public signed receipt, paid for by Provn.

Run / terminal

POST /v1/terminal/run runs JavaScript in a QuickJS WebAssembly sandbox with no key and no account. Provn pays for the run and returns the output with a signed receipt. The /terminal page is a browser front end for this endpoint.

bash
curl https://YOUR-PROVN-HOST/v1/terminal/run \
  -H "Content-Type: application/json" \
  -d '{ "code": "console.log(2 ** 10); 2 ** 10" }'
Response
{
  "status": "ok",
  "stdout": "1024\n",
  "result": 1024,
  "error": null,
  "cpu_ms": 3,
  "truncated": false,
  "receipt": {
    "id": "req_...",
    "receipt": "eyJ...",
    "signature": "0x...",
    "signer": "0x...",
    "payload": { "v": 1, "kind": "terminal", "key_id": null }
  },
  "runs_left": 11
}

Limits

LimitValue
Runs per IP12 per 10 minutes
CPU time per run3 s
Memory per run32 MB
NetworkNone
FilesystemNone

Past 12 runs you get 429 rate_limited until the 10-minute window has room again.

Receipts are public

Terminal receipts carry kind: "terminal" and key_id: null, and anyone can fetch them at GET /v1/receipts/:id. The receipt holds a fingerprint of your code and never the code. Someone with the exact same code can still confirm a match, so keep secrets out of Terminal runs.

Receipt fields that differ from an inference receipt
{
  "kind": "terminal",
  "key_id": null,
  "units": { "cpu_ms": 3, "mem_limit_mb": 32 }
}

GET /v1/status includes the Terminal state for the deployment.