frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: A terminal spreadsheet editor with Vim keybindings

https://github.com/garritfra/cell
28•garritfra•2h ago
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!

Comments

SilentEditor•2h ago
Cool project!

The Vim modal model feels almsot native for spreadsheets, and splitting the formula engine into a TUI-free core was prolly a great architectural choice.

How are you thinking about recalculation, dependency tracking, and undo/redo as the sheet grows, especially once multi-cell edits and larger CSVs start stressing the core?

garritfra•15m ago
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 the 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.

WillAdams•1h ago
Was initially hopeful that this would rather than have A..B..C... and 1..2..3... for columns and rows would instead have one creating categories à la Javelin/Lotus Improv/Quantrix/Flexisheet --- give me that, and have a dynamic system for displaying a pane of formulae and one would have a _very_ nice tool.
garritfra•25m ago
Huh, I haven't thought about that yet, but I like it. I opened an issue to track this: https://github.com/garritfra/cell/issues/11

I'd have to look into the tools you mentioned to really understand all the details. Thanks!

marcyb5st•43m ago
Pretty cool project! Congrats.

QQ: does it support programmatic cell access/modifications?

Eg `cell file.cell --write A2 "42"` or `cell file.cell --read "=SUM(A1:A10)"`? Couldn't surmise that from the glimpse I gave the README, but it would be pretty cool for scripting stuff.

garritfra•33m ago
Love this idea! I created a GH issue for this: https://github.com/garritfra/cell/issues/6

I'll try to add this ASAP. :)

bytejanitor•34m ago
Looks very nice at first glance.

I have been looking for something like this for a long time. Maybe this has some potential to become somewhat popular.

Theaetetus•27m ago
This is great. I often want a low-latency, minimal-feeling option for this sort of thing. (And I get to use my Vim muscle memory less and less often these days!)

Really, thanks for making and sharing this; so far, I feel calm and happy when I'm using it.

garritfra•24m ago
Glad to hear that. Thanks for trying it out! If you have any feedback, I'd be more than happy to hear it.
slu•21m ago
Nice. I've been using https://github.com/andmarti1424/sc-im for a while now. It would be great with a comparison.

Pgbackrest is no longer being maintained

https://github.com/pgbackrest/pgbackrest
228•c0l0•3h ago•101 comments

Show HN: OSS Agent I built topped the TerminalBench on Gemini-3-flash-preview

https://github.com/dirac-run/dirac
81•GodelNumbering•1h ago•27 comments

Men Who Stare at Walls

https://www.alexselimov.com/posts/men_who_stare_at_walls/
95•aselimov3•3h ago•45 comments

Fully Featured Audio DSP Firmware for the Raspberry Pi Pico

https://github.com/WeebLabs/DSPi
129•BoingBoomTschak•2d ago•27 comments

Flipdiscs

https://flipdisc.io
394•skogstokig•4d ago•68 comments

4TB of voice samples just stolen from 40k AI contractors at Mercor

https://app.oravys.com/blog/mercor-breach-2026
68•Oravys•4h ago•17 comments

I bought Friendster for $30k – Here's what I'm doing with it

https://ca98am79.medium.com/i-bought-friendster-for-30k-heres-what-i-m-doing-with-it-d5e8ddb3991d
950•ca98am79•17h ago•481 comments

FDA Approves First-Ever Gene Therapy for Treatment of Genetic Hearing Loss

https://www.fda.gov/news-events/press-announcements/fda-approves-first-ever-gene-therapy-treatmen...
46•JeanKage•4h ago•10 comments

Microsoft to Stop Sharing Revenue with Main AI Partner OpenAI

https://www.bloomberg.com/news/articles/2026-04-27/microsoft-to-stop-sharing-revenue-with-main-ai...
42•helsinkiandrew•1h ago•7 comments

AI should elevate your thinking, not replace it

https://www.koshyjohn.com/blog/ai-should-elevate-your-thinking-not-replace-it/
674•koshyjohn•18h ago•480 comments

Understanding the short circuit in solid-state batteries

https://www.mpie.de/5151287/short-circuit-solid-state-batteries
10•hhs•1d ago•0 comments

Quarkdown – Markdown with Superpowers

https://quarkdown.com/
67•amai•5h ago•11 comments

Show HN: A terminal spreadsheet editor with Vim keybindings

https://github.com/garritfra/cell
28•garritfra•2h ago•10 comments

TurboQuant: A first-principles walkthrough

https://arkaung.github.io/interactive-turboquant/
232•kweezar•12h ago•50 comments

Self-updating screenshots

https://interblah.net/self-updating-screenshots
383•bjhess•1d ago•61 comments

The Prompt API

https://developer.chrome.com/docs/ai/prompt-api
197•gslin•12h ago•102 comments

The next phase of the Microsoft OpenAI partnership – OpenAI

https://openai.com/index/next-phase-of-microsoft-partnership/
56•helsinkiandrew•59m ago•61 comments

France's Mistral Built a $14B AI Empire by Not Being American

https://www.forbes.com/sites/iainmartin/2026/04/16/how-frances-mistral-built-a-14-billion-ai-empi...
131•rzk•4h ago•77 comments

Getting my daily news from a dot matrix printer 2024

https://aschmelyun.com/blog/getting-my-daily-news-from-a-dot-matrix-printer/
33•xupybd•2d ago•5 comments

Branimir Lambov from IBM on Cassandra

https://theconsensus.dev/p/2026/04/26/branimir-lambov-from-ibm-on-cassandra.html
31•eatonphil•1d ago•2 comments

Windows 11's second-chance setup dialogs hurt IT, drain productivity

https://www.theregister.com/2026/04/26/windows_second_chance_setup/
34•geekinchief•1h ago•16 comments

It's OK to abandon your side-project (2024)

https://robbowen.digital/wrote-about/abandoned-side-projects/
142•hisamafahri•6h ago•65 comments

Electrostatics and High Voltage Links

http://amasci.com/static/electrostatic1.html
22•ludicrousdispla•3d ago•3 comments

Fast16: High-precision software sabotage 5 years before Stuxnet

https://www.sentinelone.com/labs/fast16-mystery-shadowbrokers-reference-reveals-high-precision-so...
297•dd23•18h ago•72 comments

Three constraints before I build anything

https://jordanlord.co.uk/blog/3-constraints/
274•nervous_north•1d ago•44 comments

Rust Memory Management: Ownership vs. Reference Counting

https://slicker.me/rust/ownership_and_borrowing_vs_reference_counting.html
47•vinhnx•2d ago•38 comments

A Guide to CubeSat Mission and Bus Design

https://pressbooks-dev.oer.hawaii.edu/epet302/
58•o4c•1d ago•3 comments

SWE-bench Verified no longer measures frontier coding capabilities

https://openai.com/index/why-we-no-longer-evaluate-swe-bench-verified/
331•kmdupree•1d ago•172 comments

Box to save memory in Rust

https://dystroy.org/blog/box-to-save-memory/
156•emschwartz•3d ago•47 comments

Mystery Cpuid Bit

http://www.os2museum.com/wp/mystery-cpuid-bit/
27•userbinator•2d ago•3 comments