Keep state
A new runtime and a new heap per request. No globals survive, no module registry is reused, no cache is visible from inside. Two calls cannot talk to each other.
Logic coprocessor API
POST JavaScript, get JSON back. axon runs untrusted code in a fresh WebAssembly sandbox: no filesystem, no network, no state between calls. Math, dates, regex and npm packages, without spending model tokens on the arithmetic.
curl -s https://axon.va-n.com/api/v1/execute \
-H 'content-type: application/json' \
-d '{"code":"return 2 + 2"}'
{"ok":true,"result":4,"logs":[],"meta":{"modules":[],"engine":"quickjs 2025-09-13 (bellard)"}}
The sandbox is stateless by construction. Every call gets a new QuickJS runtime, a new heap and a deadline. Nothing you send is retained, and nothing you send can reach the network.
{
"ok": true,
"result": 4
}
The playground uses this page's own API, so the rate limit applies: 30 requests per
minute, burst 10. If it answers 429 or 503, wait a second and
run again. Keyboard shortcut: Ctrl or Cmd plus Enter.
A new runtime and a new heap per request. No globals survive, no module registry is reused, no cache is visible from inside. Two calls cannot talk to each other.
There is no fetch, no sockets, no XMLHttpRequest inside
the sandbox. Packages are fetched by the Worker before evaluation starts, from
esm.sh only.
No filesystem, no process, no require, no environment.
Node builtins such as node:fs are refused before a byte is evaluated.
| Scenario | Measured | Why |
|---|---|---|
| Arithmetic, strings, regex, dates | 3 to 9 ms CPU | One parse, one evaluation, no I/O. p50 is 6 ms. |
| Full lodash import (warm) | 44 to 120 ms CPU | 82 KB bundle parsed by QuickJS. Submodule imports cost far less. |
| Median wall time, trivial call | 10 ms | Server side, measured with wrangler tail. |
| Worst wall time, trivial call | 160 ms | Cold isolate, GC, or a first request in a new colo. |
| Runaway loop cut off | 280 ms CPU | A fixed instruction budget, not a wall clock. |
| Heap ceiling per call | 8 MB default | Clamped to 4..32 MB with memory_mb. |
Cloudflare's free plan advertises 10 ms of CPU per request. The platform grants isolates
some burst room, and a trivial call measures 3 to 9 ms here. A full lodash import
measures 44 to 120 ms and was served, but it sits outside the advertised budget: keep
calls small, prefer a submodule (date-fns/addDays, not date-fns),
and read the FAQ before pointing a loop at it.
date-fns/addDays and anything else esm.sh can bundle into one file.POST https://axon.va-n.com/api/v1/execute
content-type: application/json
{ "code": "return 2 + 2", "timeout_ms": 750, "memory_mb": 16 }