I wanted to build a nice DuckDB client. Though I usually reach for TablePlus, my favorite multi-db client on Macs, I felt like there wasn't a nice DuckDB oriented experience.
One thing that I used DuckDB for on locally on my desktop is dealing with larger datasets. And paging is something that was annoying and frustrating to deal with..espcially as you're perusing and exploring large datasets.
And thus began this 3-4 month long journey to build a nice polished DuckDB app for macOS :)
First off the the grid:
- You get to see the WHOEL result. Not just the first page. This level of optimization (perhaps needless) was done by never turning rows into objects and directly reading for DuckDB's columnar chunks ad draw time with Core Text. Memory is flat at 40 res or 41 million rows!
- Benchmarked on my M1 Max 64GB MB Pro, at 20M rows w/ 30 columns form a 11GB parquet file: ~119 fps on avg with a min of 52-60fps, 2.8GB RAM usage, ability to humo to first or last row in a millisecond!
The rest of the good stuff:
- Column headers have a nice drawn distribution, null %, and distinct count
- Visualize query plans as waterfall, tree, or the JSON
- SQLITE + FTS backed Query history
- Autocompletion in the editor knows your schema! Grammar is backed by treesitter
- Connections saved securely in macOS Keychain
- Extensions are statically linked. I've included most all of DuckDB's core extensions
- Parquet, CSV, JSON, of course .duckdb files all local or on S3 are accessible. All along Postgres tables so you can join across everything as you'd expect form DuckDB
- It Quacks like a duck! You can connect to a local or remote DuckDB server via Quack protocol. This bridges the gap between custom or other extensions that Datapuddle doesn't bundle with (albeit with a perf and memory penalty)
- Bares repeating...NO electron, NO web views :)
- No telemetry other than the opt-in macOS crash reporter
A one-time $39.99 purchase...no subscription. 7-day trial first! And sorry it's only for Apple Silicon!
AI Disclosure:
- For the record I've been building iOS apps (had a funded startup where I did so) for a while (though just gettin back into it) and built several commercial and personal macOS apps for almost a couple of decades. I'm well aware of best practices, the ecosystem, libraries, and teh do's and don'ts
- With that out of the way, did use Claude and where it REALLY earned its keep (which would've taken me a LOT of time to work through), was getting DuckDB and the extension set statically bundled and behaving the way I wanted it to. And the buffered Core Text grid, especially interacting with a custom DuckDB C++ <> Swift shim.
- And of course the website :)
App Store link: https://apps.apple.com/app/id6811235967
Happy to discuss, and hope others find it useful...its definitely made my DuckDB experience a bit happier personally :)
raquelh•41m ago