Ask in plain English. Get the answer.
xeli writes the SQL. DuckDB runs it. The table swaps to the answer.
A terminal spreadsheet for the moments you want the answer faster than you can open a tab. CSV, JSON, Parquet, xlsx — plus a Ctrl+K bar that turns plain English into SQL on DuckDB.
$npx @josharsh/xeli data.csv| # | id | name | city | department | salary | start_date | is_active |
|---|---|---|---|---|---|---|---|
| 1 | 1 | Alice Johnson | New York | Engineering | 95000 | 2020-03-15 | true |
| 2 | 2 | Bob Smith | San Francisco | Marketing | 78000 | 2019-07-22 | true |
| 3 | 3 | Carol Williams | Chicago | Engineering | 105000 | 2018-01-10 | true |
| 4 | 4 | David Brown | New York | Sales | 67000 | 2021-06-01 | false |
| 5 | 5 | Eve Davis | San Francisco | Engineering | 112000 | 2017-09-14 | true |
| ... | 25 more rows | ||||||
xeli writes the SQL. DuckDB runs it. The table swaps to the answer.
5 GB Parquet? Fine. Vectorized in-process engine. No server, no schema.
Pick columns. Pick aggregation. Enter.
CSV, TSV, JSON, JSONL, Parquet, xlsx, stdin pipe, file picker.
The keys you already know. Mouse if you must.
Everything you'd want printed on the back of the box if xeli came in a box.
npx @josharsh/xeli data.csvruns once, no installnpm install -g @josharsh/xeliglobalbrew install josharsh/tap/xelimacOS or Linuxcat data.csv | xelistdin works tooWindows isn't supported yet — help wanted.
Print this. Pin it next to your monitor.
By
Harsh
When
May 2026
I never figured out Google Sheets.
Every time I open it I instinctively google "how to VLOOKUP", close the tab, and ask Claude to do it in Python. There's a specific shame in being a programmer who can't use Google Sheets.
So I built xeli. A terminal spreadsheet where I type what I want in English and DuckDB does the rest. Built it for me. Sharing it in case you're like me.
No install. No signup. Your file never leaves the tab — DuckDB runs in your browser.