- Home
- Developer Tools
- Online Compiler
Online Compiler — Python, JavaScript, TypeScript & SQL
Write code, press Run, see the output. SQL comes with sample tables, or you can upload your own CSV. Everything runs in your browser.
Press Run to see the output here.
Practise it · SQL
A running total that resets per group
Now try one with a checker — a running total that has to reset for every customer. Hard · about 20 min · runs in your browser, no signup.
How to use Online Compiler
Pick a language
Python, JavaScript, TypeScript or SQL. Each tab keeps its own code, saved in your browser.
Write and run
Press Run or Ctrl/⌘ + Enter. The first run loads the engine; every run after that is instant.
Bring your data (SQL)
Upload a CSV, name the table, and query it next to the sample tables with JOINs, CTEs and window functions.
Frequently Asked Questions
Is my code sent to a server?
No. Every language runs inside your browser: Python on Pyodide (CPython compiled to WebAssembly), JavaScript and TypeScript on a sandboxed interpreter in a Web Worker, and SQL on SQLite compiled to WebAssembly. Your code and any CSV you upload never leave your device.
Which Python version is it, and can I use input()?
It is CPython 3.13 via Pyodide, with the full standard library. input() reads from the Input (stdin) box, one line per call, so programs that ask for input work the same way they do in a terminal.
Does the TypeScript compiler check my types?
No. TypeScript is compiled by stripping the type annotations, then the JavaScript runs. That is fast and runs any valid TypeScript, but a type error such as assigning a string to a number will not be reported. Use tsc or your editor for type checking.
Which SQL dialect does the SQL compiler use?
SQLite. It supports JOINs, GROUP BY, subqueries, CTEs including WITH RECURSIVE, and window functions such as ROW_NUMBER, RANK and LAG. Four sample tables are preloaded: departments, employees, customers and orders.
How do I run SQL on my own CSV file?
Switch to the SQL tab, click Upload CSV (or drop the file on the Tables panel), give it a table name and click Load. Column types are inferred as INTEGER, REAL or TEXT. The table stays loaded until you close the tab — it is not saved anywhere.
What happens if my code runs forever?
Each run gets a time limit (15 seconds for Python, 10 for JavaScript, TypeScript and SQL). An infinite loop is stopped and the engine restarts, so the page never freezes. For SQL, the database is rebuilt from the sample data and your uploaded CSVs.
