Overview
Run JavaScript, Python, SQL, and HTML in your browser with a Monaco editor and WebAssembly runtimes. Python executes on Pyodide, SQL on an in-memory SQLite compiled to WebAssembly, and everything runs client-side with the output shown in a console panel.
How It Works
Pick a language from the dropdown: JavaScript, Python, SQL, or HTML. The editor loads a starter snippet for each. Press Run to execute. JavaScript output comes from console.log and console.error calls, including formatted objects. Python and SQL show a status pill while their WebAssembly engines load, then run your code. SQL results render as tables of rows, and HTML renders as a live preview below the editor. A copy button takes the current code.
Step-by-Step Usage Guide
- Choose a language; the editor fills with a starter snippet.
- Edit the code in the Monaco editor.
- Press Run and read the console panel; for Python and SQL, wait for the ready pill on first use.
- For SQL, keep building on the same in-memory database across runs, or reload to start clean.
Technical Specifications & Standards
Each language runs on a different execution path. JavaScript is compiled to an async function and executed in the page, so top-level await works and the captured console shows objects as formatted JSON; because it runs on the main thread, an accidental infinite loop will freeze the tab rather than time out. Python uses Pyodide, the CPython build for WebAssembly, fetched from a CDN the first time it is needed; stdout and stderr are captured separately so tracebacks appear in the output panel. SQL uses sql.js, SQLite compiled to WebAssembly, against an in-memory database that persists across runs within the page session: tables you CREATE remain available to the next Run, but everything resets on reload. HTML renders your markup in a live preview. The two WASM engines are the only parts of this tool that fetch anything from the network; JavaScript and HTML execution are fully local, and neither Python nor SQL code is ever uploaded, it only triggers the engine download.
Targeted Use Cases
- Testing a JavaScript snippet that needs top-level await without setting up a project.
- Trying Python code with the standard library where installing Python is impractical.
- Practicing SQL against a scratch in-memory database with instant feedback.
- Previewing a small HTML and CSS fragment before pasting it into a real page.
Notes & Gotchas
- Reload the page to reset the SQLite database when earlier statements have polluted it.
- Avoid unbounded loops in JavaScript; execution runs on the main thread and cannot be interrupted.
- Wait for the Pyodide or SQLite ready pill before judging a slow first run as failed.
- Check the console panel for stderr separately; Python tracebacks print there rather than vanishing.
Frequently Asked Questions
Why did my Python run say the engine is loading?
Pyodide is a multi-megabyte WebAssembly build fetched from a CDN on first use. The status pill shows loading and ready states; once loaded it stays for the session and subsequent runs start immediately.
Do my SQL tables survive between runs?
Yes, within the page session. The SQLite database is in-memory and persists across Run presses, so you can CREATE once and query later. Reloading the page discards everything.
Can a JavaScript infinite loop be stopped?
No. JavaScript execution happens on the page's main thread, so a loop without an exit condition will hang the tab until the browser kills it. Test risky loops in small steps.
Is my code sent to a server?
No. Python and SQL execute in WebAssembly inside your browser, and JavaScript and HTML never leave the page. The only network traffic is the one-time engine download for Pyodide and SQLite.