Everything an operator needs to run untrusted code — observed, reversible, no external dependencies,
no add-on services.
- Multi-runtime
- Node.js 24, Python 3.14, and TypeScript — two generic runtimes, latest-stable only.
- nsjail isolation
- Five overlapping Linux kernel boundaries per call — user NS, mount NS, cgroup v2, seccomp, network NS.
- Warm pools
- Idle workers stay resident between invocations. Pool size configurable per function; back-to-back calls skip spawn entirely.
- KV store
- Per-function SQLite-backed KV with optional TTL. kv.put / kv.get / kv.list — browsable from the dashboard.
- Background jobs
- jobs.enqueue(name, payload). Persisted queue with configurable retries and exponential backoff.
- Cron schedules
- Fire any function on a cron expression. Dashboard shows last run, next run, current status.
- Function-to-function
- invoke("name", payload) calls another function via the warm pool as a child span in the same trace.
- Distributed tracing
- HTTP, F2F calls, and background jobs share one trace_id. Waterfall view in dashboard; zero code changes.
- Custom routes
- Map a path like /webhooks/stripe to a function so callers use a clean URL instead of a UUID.
- Secrets
- Encrypted per-function secrets injected as env vars at sandbox spawn time. Never logged, never plaintext on disk.
- Inbound webhooks
- Signed external trigger endpoints — GitHub, Stripe, Slack, and generic HMAC — fanning into a function.
- Rollback
- Every deploy is content-hashed and archived. Roll back to any prior version in one click.
- MCP server
- 72 tools at /mcp. Claude Code, Cursor, and any OAuth MCP client can deploy and manage functions from chat.
- Built-in AI assistant
- In-product agentic chat that operates the instance end-to-end through the same tools — bring your own provider key, approve writes inline.
- 21 templates
- Stripe webhooks, GitHub events, JWT auth, OAuth, CSV→JSON, URL shortener — pickable in the editor.