5 ms·
Show HN: Duck-UI – Browser-Based SQL IDE for DuckDB
I built Duck-UI, a web-based SQL editor that runs DuckDB entirely in your browser via WebAssembly. No backend required.
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 https://github.com/ibero-data/duck-ui
Live Demo: https://demo.duckui.com 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.
- gamerrk 1y agoThe autocomplete is really good, UI is snappy as well. Well done!
- caioricciuti 1y agoThanksss, happy you liked, thanks for trying it out!
- mgaunard 1y agodoesn't work well on phones, run query button is not visible.
- caioricciuti 1y agoThank you for the feedback, adding to the roadmap right now!
- CSDude 1y agoThere is an embedded one in DuckDB for a while now and it's great. I get the apeal of yours but this one is much easier to use for same cases: https://duckdb.org/2025/03/12/duckdb-ui https://duckdb.org/2025/03/12/duckdb-ui
- mrs6969 1y agoThis is not a self hosted one though. You can not use default ui offline, you can not guarantee data safety
- nirav72 1y agoAnyone know if there is a similar selfhosted/run local option?
- Rhubarrbb 1y ago`duckdb -ui` and you can launch a local server bound to 127.0.0.1
- jasonjmcghee 1y agoIt's very weird they don't offer it by default, but there are workarounds. (You can use it offline) https://github.com/duckdb/duckdb-ui/issues/62 https://github.com/duckdb/duckdb-ui/issues/62
- ludicrousdispla 1y agosome of the comments on that thread are surprising. Are people not aware that software can be bundled in such a way as to run on machines not having internet access?
- dkdcio 1y agothe background is this UI is the MotherDuck UI for their cloud SaaS app. MotherDuck is a VC-backed DuckDB SaaS company, not to be confused with DuckDB Labs or the DuckDB foundation MotherDuck decided to take their web app UI and make it a locally usable extension via DuckDB. however as noted in that thread, the architecture is a bit odd as the actual page loads once the extension is running from MotherDuck’s servers (hence the online requirement) I don’t think it’s intentionally malicious or bad design or anything, just how this extension came about (and sounds like they’re fixing it) disclaimer: I do know and actively work with the MotherDuck folks, I’ve also worked w/ DuckDB Labs in the past
- chrisweekly 1y agoI haven't had a chance to play w this yet, but thank you for building and sharing this -- great writeup, sounds v useful and compelling!
- mritchie712 1y agoReally excited about the future of DuckDB: 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/ https://ducklake.select/ 1 - https://www.definite.app/blog/ducklake https://www.definite.app/blog/ducklake
- curiousgal 1y agoI am curious is anyone using DuckDB in prod?
- mgaunard 1y agoof course, why wouldn't you? I was using it even before it hit 1.0
- mritchie712 1y agoYes, we run DuckDB + DuckLake in prod for https://www.definite.app/ https://www.definite.app/
- fluxkernel 1y agoIs DuckLake compatible with Iceberg? I remember they create a new catalog.
- mlnj 1y agoYes, you can use INSTALL iceberg; to start working with iceberg https://duckdb.org/docs/stable/core_extensions/iceberg/overview https://duckdb.org/docs/stable/core_extensions/iceberg/overv...
- matsonj 1y agoSure - https://motherduck.com/blog/15-companies-duckdb-in-prod/ https://motherduck.com/blog/15-companies-duckdb-in-prod/
- spooky_deep 1y agoWhen DuckDB queries across multiple sources (say, Postgres and a CSV) does it first load all data into DuckDB or is it smart enough to only pull minimal data needed for the query on the fly?
- dav43 1y agopossible, seems this is done in other modes. 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."
- mosselman 1y agoWhat is a duckdb server? I was under the impression there is no server in duckdb, just the client.
- caioricciuti 1y agoIn theory there's none... DuckDB is like Sqlite, it's a file, but in this case it's 100% wasm so theres zero interaction with any "server", it's all on Browser. One example of DuckDB in server is mother duck... It makes .duckdb files "available" on the cloud.
- joshmn 1y agoThis is cool, thanks. I use the embedded UI but I’m going to play around with yours too. 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 1y agoTRUE! It's amazing and I have in other project too! The idea of of this app 100% in browser came from handling lots of CSV's from different people in my former company... Just to load in excel it took forever, then I came up with this, it made my life much easier, hope it makes yours too!
- alex_hirner 1y agoI'd love to make it work with flightsql or HTTP endpoints returning arrow IPC [0]! Did you consider using perspective for last-mile charting [1]? Building your own seems like a huge chunk of work. Well done! [0] https://duckdb.org/docs/stable/clients/wasm/data_ingestion#apache-arrow https://duckdb.org/docs/stable/clients/wasm/data_ingestion#a... [1] https://github.com/finos/perspective https://github.com/finos/perspective
- texodus 1y agoPerspective is also getting direct support for DuckDB soon! https://github.com/finos/perspective/pull/3062 https://github.com/finos/perspective/pull/3062
- deleted 1y ago[deleted]
- cjonas 1y agoI just leave 'duckdb --ui' running on my computer at all times. While the functionality is great, I'm really not happy that UI itself isn't open source and instead controlled by motherduck. There are many quick and easy improvements that will probably never get made, as motherduck has no real incentive to improve it at this point. Wonder if this work could be ported as a replacement to duckdb local UI?
- caioricciuti 1y agoI would love for this to be the case... I'm also not a fan of mother's duck ui... Also I created this project like 2 weeks before they launch it (that's why it's named duckui...) I would choose another name but well I had bought the domain already hahaha... But SURE, I would like this to be the best UI ever for all of us... Just need some ideas/help to implement all missing parts...
- cjonas 1y agoCurious how tricky it would be to connect this to a local instance of duckdb running in UI mode instead of browser WASM. (Or if that even aligns with your vision of this project). From what I can tell looking just looking at it on my phone your UI seems like a great start to replacing motherduck.
- cjonas 1y agoOr it looks like that's basically already supported?! Sorry, I need to spend some time with this, but I'll definitely be testing it out and will provide feedback and/or contributing
- tonyhart7 1y agodo we have analytics product that build on top of duck db yet?????
- ludicrousdispla 1y agoThere are several that have started up in the past few years... https://observablehq.com/framework/lib/duckdb https://observablehq.com/framework/lib/duckdb
- rustyconover 1y agoThere are so many! Rill Data - https://www.rilldata.com https://www.rilldata.com Summer - https://summer.io https://summer.io Hex - https://hex.tech https://hex.tech Evidence - https://evidence.dev https://evidence.dev
- RyanHamilton 1y agoIf you want a desktop version check out qstudio: https://www.timestored.com/qstudio/help/duckdb-sql-editor https://www.timestored.com/qstudio/help/duckdb-sql-editor it integrates duckdb functionality for parquet csv and to pivot data
- matsonj 1y agoYou’re underselling this. Running it locally also gives you access to all cores and all RAM. Wasm is very limited comparatively - perf is not even close.
- ludicrousdispla 1y agoIs the DuckDB Wasm that you are providing the same thing as the DuckDB Wasm provided by DuckDB? 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.
- debazel 1y agoHere's some quick issues and suggestions I found after about 5 minutes of playing around with it. All test were done using Firefox FYI. 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 1y agoTHAT'S AMAZING! ALL NOTED, thank you very much for the time and for the feedback! You are awesome! I'll review all!
- rustyconover 1y agoThanks for building this! Using my textplot extension doesn't result in my expected output: --- install textplot from community; load textplot; select tp_bar(0.5) ---
- jeffbee 1y agoThis is not really a problem introduced by the thing in the article, but the "UI" for duckdb just kinda sucks. When I want to interactively explore some data, I want to easily add conditions and aggregates, but there's nothing in the Duck UI that actually does this. It will make a little table of the top 20 values of irritating_column_name but there's not a 1-click way to add `where irritating_column_name = 'incredibly inconvenient value'` to the query and re-run, which is an absolutely basic data exploration feature.
- cat-whisperer 1y agogreat timing, I am literally adding Clickhouse and DuckDB for my project. This is gonna be super handy for testing
- dsamy 1y agoHave you considered adding support for visualizing query results directly within the interface?
- caioricciuti 1y agoNot sure I understood... you see the query results as soon you run the query...
- mrtimo 1y agoLove this! Here is a similar product: https://sql-workbench.com/ https://sql-workbench.com/