Amakuru.net

Parquet Viewer: a small DuckDB-powered Mac app for inspecting Parquet files

A native macOS app for opening and querying Parquet files quickly. SwiftUI grid, lazy loading, multi-column sorting, text search, file association, drag-and-drop.

Parquet is the workhorse columnar format of the modern data stack — every Spark job, every Athena query, every dbt-on-warehouse pipeline I work on writes or reads them. The tooling for inspecting a Parquet file on disk, though, is surprisingly thin: parquet-tools is slow Java, pandas-in-a-notebook is a sledgehammer, and the web viewers ask you to upload your data, which I don’t want to do for production-shaped files. Parquet Viewer is a small native Mac app that fills that gap.

Parquet Viewer with a multi-million-row file open: typed columns, sort indicators, and the search field filtering as you type.

DuckDB inside, thin shell outside

Parquet reading, SQL filtering, and sorting all happen in DuckDB via duckdb-swift. The app is a SwiftUI shell over a DuckDB connection.

A real columnar viewer with row vending, fast sort, fast filter, and type-aware display would be a multi-month project from scratch. DuckDB already does all of it in milliseconds and exposes it as SQL, so the app’s job is to stay out of the way.

Lazy loading, by row chunks

Opening a 10M-row file is instant. The grid only fetches what’s visible, then loads more on scroll (200 rows at a time). Lazy fetch had to be in the design from day one rather than added later, because retrofitting it would have meant rewriting the data flow that’s most of what this app is.

A curl install path, around Gatekeeper

macOS Gatekeeper is helpful for users and an obstacle for developers shipping outside the App Store. Browsers set the quarantine flag on downloaded files; curl does not. The README leads with the curl install instruction and shows the xattr -d workaround for browser downloads as a fallback. For an unsigned app, the install instructions are part of the product.

Was it worth it?

The full app fits in a few hundred lines of SwiftUI. DuckDB does the work; the UI stays out of its way.

dmorel69/parquet-viewer — Swift, SwiftUI, DuckDB, MIT