Interactive SQL notebooks powered by DuckDB — write, execute, and visualize SQL queries in Jupyter notebooks with a custom DuckDB kernel and language server support.
Features
- 📓 Jupyter notebook support — Standard
.ipynbfiles with DuckDB SQL kernel - ⚡ DuckDB execution — Run SQL cells against an in-memory DuckDB instance
- 🎨 Rich result tables — Query results rendered as styled HTML tables
- 💡 SQL IntelliSense — Autocomplete for SQL keywords, DuckDB functions, and types
- 🔍 Hover documentation — Hover over functions to see signatures and descriptions
- ⚠️ Diagnostics — Warnings for common SQL mistakes (unclosed strings, trailing commas)
- 📂 File queries — Read CSV, Parquet, JSON files directly with DuckDB's I/O functions
Getting Started
- Open the command palette (
Ctrl+Shift+P) → DuckDB: New DuckDB Jupyter Notebook - Or create a new
.ipynbfile and select the DuckDB kernel (see below) - Write SQL in code cells, execute with
Shift+Enteror the ▶ button - Add markdown cells for documentation
Selecting the DuckDB Kernel
When you open a Jupyter notebook, you need to select DuckDB SQL as the kernel:
- Click Select Kernel in the top-right corner of the notebook editor
- Choose Select Another Kernel…
- Select DuckDB SQL from the kernel list

Tip: If you create notebooks using the DuckDB: New DuckDB Jupyter Notebook command, the kernel is pre-selected automatically.
Example
-- Create and query data
CREATE TABLE sales (product VARCHAR, amount DECIMAL, region VARCHAR);
INSERT INTO sales VALUES ('Widget', 99.99, 'East'), ('Gadget', 149.50, 'West');
SELECT region, SUM(amount) AS total FROM sales GROUP BY region;
Configuration
| Setting | Default | Description |
|---|---|---|
duckdb-notebook.maxRows |
1000 |
Maximum rows to display |
duckdb-notebook.databasePath |
:memory: |
Database path (:memory: for in-memory) |
duckdb-notebook.binaryPath |
"" |
Path to a custom DuckDB binary with extensions |
Development
npm install
npm run compile # Build
# Press F5 in VS Code to launch Extension Development Host