Browser REPL

Execute JavaScript in the persistent Browser REPL

Changed on

Execute JavaScript in a persistent Node.js runtime inside the browser VM. Top-level bindings, closures, mutations, and dynamically imported modules persist across calls until the REPL is reset or replaced. Start with repl.help() to list available methods, or call repl.help("click") for detailed help.

Expression values are ignored. Emit ordered text or image output with repl.write(...), console methods, or repl.emitImage(...). The runtime also exposes browser-control helpers, WebMCP, Patchright, Playwright, and raw CDP.

Executions are serialized. A timeout, crash, OOM, or protocol failure terminates the REPL and changes its repl_id. This is unrestricted code execution inside the browser VM and is not sandboxed.

post/browsers/{id_or_name}/repl

Request

  • Base URL
    https://api.onkernel.com
  • URL
    https://api.onkernel.com/browsers/{id_or_name}/repl
  • Auth
    HTTP bearer

Path parameters

id_or_namestring required

Browser session ID or name

Headers

Idempotency-Keystring

Makes retrying the call safe. A call with a key already used on this browser returns the first call's response instead of running the code again, waiting for it if it is still running. A call with a key keeps running for 10 seconds after its last caller disconnects, so a retry can collect its response; after that it is cancelled like a call without a key. A response is kept for 10 minutes once the call finishes, and only the most recent responses are kept. A call rejected before the code runs, such as with 400, 409 or 429, does not use up its key. The Kernel SDKs send a key automatically and reuse it when they retry.

Request body

codestring required

JavaScript evaluated in a persistent Node.js runtime. Top-level bindings persist until the browser VM's API process exits, the REPL is reset, or the REPL is terminated after a crash or timeout. Static top-level imports are unsupported; use dynamic import(). Expression values are ignored; emit output with repl.write(...), console methods, or repl.emitImage(...). May be empty only when reset is true.

resetboolean

Terminate the current REPL, start a fresh one, and then evaluate code.

timeout_secinteger

Maximum execution time in seconds. Default is 60.

Response

Code executed with either a successful result or a structured JavaScript failure.

content_truncatedboolean

True if text or image output was dropped or truncated due to response limits.

duration_msinteger

Wall-clock execution time in milliseconds.

errorstring

Error message if execution failed.

repl_idstring required

CUID2 identifying the exact state-holding REPL process used for this execution. Stable across calls and Chromium reconnects; changes after an API restart, explicit reset, execution timeout, or REPL crash.

repl_terminatedboolean

True if the REPL identified by repl_id was terminated by this request. The next request lazily starts a fresh REPL with a new repl_id.

stackstring

Stack trace if execution failed.

successboolean required

Whether the code executed successfully.

Changes