dat0in development

Your data outgrew the spreadsheet.
It never outgrew your laptop.

dat0 is a native, local-first data workbench. Open a 12 GB Parquet like a 5 MB CSV, join it to live Postgres in one SELECT, and seal the whole analysis — data, queries, lineage — into a single file anyone can replay, inspect, or diff.

No spam. One email when there's something to run.

dat0

macOS + Linux · rust-native · apache-2.0 · built in public by Accidentally Awesome Labs

A concept render of the sales.csv grid. It scrolls past the row where every spreadsheet stops and keeps going: the rows below the wall are the ones a spreadsheet cannot reach, and dat0 reads them straight off the disk.
sales.csvevents.parquetgrid · virtualized
roworder_idregionamountts
1048568ord_88f21c01EMEA2,908.152026-06-30 23:30:09
1048569ord_88f21c02APAC164.902026-06-30 23:33:52
1048570ord_88f21c03AMER7,215.402026-06-30 23:37:26
1048571ord_88f21c04EMEA1,284.002026-06-30 23:41:02
1048572ord_88f21c05APAC912.402026-06-30 23:44:19
1048573ord_88f21c06AMER2,140.752026-06-30 23:47:55
1048574ord_88f21c07EMEA76.102026-06-30 23:51:33
1048575ord_88f21c08APAC431.002026-06-30 23:55:07
1048576ord_88f21c09AMER1,003.202026-06-30 23:58:41
the wallEvery spreadsheet stops on this row.xlsx hard limit · 1,048,576 · everything below is unreachable
1048577ord_88f21c0aEMEA88.652026-07-01 00:02:14
1048578ord_88f21c0bAPAC3,914.002026-07-01 00:05:52
1,199,400,352 more rows — read straight off your disk
1.2Bdat0 scrolls every row at 60 fps.✓ end of file reached · nothing imported · 0 bytes left this machine

concept render — the workbench is designed, not shipped · scroll to open the next pane ↓

Every other tool asks for a trade.

Spreadsheets trade away scale. The cloud trades away custody. Notebooks trade away proof. dat0's whole design is refusing that menu — so here it is as a result set, honest cells included.

Six capabilities across dat0 and three alternatives — a spreadsheet, a cloud analytics warehouse, and a notebook — closing on what each one gives up.
capabilitydat0spreadsheetcloud bi / warehousenotebook
Open a 12 GB filein place · 0.4 sstalls at row 1,048,576upload 12.4 GB · ~4 hread_csv → OOM
File ⋈ live databaseone SELECT · no ETLpaste and prayetl job + warehouse billtwo clients + glue code
Where the rows liveyour disk · 0 B egressyour disk, tootheir computeryour disk / their kernel
Re-run it next monthdat0 replay · 14 stepsduplicate last month's tabdashboard driftrestart & run all… maybe
Diff two analysesdat0 diff · exit 0 / 1eyeball two tabsscreenshot vs screenshotjson noise in git
Hand it to a colleagueone sealed .dat0v7_final_FINAL.xlsxa seat and a permissionenv.yml · good luck
→ trades awaynothingscalecustodyproof

Drop a 12 GB Parquet file.
Scroll like it's 5 MB.

CSV, Parquet, JSON, SQLite — dat0 opens files in place with a native DuckDB engine and a GPU-drawn 60 fps grid. Not a browser tab, not Electron: Rust, on your metal. No upload, no import wizard, no waiting.

rows1,200,448,930size12.4 GBengineduckdb · native
sales.csvevents.parquetapp.sqlitelogs.json

opened in place — no import step

A concept render of the events.parquet grid: five engine events, each with the machine it ran on, the country it came from, and how many milliseconds it took.
eventdevicecountrydur_ms
open_filemacbook_m4DE412
scan_rangemacbook_m4DE7
sort_colthinkpad_x1SE96
filter_pushthinkpad_x1SE3
grid_paintmacbook_m4DE16
grid ready · 0.4 sframe budget 16.6 ms · 60 fps
A concept render of the dat0 query editor: a six-line SELECT that joins a local CSV to a live Postgres table, and the three-region result set it returns.
editor · untitled.sql⌘⏎run
1
-- one SELECT, two worlds
2
SELECT region, sum(amount)
3
FROM 'sales.csv' s
4
JOIN pg.crm.accounts a ON a.id = s.acct
5
GROUP BY 1;
6
-- no ETL · no warehouse · no copy of your rows
regionsum(amount)accounts
AMER41,208,914.206,412
EMEA33,977,140.655,180
APAC28,455,002.104,006
one result set · 0.18 s3 rows · 0 bytes egress

