Show HN: Duck-UI – Browser-Based SQL IDE for DuckDB
213 points| caioricciuti | 4 months ago |demo.duckui.com
The Problem: Every time I needed to query csv, parquet, or even to play with SQL, I had to either: (a) spin up a Jupyter notebook (b) use the CLI (c) upload to a hosted service.
Friction at every step (TOO MUCH to load a csv or even to test some sql (study)...
The Solution: DuckDB's WASM runtime lets us run SQL analysis client-side. Load CSV/JSON/Parquet files from disk or URL, write SQL, get results instantly. Data stays on your machine. What It Does:
SQL editor with autocomplete & syntax highlighting Import CSV, JSON, Parquet, Arrow (local or remote URLs) Query history, keyboard shortcuts, theme toggle Persistent storage via OPFS (data survives browser refresh) Optional: Connect to external DuckDB servers One-liner Docker deployment or Node 20+ dev server
Technical Details:
DuckDB compiled to WASM; query execution in-browser OPFS-backed persistence Apache 2.0 licensed Runs on Chrome 88+, Firefox 79+, Safari 14+
Use Cases:
Learning SQL without setting up databases Ad-hoc data exploration (CSV → SQL in seconds) Quick prototyping before shipping to production Privacy-conscious workflows (no data leaves your browser)
GitHub: https://github.com/ibero-data/duck-ui Live Demo: https://demo.duckui.com Quick Start: docker run -p 5522:5522 ghcr.io/ibero-data/duck-ui:latest
Would love feedback on: (1) Use cases I'm missing (2) Performance bottlenecks you hit (3) Features that would make this your default SQL scratchpad.
[+] [-] CSDude|4 months ago|reply
https://duckdb.org/2025/03/12/duckdb-ui
[+] [-] mrs6969|4 months ago|reply
[+] [-] curtisblaine|4 months ago|reply
[+] [-] mritchie712|4 months ago|reply
1. DuckLake is the best datalake spec and their team is improving on the extension rapidly.
2. With DuckDB WASM, you can make apps that would normally have 2 to 3 second latency for network calls work in < 200ms.
We use it as our built-in datalake at Definite and couldn't be happier with it.
0 - https://ducklake.select/
1 - https://www.definite.app/blog/ducklake
[+] [-] adsharma|4 months ago|reply
https://adsharma.github.io/graph-archiving/ https://adsharma.github.io/beating-the-CAP-theorem-for-graph...
The catalog is based on the now archived kuzu graph db project. Development continuing here: https://github.com/LadybugDB/ladybug
[+] [-] geysersam|4 months ago|reply
[+] [-] curiousgal|4 months ago|reply
[+] [-] _ea1k|4 months ago|reply
[+] [-] joshmn|4 months ago|reply
DuckDB is the single-most impressive piece of software I’ve used in my career. I’m mangling terabytes of parquets daily and it just handles them effortlessly; the bindings also also well-written.
[+] [-] caioricciuti|4 months ago|reply
[+] [-] alex_hirner|4 months ago|reply
[0] https://duckdb.org/docs/stable/clients/wasm/data_ingestion#a... [1] https://github.com/finos/perspective
[+] [-] texodus|4 months ago|reply
[+] [-] debazel|4 months ago|reply
1. One of my favorite features from the built in DuckDB UI is the panel that automatically generates graphs for each column, both for the whole dataset itself and for the specific query you're running. I often find myself not even writing any queries because all I needed was something really simple already available in that panel. This would be my #1 reason for not using this GUI instead of the built in one.
2. I could not find any panel to show the currently selected value in the grid view. Ideally I would like this to also be able to auto-detect common formats like JSON and format them, etc.
3. The grid view can show a maximum of 200 rows. Finding a way to virtually render the rows in an infinite list would be much better IMO. I've found myself selecting up to 10k+ rows in the built in GUI and to copy all IDs, etc, several times (saves sometime compared to exporting a CSV and copying from there).
4. The column filter dropdown in the grid view has a search bar which is nice, but it is automatically deselected on each character entry, making it very annoying to use...
5. Additionally the dropdown filter menus are not automatically closed when you click outside or open another dropdown, which is a minor annoyance.
6. The right click menu in the grid viewer will close on "mouse out", however it does not close on "click outside" and the cursor does not start inside of the menu itself. This means the menu becomes permanently stuck until hover over it if you immediately move the mouse to the top-right on open.
7. The grid view resizer is behaving buggy sometimes after changing the number of page rows to display.
8. The transparent tooltip background in the chart viewer makes the light-gray text impossible to read in dark-mode when there is yellow behind it (from other the chart bars).
9. The explorer side panel seems to be sized based on a percentage of the window size. this is quite minor but it would behave nicer if it had a fixed size so changing the window size does not also resize the side panel. It is also overly large when you first load the site.
[+] [-] caioricciuti|4 months ago|reply
[+] [-] RyanHamilton|4 months ago|reply
[+] [-] matsonj|4 months ago|reply
[+] [-] jeffbee|4 months ago|reply
[+] [-] mrtimo|4 months ago|reply
[+] [-] unknown|4 months ago|reply
[deleted]
[+] [-] cjonas|4 months ago|reply
Wonder if this work could be ported as a replacement to duckdb local UI?
[+] [-] caioricciuti|4 months ago|reply
[+] [-] ludicrousdispla|4 months ago|reply
I ask because I am under the impression that the 'DuckDB Wasm' client provided by DuckDB doesn't yet support all of the DuckDB functions.
So I am interested to know if this has implemented more, fewer, or the same set of functions.
[+] [-] mosselman|4 months ago|reply
[+] [-] caioricciuti|4 months ago|reply
[+] [-] spooky_deep|4 months ago|reply
[+] [-] dav43|4 months ago|reply
quote - google ai mode:
"DuckDB offers robust capabilities for querying data stored partially on S3, particularly when dealing with Parquet files. This is achieved through several optimization techniques:
Predicate Pushdown: When you apply a WHERE clause to filter data, DuckDB can "push down" this filter directly into the Parquet file scan. If the Parquet file contains zonemaps (metadata about value ranges within columns), DuckDB can use this information to skip reading entire sections of the file that do not contain relevant data, significantly reducing the amount of data transferred from S3.
Projection Pushdown: When you select only specific columns in your SELECT statement, DuckDB automatically reads only those required columns from the Parquet file. This means you avoid downloading and processing unnecessary data, leading to faster queries and reduced S3 transfer costs.
HTTP Range Reads: DuckDB leverages HTTP range headers when interacting with S3 (or other object storage supporting range reads). This allows it to fetch only the necessary parts of the Parquet file, such as metadata or specific column chunks, rather than downloading the entire file."
[+] [-] mrtimo|4 months ago|reply
[+] [-] chrisweekly|4 months ago|reply
[+] [-] dsamy|4 months ago|reply
[+] [-] caioricciuti|4 months ago|reply
[+] [-] gamerrk|4 months ago|reply
[+] [-] caioricciuti|4 months ago|reply
[+] [-] rustyconover|4 months ago|reply
Using my textplot extension doesn't result in my expected output:
---
install textplot from community;
load textplot;
select tp_bar(0.5)
---
[+] [-] cat-whisperer|4 months ago|reply
[+] [-] tonyhart7|4 months ago|reply
[+] [-] rustyconover|4 months ago|reply
Rill Data - https://www.rilldata.com Summer - https://summer.io Hex - https://hex.tech Evidence - https://evidence.dev
[+] [-] ludicrousdispla|4 months ago|reply
https://observablehq.com/framework/lib/duckdb
[+] [-] mgaunard|4 months ago|reply
[+] [-] caioricciuti|4 months ago|reply