# A spreadsheet with formulas built to recalculate.

> An embeddable spreadsheet with formulas and CSV.

Language: en
Canonical: https://texuli.com/solutions/sheets/
Markdown: https://texuli.com/solutions/sheets.md (this page). Every texuli.com page has a Markdown twin at its URL plus `.md` (the home page is https://texuli.com/index.md), and any page URL answers `Accept: text/markdown` with its twin instead of HTML.
Last Updated: 2026-11-13

---

Solution · Sheets

An owned formula engine, a keyboard grid, and CSV that will not inject formulas.

Status: in development

[See it recalculate](https://texuli.com/solutions/sheets/#demo)[Start from code](https://texuli.com/solutions/sheets/#quickstart)

 ![Isometric spreadsheet grid and formula bar assembling from violet and pearl cubes](https://texuli.com/_astro/solution-sheets-hero.BoEPi5jU.webp)

## Plan a project budget

Try this

- Change a quantity or unit price; the row and grand totals recalculate.
- Toggle formulas to see the owned engine’s expressions as data.
- Add a line item, then reset to restore the fixture workbook.

Use Reset to return to the starting example.

Enter or F2 edits the cell. Escape cancels. Control or Command plus Z undoes; Shift plus Z or Y redoes. Control or Command plus C copies; V pastes.

Project budget spreadsheet preview

| Row | A | B | C | D |
| --- | --- | --- | --- | --- |
| 1 | Work item | Quantity | Unit price | Total |
| 2 | Design workshop | 3 | 120 | 360 |
| 3 | Prototype materials | 8 | 24.5 | 196 |
| 4 | User interviews | 5 | 42 | 210 |
| 5 | Project total | | | 766 |
| 6 | | | | |
| 7 | | | | |
| 8 | | | | |

8 rows

Project budget loaded. Select a cell or use the controls to explore the formula engine.

Enter or F2 edits the cell. Escape cancels. Control or Command plus Z undoes; Shift plus Z or Y redoes. Control or Command plus C copies; V pastes.

Project budget spreadsheet

| Row | A | B | C | D |
| --- | --- | --- | --- | --- |
| 1 | Work item | Quantity | Unit price | Total |
| 2 | Design workshop | 3 | 120 | 360 |
| 3 | Prototype materials | 8 | 24.5 | 196 |
| 4 | User interviews | 5 | 42 | 210 |
| 5 | Project total | | | 766 |
| 6 | | | | |
| 7 | | | | |
| 8 | | | | |

8 rows

If the interactive demo cannot load, use the static preview above.

## What you can ship in a sheet

### Totals follow every edit

An owned engine parses formulas into the shared AST. Dependents recalculate. The language is closed: no reference from text, and nothing reaches the host except the clock you pass.

- Formulas

 ![Isometric spreadsheet grid with a formula bar and dashed arrows to dependent cells, built from cubes](https://texuli.com/_astro/solution-sheets-story-1.JSGnV_Vm.webp)

### Move rows without breaking formulas

Structural edits rewrite references. The workbook engine keeps computed values current. Values paint as text. There is no HTML sink.

- Structural edits

 ![Isometric spreadsheet with a new row of cubes inserting while dashed formula links rewrite](https://texuli.com/_astro/solution-sheets-story-2.C5Gx62Sj.webp)

### Hand off CSV that stays inert

Import keeps formula-looking fields as text unless you opt in. Export neutralizes formula injection so a spreadsheet tool will not run them.

- CSV

 ![Isometric grid exchanging a CSV card through a glass gate that turns formula bars into plain text bars](https://texuli.com/_astro/solution-sheets-story-3.DO2k1elF.webp)

planned

### Work on it together, later

Collaboration on the document sync core is planned, not shipped. Localized formula display and native evaluation are planned too.

- Collaboration

 ![A spreadsheet grid of flat cubes with highlighted cells and a small rising bar chart](https://texuli.com/_astro/page-sheets.Dq5P8-pf.webp)

## From a workbook to a grid you can edit.

- ### Model Validate a workbook and keep every edit in a framework-free model.Package: `@texuli/sheets`
- ### Calculate Evaluate formulas and recalculate every dependent cell.Package: `@texuli/sheets`
- ### Edit Work the accessible grid and formula bar from the keyboard.Package: `@texuli/sheets`
- ### Exchange Import and export CSV. Export neutralizes formula injection.Package: `@texuli/sheets`

Sheets is built from @texuli/sheets, on @texuli/data, texuli, @texuli/core and @texuli/date.

Solution

Sheets

Packages

- L5[`@texuli/sheets`](https://www.npmjs.com/package/@texuli/sheets) Formula engine, workbook model, CSV and grid view Subpaths: ./formula · ./model · ./csv · ./view

Built on

- L4 `@texuli/data` (Data views)
- L3 `texuli` (Styled components)
- L0 `@texuli/core` (Texels and the URL policy)
- L0 `@texuli/date` (Date arithmetic)

 ![Four-stage isometric pipeline from a workbook model through calculate and grid edit to a CSV card](https://texuli.com/_astro/solution-sheets-how.BAvT3f73.webp)

Build with Sheets

## Start with a sheet

### Install

```
pnpm add @texuli/sheets
```

### Evaluate a formula

```
import { createWorkbook, displayValue, loadUntrustedSheet } from '@texuli/sheets/model';

const loaded = loadUntrustedSheet("{\"format\":\"texuli-sheet\",\"formatVersion\":1,\"meta\":{\"title\":\"Office budget\"},\"sheets\":[{\"id\":\"costs\",\"name\":\"Costs\",\"rows\":20,\"columns\":4,\"cells\":{\"A1\":\"Desk\",\"B1\":120,\"A2\":\"Chair\",\"B2\":80,\"B3\":\"=SUM(B1:B2)\"}}]}");
if (loaded.ok) {
  const workbook = createWorkbook(loaded.sheet, { now: () => Date.now() });
  console.log(displayValue(workbook.value('costs', 2, 1)));
}
```

### Import CSV

```
import { csvToSheet } from '@texuli/sheets/csv';

const imported = csvToSheet("item,amount\nDesk,120\nChair,80", { name: 'Orders' });
if (imported.ok) {
  console.log(imported.sheet.sheets[0]?.name);
}
```

### Edit with SheetView

```
<script lang="ts">
  import { loadUntrustedSheet } from '@texuli/sheets/model';
  import { SheetView } from '@texuli/sheets/view';
  import '@texuli/tokens/base.css';

  const loaded = loadUntrustedSheet("{\"format\":\"texuli-sheet\",\"formatVersion\":1,\"meta\":{\"title\":\"Office budget\"},\"sheets\":[{\"id\":\"costs\",\"name\":\"Costs\",\"rows\":20,\"columns\":4,\"cells\":{\"A1\":\"Desk\",\"B1\":120,\"A2\":\"Chair\",\"B2\":80,\"B3\":\"=SUM(B1:B2)\"}}]}");
  let sheet = $state(loaded.ok ? loaded.sheet : null);
</script>

{#if sheet}
  <SheetView bind:sheet now={() => Date.now()} />
{/if}
```

Verified by `apps/website/tests/solutions/sheets-quickstart.test.ts`

## Recipes

- ### [Drop a grid into your app](https://texuli.com/guides/solutions/sheets/) Load a workbook, evaluate formulas, and show the grid, step by step in the Sheets docs.
- ### [Install the package (external site)](https://www.npmjs.com/package/@texuli/sheets) Add @texuli/sheets from npm (pre-1.0, in development).

## For agents

Agents emit a spreadsheet as data through the spreadsheet catalog id. The host app checks it with validateDraft and the sheet check before painting; the remote MCP server refuses spreadsheet nodes. The packages are in development.

- [MCP server](https://texuli.com/mcp-server/)
- [Agent skill](https://texuli.com/skill/)
- [Building with agents](https://texuli.com/agents-page/)

- `spreadsheet` spreadsheet: In developmentCatalog component that carries a whole sheet in its sheet prop.
- `validateDraft` validateDraft: In developmentCatalog check; spreadsheet nodes pass only with the checkSheet hook from the sheets model.
- `skills/texuli/blueprints/SKILL.md` skills/texuli/blueprints/SKILL.md: In developmentSkill stage J: forms, canvases, sheets and data sources as agent data.

## Platforms

- ### Web Web: In developmentSvelte 5 packages published on npm (pre-1.0).
- ### Compose Desktop Compose Desktop: PlannedKotlin Multiplatform renderer on the JVM, built in this repository.
- ### Android Android: PlannedNative renderer target.
- ### iOS iOS: PlannedNative renderer target.

[How the native renderer works](https://texuli.com/native/)

## More Solutions

- ### [Slides](https://texuli.com/solutions/slides/) Write decks as JSON or Markdown and present them in the browser.Status: in development
- ### [Documents](https://texuli.com/solutions/documents/) Edit, read, paginate and export block documents.Status: in development
- ### [Workflows](https://texuli.com/solutions/workflows/) Author and view workflow graphs inside your app.Status: in development
- ### [Canvas](https://texuli.com/solutions/canvas/) An embeddable whiteboard with shapes, connectors and export.Status: in development
- ### [Design systems](https://texuli.com/solutions/design-systems/) Carry one brand document across Texuli surfaces.Status: available
- ### [Dashboards](https://texuli.com/solutions/dashboards/) KPI boards people arrange, from the keyboard too.Status: in development
- ### [Forms](https://texuli.com/solutions/forms/) Schema-driven forms with conditions, steps and drafts.Status: in development
- ### [Agent chat](https://texuli.com/solutions/agent-chat/) A thread whose replies paint validated blueprints.Status: in development
- ### [Rich text editor](https://texuli.com/solutions/editor/) Owned rich text with Markdown in and out, safe paste and export to any chat.Status: in development

## Start building with Sheets

An embeddable spreadsheet with formulas and CSV.

[Read the Sheets docs](https://texuli.com/guides/solutions/sheets/)[Install @texuli/sheets](https://www.npmjs.com/package/@texuli/sheets)

 ![A low horizon of stacked cubes rising to one glowing pearl cube under a wide open sky](https://texuli.com/_astro/home-final.BGuYKnjC.webp) ![A low horizon of stacked cubes rising to one glowing pearl cube under a wide open sky](https://texuli.com/_astro/home-final.BGuYKnjC.webp)

## For agents

Plan a project budget: the live Sheets demo runs in the browser on fixture data. Runs in the browser on one fixture workbook; nothing is saved. The live parts run in the browser and are not in this Markdown; the operations below do the same work through the read-only MCP server at https://texuli.com/mcp (no sign-in; see https://texuli.com/auth.md).

Limits today:

- Pre-1.0 and in development: a new minor version may break the API.
- No collaboration, localized formula display or native evaluation yet.

MCP operations ([reference](https://github.com/DailybotHQ/texuli/blob/main/packages/tools/docs/ops.md#operations)):

- `catalog.search`: Search the component catalog.
- `component.get`: Read a component manifest.
- `blueprint.validate`: Validate a blueprint draft.

Docs:

- [Sheets docs](https://texuli.com/guides/solutions/sheets/)
- [@texuli/sheets README](https://github.com/DailybotHQ/texuli/blob/main/packages/sheets/README.md)
