DuckDB GUI: Query Parquet, CSV and 29 More Databases
DuckDB is built into SQLly, so opening a .duckdb file or a folder of Parquet takes about as long as finding the file.
SQLly is a DuckDB GUI for macOS, Windows and Linux with DuckDB compiled into the app itself. Point a connection at a .duckdb file (created if it doesn't exist) or :memory: for a scratch database, and query Parquet, CSV and JSON files where they sit. DuckDB is one of 30 engines in that same client, so local files and server databases share one window and one set of habits.
DuckDB is built in, not bolted on
Most so-called DuckDB GUIs are a generic client with a DuckDB driver and a prayer. SQLly compiles DuckDB into the app, so a connection is a file path, not a server setup: no host, no port, no credentials. Double-click a .duckdb or .ddb file and it opens, or paste duckdb:/path/to/analytics.duckdb or duckdb::memory: into the connection box.
From there, the trick DuckDB is famous for just works:
-- query files directly, no import step
SELECT pickup_datetime, total_amount
FROM 'taxi/*.parquet'
WHERE total_amount > 100
ORDER BY total_amount DESC
LIMIT 20;
-- and join across formats like it is normal
SELECT c.name, count(*) AS orders
FROM read_csv('customers.csv') AS c
JOIN 'orders.parquet' AS o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY orders DESC;
Results stream into the grid with DuckDB's types intact: lists, structs and maps appear as readable JSON text, not a mangled string. The full workflow is in querying Parquet and CSV with DuckDB in a desktop GUI.
What a real GUI adds
Plans you can actually read
DuckDB has both estimated and actual plans, and SQLly shows them properly: EXPLAIN ANALYZE with real row counts and timings, as findings, a tree and a diagram. When a Parquet query is slow, this is where the answer is.
Results bigger than your RAM
A year of Parquet scans is fun until the result set arrives. SQLly streams results with spill-to-disk, so a 50-million-row result pages from disk instead of evicting everything else from memory.
Edit and move data, not just look at it
Right-click a result row for a generated edit form; SQLly finds the source table from DuckDB's catalog and runs the change as transactional DML. Data Transfer copies tables between DuckDB and your server databases, and Schema Compare, Data Compare and the Test Data Generator all work on DuckDB files.
Guardrails
The safety rails from the server engines apply here too: a warning before an UPDATE or DELETE without a WHERE clause, read-only connections, and an auto-rollback wrap around risky statements. On a local analytics file this saves you from yourself. On a production database it saves you from a memorable afternoon.
Charts and pivots inside the .sql file
Comment directives turn query results into a pivot table, a chart or a formatted layout, inside the .sql file you already have. The query stays plain SQL; the presentation lives in the comments.
One client for DuckDB and everything else
DuckDB sits in the same engine list as PostgreSQL, MySQL, SQL Server, ClickHouse, SQLite and the rest. If your day is pull from Postgres, crunch locally in DuckDB, check something in SQLite, that is one window and one set of shortcuts, not three tools with a CSV layover.
When the built-in DuckDB UI or another tool is the better choice
I keep an honest section on my comparison pages, and this page gets one too.
DuckDB ships its own UI these days: run duckdb -ui and you get a free, notebook-style web UI from the DuckDB team itself. It is genuinely good. If your work lives entirely inside DuckDB, you like notebooks, and your budget is zero, that is the right answer, and I mean it. The CLI, meanwhile, is the right answer for scripts, CI and anything that belongs in git.
Choose open source if you need code you can audit: DBeaver Community is Apache 2.0 and connects to DuckDB too. And if your data lives in MotherDuck's cloud, the official UI signs into it directly.
SQLly is the better fit when DuckDB is one of several databases you touch, when you want a native app instead of a browser tab, and when the extras matter: guardrails, charts in .sql files, row editing, big-result streaming, real plans. It is paid software past a free tier, because I like eating. If the free DuckDB UI covers your day, use it.
FAQ
Is there a free GUI for DuckDB? Yes, two of them. DuckDB's own UI (duckdb -ui) is free and official. SQLly has a free tier: two saved servers, unlimited databases on each, no trial clock. Paid is $100 one-time for all 1.x updates or $200 lifetime; every engine ships in every tier.
Do I need to install DuckDB separately? No. DuckDB is compiled into SQLly. Open a .duckdb file (a new one is created if the path doesn't exist), or enter :memory: for a scratch database.
Can I query Parquet and CSV files without importing them? Yes. Point SQL at the file: SELECT * FROM 'data.parquet' works, as do read_csv, read_json and glob patterns across folders. The step-by-step post covers the workflow.
Does SQLly only work with local DuckDB files? Local files and in-memory databases cover most uses. If the files live on a server, a bridged connection runs DuckDB there while you work from your laptop.
What platforms does SQLly run on? Native builds for macOS, Windows and Linux. Same app and features on all three.
Try it in five minutes
- Open the live preview: the real workbench in your browser, no install, no account. It runs SQLite and Postgres samples, so for DuckDB itself, take the next step.
- Download SQLly and double-click a
.duckdbfile. No file handy? Open:memory:and query a CSV instead. - Run your heaviest query and compare time-to-first-rows.
Free tier, no trial clock, nothing to cancel. If it doesn't beat your current DuckDB setup, the uninstall is one file.