DuckBake is a Mac app for pulling a spreadsheet apart. DuckDB does the querying, a model on your own machine does the explaining, and the file never leaves the laptop it landed on.
Free · MIT · macOS 13+ · universal binary
| id | competitorname | chocolate | fruity | caramel | peanutyalmondy | nougat | crispedricewafer | hard | bar | pluribus | winpercent |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 100 Grand | true | false | true | false | false | true | false | true | false | 66.97 |
| 1 | 3 Musketeers | true | false | false | false | true | false | false | true | false | 67.6 |
| 2 | Air Heads | false | true | false | false | false | false | false | false | false | 52.34 |
| 3 | Almond Joy | true | false | false | true | false | false | false | true | false | 50.35 |
| 4 | Baby Ruth | true | false | true | true | true | false | false | true | false | 56.91 |
| 5 | Boston Baked Beans | false | false | false | true | false | false | false | false | true | 23.42 |
| 6 | Candy Corn | false | false | false | false | false | false | false | false | true | 38.01 |
| 7 | Caramel Apple Pops | false | true | true | false | false | false | false | false | false | 34.52 |
| 8 | Charleston Chew | true | false | false | false | true | false | false | true | false | 38.98 |
| 9 | Chewey Lemonhead Fruit Mix | false | true | false | false | false | false | false | false | true | 36.02 |
| 10 | Chiclets | false | true | false | false | false | false | false | false | true | 24.52 |
| 11 | Dots | false | true | false | false | false | false | false | false | true | 42.27 |
| 12 | Dum Dums | false | true | false | false | false | false | true | false | false | 39.46 |
| 13 | Fruit Chews | false | true | false | false | false | false | false | false | true | 43.09 |
| 14 | Fun Dip | false | true | false | false | false | false | true | false | false | 39.19 |
| 15 | Gobstopper | false | true | false | false | false | false | true | false | true | 46.78 |
| 16 | Haribo Gold Bears | false | true | false | false | false | false | false | false | true | 57.12 |
| 17 | Haribo Happy Cola | false | false | false | false | false | false | false | false | true | 34.16 |
That window is drawn, not screenshotted — click through Browser, Schema, Query and Chat. The tables are public sample datasets; the layout, the columns and the timings are the app's.
No account, no sign-in, no telemetry, no bucket somewhere. The file becomes a table in a project on your disk, and that is the entire journey it makes.
Chat talks to Ollama on localhost. The model is on your SSD, the inference is on your GPU, and your rows are never anyone's training data.
Not a wrapper around a spreadsheet. Millions of rows, real SQL, columnar speed — sub-second on the kind of file that makes Excel think about its life.
Getting data in
No connection string, no schema to declare, no wizard. DuckBake reads the file, infers the column types, and shows you what it found before anything is created — so a misread date column is something you catch at the door.
Importing again lets you create a new table, replace one, or append to it — which is how a weekly export becomes one growing table.
Drop a file to import
CSV, TSV, JSON, JSONL, Parquet or Excel
sales-2026-q1.csv · 48.2 MB · 812,449 rows
SQL
There is no server to start, no port to remember and no CREATE DATABASE. A project is a file; the tables inside it are queryable the moment the import finishes, with the whole DuckDB dialect available — window functions, CTEs, joins across every table you have dropped in.
CodeMirror with SQL highlighting and autocomplete built from the project's own schema, so table and column names complete themselves.
Milliseconds, row count and column count under the editor. Fast enough that the number is usually a single digit.
Name a query and it lands in the sidebar for next time — the weekly one you always half-remember, saved properly.
A paginated grid for reading the rows, and a Schema tab listing every column with its type, nullability and key.
Chat
Ask in English. DuckBake hands your schema to a model running under Ollama, gets SQL back, runs it against DuckDB, and answers with the actual rows — plus a chart when the shape of the result suggests one. Open in Editor puts the generated query in front of you, which is the part that matters: you can read what it did before you believe it.
Whatever you have pulled — the picker lists them. A bigger model writes better SQL and makes you wait longer for it.
The context switch decides what the model gets to see. Auto reads the question and guesses; the other two settle it for you.
There is nothing to sign up for and no per-token cost, because there is no API on the other end. Just a process on your Mac.
The round trip
The interesting part is not that it answers — it is where each piece of the answering happens. Step through it: the whole journey is your disk, a socket on localhost, and back.
A question in the composer. No SQL, no column names, no idea which table it lives in.
No table named, no column named, no SQL.
Charts
That distinction is the reason the charts are trustworthy. A language model is good at picking which columns belong on which axis and bad at arithmetic, so it never touches the numbers — it names them. DuckDB produces the values and Recharts plots them, which means a chart on this page is as correct as the SQL above it, and you can read that SQL.
"viz": "bar"Comparing categories — the default, and usually right.
"viz": "line"Anything with a date on the x-axis.
"viz": "pie"A handful of parts of one whole.
Ollama
DuckBake does not ship a model or quietly fetch one. Install Ollama, pull the model you fancy, and DuckBake finds it on http://localhost:11434 — it checks /api/version, lists what you have with /api/tags, and streams from /api/chat. That is the whole integration.
http://localhost:11434Documents
Data rarely arrives on its own. Drop the policy document, the field manual or the quarterly write-up into the same project and DuckBake chunks it, embeds it with nomic-embed-text and stores the vectors alongside your tables — so a question can be answered from the prose, the rows, or both at once.
The embedding model runs under the same Ollama install. Vectorising a long document takes a while the first time and never again.
They are a DuckDB table like everything else, so a project stays one portable thing you can export and move.
An answer drawn from a document is not dressed up as an answer drawn from your rows.
Semantic search over a text-heavy column — free-form survey answers, support notes — not just over documents.
Underneath
Tauri means the interface is React but the shell is the system's own web view, so there is no Chromium in the download and no second copy of it in your memory. The import, the parsing and the embeddings all happen in Rust; DuckDB is linked in rather than talked to over a socket.
Fine print
Better to read this now than after the download.
DuckBake does not bundle a model or download one behind your back. Without Ollama running, everything except Chat works exactly as it does with it — the AI is the optional half.
A useful chat model is several gigabytes on disk and wants the RAM to match. Answers come at the speed your Mac can manage, not at the speed of a data centre.
If a local model gets the SQL wrong, nothing quietly reaches for a hosted one instead. That is the trade the whole app is built around, and it cuts both ways.
A universal build for macOS 13 and up. Tauri would happily produce Windows and Linux binaries; nobody has needed them enough yet.
A file becomes a DuckDB table inside the project, so the project has its own copy. Editing the CSV afterwards does not change the table — re-import to refresh it.
It is in daily use and it is not finished. Expect the version number to keep moving and the odd rough edge to move with it.
DuckBake is free and open source. Drag it to Applications, drop a file on it, and you are querying before the kettle boils. Ollama whenever you want the chat.