HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
garritfra
cell
Rust2026–2026
garritfra / cell

cell

A fast terminal spreadsheet editor with Vim keybindings

3Distinct people
13Mentions
0Explicit recommenders
330GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A fast terminal spreadsheet editor with Vim keybindings

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by hour13 dated mentions

Observed mentions: 2026-04-27 11:39:49 UTC to 2026-04-27 21:22:59 UTC.

0123452026-04-27 11:00:00 UTC to 2026-04-27 12:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsApr 27, 11:002026-04-27 12:00:00 UTC to 2026-04-27 13:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-04-27 13:00:00 UTC to 2026-04-27 14:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2026-04-27 14:00:00 UTC to 2026-04-27 15:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2026-04-27 15:00:00 UTC to 2026-04-27 16:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-04-27 16:00:00 UTC to 2026-04-27 17:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsApr 27, 16:002026-04-27 17:00:00 UTC to 2026-04-27 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-04-27 18:00:00 UTC to 2026-04-27 19:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-04-27 19:00:00 UTC to 2026-04-27 20:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-04-27 20:00:00 UTC to 2026-04-27 21:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2026-04-27 21:00:00 UTC to 2026-04-27 22:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsApr 27, 21:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Apr 27, 11:002026-04-27 11:00:00 UTC2026-04-27 12:00:00 UTC110
Apr 27, 12:002026-04-27 12:00:00 UTC2026-04-27 13:00:00 UTC000
Apr 27, 13:002026-04-27 13:00:00 UTC2026-04-27 14:00:00 UTC202
Apr 27, 14:002026-04-27 14:00:00 UTC2026-04-27 15:00:00 UTC303
Apr 27, 15:002026-04-27 15:00:00 UTC2026-04-27 16:00:00 UTC000
Apr 27, 16:002026-04-27 16:00:00 UTC2026-04-27 17:00:00 UTC000
Apr 27, 17:002026-04-27 17:00:00 UTC2026-04-27 18:00:00 UTC000
Apr 27, 18:002026-04-27 18:00:00 UTC2026-04-27 19:00:00 UTC000
Apr 27, 19:002026-04-27 19:00:00 UTC2026-04-27 20:00:00 UTC101
Apr 27, 20:002026-04-27 20:00:00 UTC2026-04-27 21:00:00 UTC505
Apr 27, 21:002026-04-27 21:00:00 UTC2026-04-27 22:00:00 UTC101

What Hacker News says

