Online compiler

DuckDB online compiler

Write SQL (DuckDB 1.5) code below and run it free, with input, in a sandbox on our servers. No sign-in, no ads. The same compiler is an API and an embeddable editor, for running DuckDB in your own app, course or docs.

By the OnlineCompiler.io team. Updated .

What runs your code

VersionDuckDB 1.5
Compiled withNo separate step: the run command compiles or interprets it
Run withduckdb -batch -bail -list -noheader -cmd "SET autoinstall_known_extensions=false; SET autoload_known_extensions=false; SET memory_limit='256MB'" < code.sql
Limits30 seconds, 512 MB of memory, 2 CPUs, 64 KB of output per stream, no network

Good to know

  • Each run starts with an empty in-memory DuckDB database: create your tables, fill them and query them in one program. A run stops at the first error.
  • Results print in list mode, columns separated by |, with no header row, the same as the SQLite page. Dot commands work, so .mode box or .headers on change the format.
  • The Input tab isn't read as SQL, but read_text('input') returns it as a table with a content column. Files sent with the API's files field are read with read_csv('data.csv') or read_json.
  • Memory is limited to 256 MB, and extensions are not downloaded.

DuckDB compiler API

To run DuckDB from your own app, send the code and its input to the sync endpoint with an API key, and the output comes back in the response. It's free up to 100,000 runs a month. The API docs cover the async endpoint with callbacks and every response field.

Terminal
curl -X POST https://api.onlinecompiler.io/api/run-code-sync/ \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "compiler": "duckdb-1.5",
    "code": "SELECT '\''Hello, '\'' || rtrim(content, chr(10)) || '\''!'\'' FROM read_text('\''input'\'');",
    "input": "Ada"
  }'

The response has output ("Hello, Ada!\n" here), error, exit_code, time and memory.

Embed a DuckDB compiler in your website

The editor above is the embeddable widget. Add the script and a div with your widget key, and your readers can edit and run the code without an account:

example.html
<script src="https://onlinecompiler.io/widget.js"></script>

<div class="runcode" data-key="YOUR_WIDGET_KEY" data-lang="duckdb-1.5">
  <script type="text/plain">
    SELECT 'Hello, ' || rtrim(content, chr(10)) || '!' FROM read_text('input');
  </script>
</div>

On a platform that takes an iframe but not a script, such as many course sites, use the iframe embed. For Docusaurus, MkDocs, Sphinx and Mintlify, see runnable code examples in docs.

Other languages

Python, C, C++, Java, C#, F#, Go, Rust, PHP, Ruby, Haskell, TypeScript, JavaScript, SQL, Bash, Fortran, Visual Basic, Kotlin, R, Swift, COBOL, Perl, Julia, Pascal, Octave, Assembly, Lua, OCaml, Common Lisp, Erlang, Elixir, Prolog, D, FreeBASIC, Dart, Clojure, Groovy, Scala, Zig, Nim, Crystal, Ada, PowerShell, Racket, Objective-C.

Frequently asked questions

Is this DuckDB online compiler free?

Yes. Running DuckDB on this page needs no account and shows no ads. To run DuckDB from your own app or site, the API and the widget are free up to 100,000 runs a month, commercial use included.

Is there a DuckDB compiler API?

Yes. POST the code, the compiler id duckdb-1.5 and any input to https://api.onlinecompiler.io/api/run-code-sync/ with an API key, and the response holds the output, errors, exit code, run time and memory. It's free up to 100,000 runs a month, and the same key works for the other 45 languages.

Can my DuckDB program read input?

Yes. Type it in the Input tab before you run, and the program reads it with read_text('input'), since standard input carries the SQL itself. The whole input is sent when you press Run, so a program can't ask for more while it runs.

Can I use DuckDB libraries?

DuckDB's built-in functions and file readers for CSV, JSON and Parquet. Extensions can't be installed, and programs have no network access.

How long can a program run?

Up to 30 seconds, with 512 MB of memory and 2 CPUs. A program still running at 30 seconds is stopped with exit code 124, and output over 64 KB per stream is cut.

Where does my code run?

On our servers, in a fresh gVisor sandbox with no network access that is deleted when the run ends. Each run is kept in execution history with its output; the security page says what is stored.