Full DuckDB SQL engine
Full DuckDB SQL engine — window functions, JOINs, aggregates, PIVOT all work
500+ fast, free tools. Most run in your browser only; Image & PDF tools upload files to the backend when you run them.
Query CSV and JSON files with SQL in your browser — powered by DuckDB-WASM.
SQL Online Runner lets you run SQL queries against CSV and JSON files directly in your browser, powered by DuckDB-WASM — a full analytical SQL engine compiled to WebAssembly. Upload one or more files and each is automatically registered as a virtual table named after the filename. Then write any SQL query — SELECT, GROUP BY, JOIN, window functions, aggregates — and see paginated results instantly. Export query output as a CSV file with one click. DuckDB supports a broad ANSI SQL superset plus analytical extensions like window functions, PIVOT, list comprehensions, and STRUCT types. The first use downloads DuckDB-WASM (~10 MB) which is cached by the browser. Your files are processed entirely in memory inside your browser tab and are never uploaded to any server.
Full DuckDB SQL engine — window functions, JOINs, aggregates, PIVOT all work
No upload — files are processed entirely in your browser tab
Supports both CSV (auto-detected schema) and JSON (newline-delimited or array)
Multi-file support — upload several files and JOIN between them
Paginated results with one-click CSV export
Full DuckDB SQL engine — window functions, JOINs, aggregates, PIVOT/UNPIVOT, CTEs all work as in a desktop database
Input: SELECT category, SUM(amount) AS revenue FROM sales GROUP BY category ORDER BY revenue DESC LIMIT 5;
Output: category | revenue ---------|-------- electronics | 41250.00 books | 18900.50 apparel | 15240.75 grocery | 9120.25 beauty | 7430.10
Input: SELECT u.name, COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id = u.id GROUP BY u.name ORDER BY orders DESC;
Output: name | orders ------|------ Ada | 12 Grace | 9 Bob | 4 Linus | 0
Input: SELECT day, sales, AVG(sales) OVER ( ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW ) AS ma7 FROM daily_sales ORDER BY day;
Output: day | sales | ma7 -----------|-------|------ 2026-01-01 | 100 | 100.0 2026-01-02 | 120 | 110.0 2026-01-03 | 90 | 103.3 ... (continues)