# VisiGrid on the Web

[app.visigrid.app](https://app.visigrid.app) runs VisiGrid in a browser. No
install, no account needed to try it.

It is not a viewer or a cut-down preview. It runs the **same calculation
engine** as the desktop app, compiled to WebAssembly — so a formula gives the
same answer in both, and the version is the same version.

It is also not the same product. Some of what makes the desktop app a desktop
app cannot exist in a browser tab, and some of it simply is not built yet. This
page says which is which, so you can tell what you are choosing.

## The same in both

| | |
|---|---|
| Calculation engine | Same Rust engine, same results |
| File formats | Opens and exports `.xlsx`, `.ods`, `.csv`, `.tsv` |
| Command palette | `Ctrl+K` / `Cmd+K`, with fuzzy search |
| Vim mode | All keys except `f` — see [Vim Mode](https://docs.visigrid.app/features/vim-mode/) |
| Find & replace | `Ctrl+F` / `Ctrl+H` |
| Conditional formatting, data validation, sort & filter | Yes |
| Charts | Yes |
| Themes | Includes Catppuccin and the retro VisiCalc theme |

## Only in the browser

Cloud sheets are a web feature. The desktop app opens files on your machine;
the browser app keeps sheets in your VisiGrid account, which is what makes
these possible:

- **Sharing** — invite someone by email as a viewer or an editor
- **Live collaboration** — see who else is in a sheet and which cell they are
  in, and watch their edits appear as they commit them
- **Links that work anywhere**, including on a machine with nothing installed

## Only on the desktop

None of these are in the browser app today:

| Feature | Why |
|---|---|
| **Built-in terminal** | A browser tab has no shell, and should not |
| **Lua console and custom functions** | Needs a Lua runtime the browser build does not carry — see below |
| **Minimap** | Not built yet |
| **Split panes** | Not built yet |
| **Remappable keys** (`~/.config/visigrid/keybindings.json`) | No config file in a browser; web bindings are fixed |
| **Vim `f`** (jump to a cell by label) | Needs a label overlay drawn over the grid — a feature rather than a keybinding |
| **Named ranges** | Not built yet |
| **Working entirely offline** | The desktop app needs no network at all |

### Sheets that use custom functions

This is the one place where the two do not agree, so it is worth stating
plainly rather than leaving you to discover it.

Custom functions are Lua, and the Lua runtime is part of the desktop app and
the CLI — not the calculation engine. The browser runs the same engine, but
that engine has never contained Lua. So a sheet whose formulas call your own
functions opens fine in the browser and computes everything else correctly,
while each cell that calls a custom function shows:

```
Unknown function: ACCRUED_INTEREST
```

Nothing is lost. The formula is still in the cell, the file is unchanged, and
opening the same sheet on the desktop computes it as usual. But the browser
cannot produce that value, and it says so rather than guessing or leaving the
cell blank.

If you share such a sheet with someone, they will see those errors unless they
open it on the desktop.

We would rather have no Lua in the browser than a second Lua that mostly
agrees with the first. A different runtime would mean the same sheet could
produce two different answers depending on where you opened it, which is the
problem VisiGrid exists to avoid.

The [CLI](https://docs.visigrid.app/cli/install/) is desktop-only too, in the sense that it is a program
you install — though what it operates on can be either.

## Which to use

Use the **desktop app** if you want the fastest thing, files that stay on your
machine, or any of the desktop-only features above. It is 42MB and starts in
well under a second.

Use the **browser app** if you want to share a sheet with someone, work with
another person in it at the same time, or try VisiGrid without installing
anything.

They are not exclusive. The same account works in both, and a sheet exported
from one opens in the other.