13 sources
This looks good, but, I noticed: > Supported Functions (v1) > SUM, AVERAGE, COUNT, MIN, MAX, IF I would recommend switching to numerically stable algorithms for adding numbers and taking their averages sooner rather than later. Looking at the code[1], it looks like you are simply summing the numbers and dividing by count. If that is indeed the case, please switch to a stable average[2]. See also [3]. Additionally, I tried to test the executable[4] on Windows, but there is something wrong with input. Using Windows Terminal Version: 1.24.10921.0, characters are doubled on input. Regular Vim compiled using Visual C++ does not have this issue. When I press `:`, I get `::` in the COMMAND line. Then, every key I press gets doubled. This means I cannot `:q!`. :-) [1]: https://github.com/garritfra/cell/blob/99b0afc7a60a871b27452... [2]: https://w
Read the rest
In Show HN: A terminal spreadsheet editor with Vim keybindings
Thank you! XLSX and ODS support won't be trivial, but I see the value of having it. I added it to the roadmap: https://github.com/garritfra/cell/issues/22 Regarding your question: This idea has been sitting on my todo list [1] for over 3 years now. I don't usually work with large data files in my dayjob, but occasionally working with the odd CSV on macOS frustrated me enough to put it on the list. And now that spec-driven development has matured enough to be actually useful, there's no real excuse not to build this. I genuinely see myself caring for this long-term. I'm comfortable with the scope, and there seems to be some real interest from the community. [1]: https://garrit.xyz/todo
In Show HN: A terminal spreadsheet editor with Vim keybindings
Thanks for trying it, and the spreadsheet repo is great prior art — I'll dig through it. Drag-fill. Not yet, but the parts are mostly there. The formula layer already carries abs_col/abs_row through tokenization → AST → eval, so $A2 + B$1 parses correctly today; what's missing is the editing op that copies a formula across a range and shifts only the relative components. Opened #17 for it. The tricky part isn't the rewrite, it's the keybinding — Vim doesn't have an obvious idiom for "drag," so I'm leaning toward a visual-selection + fill-from-anchor key (Y is a candidate) or a :fill command. Open to suggestions if you have a feel for what works in a modal editor. It also needs to land on top of the bulk-undo work in #8/#9 so a fill is one undo step instead of N. bar() / inline visualizations. Love it, opened #18. The interesting design ca
Read the rest
ll is whether BAR returns a CellValue::Visual { … } that the renderer dispatches on (correct under column resizes, but ripples into CSV export, copy/paste, and how SUM treats a visual cell), or whether it just returns a string of block-drawing chars at eval time (trivial to add, but width gets baked in at compute time which is wrong). The first is the right answer; the second is a tempting MVP. SPARKLINE(range) is the natural follow-up once the abstraction settles. #17 — https://github.com/garritfra/cell/issues/17 #18 — https://github.com/garritfra/cell/issues/18
In Show HN: A terminal spreadsheet editor with Vim keybindings
Thanks! Honestly, the current implementations are pretty naive — they pass the tests and feel snappy on the small sheets I work with, but they'd buckle pretty quickly under real load. Most of what you're asking about is already on the tracker; I opened a batch of issues citing your comment as the prompt. Recalculation. Right now it's a full recalc on every edit: recalculate collects all formula cells, computes in-degrees across the whole formula set, topo-sorts, and evaluates top to bottom. The dirty flag gets propagated by mark_dirty but isn't actually used to prune work. It's also re-parsing every formula from its raw string on every pass. Two issues cover this: #8 introduces a batch boundary so paste/fill/CSV import trigger one recalc instead of N, and #7 adds criterion benches so we can actually tell whether the parser, the BFS, or th
Read the rest
e topo sort is the hotspot before optimizing. AST caching on Cell is the obvious next step once #7 confirms parsing dominates. https://github.com/garritfra/cell/issues/8 https://github.com/garritfra/cell/issues/7 Dependency tracking. The bigger smell is in extract_deps — a range like SUM(A1:A1000) literally enumerates 1000 cell positions into the dep graph, with a HashSet per cell on each side. Fine at hundreds of cells, a disaster at hundreds of thousands. Range expansion is one of the bench cases in #7; the proper fix (interval-keyed deps so ranges stay first-class instead of fanning out) doesn't have its own issue yet — I should open one, since #7 only measures the problem. Undo/redo. This is the worst offender right now. UndoEntry only had a single-cell variant until very recently; #12 added MultiCellEdit, but #13 tracks two destructive paths I missed — visual-mode d and p/P paste — that still don't push undo entries at all. #9 is the broader coalescing story (one dd = one undo, CSV import = one undo, etc.), tied to the batch mechanism from #8 so a single transaction produces a single undo entry. sort_by_column is also non-undoable today and belongs in that bucket. https://github.com/garritfra/cell/issues/13 https://github.com/garritfra/cell/issues/9 Larger CSVs. Storage is HashMap<CellPos, Cell> — fine sparse but with overhead per cell; for very wide imports a column-oriented or arena layout would pay off. I haven't profiled it though, so this is speculative; the dependency-graph blowup will hurt before raw storage does. #7 includes a 100k-row CSV load case to put numbers on it. And #10 is the meta-issue to lift all of this out of source comments and into actual architecture docs, which I probably should have done before posting. https://github.com/garritfra/cell/issues/10 So: nothing here scales today, but the architecture splits cleanly enough that none of it needs a rewrite — AST caching, dirty-set recalc, range-aware deps, and grouped undo are the four threads, and most have issues attached.
In Show HN: A terminal spreadsheet editor with Vim keybindings
garritfra·Apr 27, 2026Submission

Show HN: A terminal spreadsheet editor with Vim keybindings

While speccing out this spreadsheet tool, I realized that I never had to think about the keybindings. It all just came naturally from Vim. Normal/insert/visual modes, hjkl navigation, dd/yy/p, :w, :q. The usual muscle memory works. It supports CSV/TSV import and export, and a native .cell format that preserves formulas. The formula engine handles SUM, AVERAGE, COUNT, MIN, MAX, and IF with range references. The codebase is a Cargo workspace: a pure cell-sheet-core library (no TUI dependency) and a cell-sheet-tui crate on top of ratatui. Early days, but it's usable. To try it out: cargo install cell-sheet-tui Feedback of any kind is greatly appreciated!
126 points · Open discussion

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.