Join a CSV file with a Postgres table.
One query.

Point dat0 at files and live databases and ask in one SELECT — no ETL, no load step, no warehouse bill. Full SQL with autocomplete. Prefer plain English? A bring-your-own-key AI drafts the query; you review before anything runs.

ai draft · bring your own keyoff until you add one

sent → column names only
never sent → row values, results, keys

Next month's report is one command.

A .dat0 isn't a dead export — it replays. Point last month's analysis at a fresh extract and every transform re-runs, with a schema check standing guard. Then diff two analyses like code: schema, lineage, row counts, queries. Unix exit codes, so CI can watch your numbers.

guardschema checkciexit 0 / 1
sh — dat0 clizsh · ~/accidentally-awesome-labs/dat0
A concept render of a dat0 command-line session: two commands entered at the prompt, the schema check and the file the first one wrote, the differences the second one found, and the exit code it ended on.
$ dat0 replay q2.dat0 --source sales.csv=./july.csv
schema compatible — 14 transforms replayed
→ wrote q2-july.dat0 · sha-256 verified
$ dat0 diff q2.dat0 q2-july.dat0
~ monthly · 12 → 13 rows
+ saved query "july outliers"
exit 1 — differences found (scriptable)
$

per the v1 CLI design · dat0-packages.md — designed, not shipped

A concept render of a sealed dat0 file: a five-segment chunk bar over the five chunks it names, stamped SEALED.
workflow.dat0
DATATRFMQUERSESSLINE
chunk 00 · dataparquet · 12.4 GBchunk 01 · transforms14 steps · jsonchunk 02 · queries6 savedchunk 03 · sessionlayout · sort · filterschunk 04 · lineagesha-256 9f2e…c41a
SEALED

opens without dat0 → plain parquet + tagged json · pandas · polars · spark

One file. Sealed. Yours.

Data, transforms, queries, session, lineage — the whole workflow packs into a single .dat0 file with a sha-256 chain. Email it, archive it, attach it to the issue. Inside it's plain Parquet and tagged JSON, so pandas, Polars, or Spark can read it without dat0 installed.

Not a promise.
A code path.

Every tool says "privacy-first." dat0 is open source, so you don't have to take the word for it — the guarantees are functions you can read. AI is bring-your-own-key (Anthropic, OpenAI, OpenRouter, or your local Ollama) and off until you add one.

receipts
telemetry/redaction.rs
ai/schema_ctx.rs
ai/ssrf.rs
per docs/privacy.md

Five privacy guarantees, each naming what dat0 does with a class of data.
your SQL & resultsnever transmitted
row values → AInever by default — schema names only
API keysOS keychain — never in files, logs, telemetry
crash reportsopt-in, self-hosted, paths redacted
cloud computeonly when you attach it — 0 bytes egress by default
deliberately nota BI tool — no dashboards to babysita notebook — no hidden statea DB client — files come firstcloud-required — everA tool that tries to be everything ends up being a browser tab. dat0 is a workbench: files in, proof out.

The workflow is one file.

workflow.dat0 · 5 chunks · sha-256 9f2e…c41a · designed, not shipped

No spam. One email when there's something to run.

dat0

© Accidentally Awesome Labs · 2026

apache-2.0docsgithubx / twitter

lineage.json

every other tool asks for a trade: scale, custody, or proof.

notebooks hide their state. dashboards can't explain themselves.

dat0 doesn't ship yet — this page is the design.

the waitlist is chunk 05: write access is you.

engine duckdb · nativeengine duckdb · nativemem 412 MBrows 1,048,571 / 1,200,448,93060 fpsdesigned and developed by Accidentally Awesome Labs