Robert O'Neill ·

A spreadsheet that drops down from the top of the screen

I never liked desktop calculators. Nothing persists. You are on the phone, someone reads you three numbers, you work out the split, and tomorrow it is gone. Spotlight and its Linux cousins are better, but they still treat a calculation as something to forget the moment you hit Enter.

What I wanted was a scratch spreadsheet: one key, a grid slides down over whatever I am doing, I type a few numbers and a formula, and next time it is exactly where I left it. This weekend I built it as a plugin for Omarchy, and it is in the Omarchy plugin marketplace as VisiGrid Scratch.

Type a few numbers, close it, open it again: still there

Super+Ctrl+Q. It defaults to VisiCalc green, the 1979 original, and follows your Omarchy theme if you ask it to. Vim keys are optional. Alt+= does AutoSum, arrows pick cell references while you type a formula, Shift and Ctrl arrows select and jump the way they do in Excel. The whole plugin is about a thousand lines of QML, and none of them know how to add two numbers.

The overlay never does any math

That is the part worth writing down. The plugin is a view. The spreadsheet is a VisiGrid engine running headless:

vgrid serve ~/.local/state/visigrid/scratch.sheet --autosave 5

That one process owns the sheet, recalculates, and autosaves. The overlay talks to it the same way an agent or a script would. Every edit is one line of JSON piped to vgrid apply; every refresh is one vgrid inspect --json of the visible range. A round trip is about a hundred milliseconds, which is faster than the key repeat rate, so it feels local.

The engine runs detached from the shell, in its own session, with its token kept in a file only you can read. A shell restart, which Omarchy does whenever you change a plugin or a theme, never touches it: the new shell finds the running engine by pid and adopts it. Summoning the grid after a restart is instant because nothing restarted.

Because it is a normal VisiGrid session, anything that speaks the protocol can write into it while it is on screen. I had Claude fill in a quote calculation through the VisiGrid MCP connector while the overlay was open, and the cells landed row by row. The overlay polls the workbook revision every 400 milliseconds while it is visible and re-reads only when something changed.

What a weekend plugin found in the engine

Building a client this thin is a good way to find out what the server gets wrong, and it found one real bug.

VisiGrid’s native save deleted the file and rewrote it in place. Kill the process halfway through, which is what a shell restart did to the first version of the plugin, and you have a zero-byte sheet. The plugin’s wrapper noticed, moved the empty file aside, and started fresh, which is the polite way to lose someone’s numbers.

Every save path in VisiGrid now writes a sibling temp file, closes it, renames it over the original, and syncs the directory. A crash mid-save leaves the previous file byte for byte. That fix is in main and ships with the next release, and it protects every VisiGrid user, not only this plugin. The plugin’s own fix, running the engine detached, means the shell cannot interrupt a save in the first place.

Try it

You need vgrid, which ships with VisiGrid. On Arch:

omarchy pkg aur add visigrid-bin
omarchy plugin add https://github.com/VisiGrid/omarchy-scratch.git --enable

Then bind a key in ~/.config/hypr/bindings.lua:

hl.unbind("SUPER + CTRL + Q")
o.bind("SUPER + CTRL + Q", "Scratch grid", "omarchy-shell shell toggle visigrid.scratch")

The sheet lives at ~/.local/state/visigrid/scratch.sheet. It is an ordinary VisiGrid file: press Ctrl+O to open it in the full app, or read it from a terminal with vgrid peek.

Why this exists

VisiGrid was built engine first. The same engine runs the desktop app, the CLI, the web editor, and now a shell overlay that took a weekend. If you have a place a spreadsheet should live and does not, the engine is the part you want, and vgrid serve is how you get it. Download VisiGrid and try it.

Common questions

Does the plugin need VisiGrid installed?
It needs the vgrid command-line tool, which ships with VisiGrid. On Arch that is the visigrid-bin package; on other systems any install that puts vgrid on your PATH works.
Does anything leave my machine?
No. The engine listens on loopback only, the sheet is a local file, and the plugin makes no network requests. Sharing a sheet is a separate, explicit vgrid command.
Can I open the scratch sheet in the full VisiGrid app?
Yes. Press Ctrl+O in the overlay. It saves, hands the file to the app, and starts a fresh engine on whatever the app saved the next time you summon it.