v0.4Agent API · Schema Inspector · Column sort & search

The framework
for the
spreadsheet era.

A billion people program logic inside spreadsheets every day. They've never had a framework. NextSheet is it: components, end-to-end types, version control in Git, deploy to any surface.

Live on npmTypeScript 5.xNode 20+0 runtime deps
~/revenue-model/sheets/q3-forecast.sheet.tsx
split.xlsx.tsx
1 // sheets/Sales.sheet.tsx 2 import { Sheet, Row, Cell, sum } from 'nextsheet' 3 import { revenue, growth } from '@/data' 4 5 export default function Sales() { 6 return ( 7 <Sheet name="Q3 Forecast" currency="USD"> 8 {revenue.byRegion.map(r => ( 9 <Row key={r.region}> 10 <Cell>{r.region}</Cell> 11 <Cell>{r.units}</Cell> 12 <Cell>{r.price}</Cell> 13 <Cell>{sum(r) * (1 + growth)}</Cell> 14 </Row> 15 ))} 16 </Sheet> 17 ) 18 } 19 20 // → deploys to Sheets, Excel, .xlsx, .csv
D4fx=sum(r) * (1 + growth)
A · regionB · unitsC · priceD · revenueE · yoy
1North America12,480$249$3,107,520+18.2%
2Europe9,320€229€2,134,280+12.4%
3LATAM4,105$189$775,845+34.9%
4APAC6,870$209$1,435,830+22.1%
5MEA1,244$199$247,556-3.1%
6Σ total34,019$7,701,031+16.8%
7
01 · Thesis
/thesis.md

The spreadsheet is the most successful programming model ever shipped. It runs the world's finances, operations, science, and supply chains. It is the default interface humans reach for when data needs structure. And it scaled to a billion users without a framework, without a component model, without a type system, and without a deploy target.

Every other software discipline had its inflection point. The web got React. Backend got Rails, then Next.js, then the edge. Data got dbt. Design got Figma. The spreadsheet — the single most-used piece of structured software on Earth — still authors the same way it did in 1985.

NextSheet is the bet that this ends now. We're building the open-source framework for writing sheets like modern software: components, end-to-end types, composition from primitives, version control in Git, deploy to any backend, authored by humans and agents alike. One codebase, any surface.

1.1B
daily spreadsheet authors
41years
without a framework
more spreadsheet users than devs
0
end-to-end types · until now
02 Get started

From zero to a typed .xlsx in 30 seconds.

A single dependency. Local-first authoring. Compiles to every surface — Google Sheets, Excel Online, .xlsx, .csv — from the same source.

terminal — ~/projects
# create a new project
$ npx create-nextsheet-app revenue-model
  ✓ TypeScript
  ✓ ESLint configured
  ✓ Git repo initialized

$ cd revenue-model && pnpm dev
  ▲ NextSheet 0.4.0
  - local:    http://localhost:3000
  - sheet:    file://./dist/forecast.xlsx
  - types:    generating ./types/cells.d.ts
    ✓ compiled in 142ms
sheets/Revenue.sheet.tsx
import { Sheet, Column, Row, Cell } from 'nextsheet'

export default function Revenue() {
  const rows = [
    { region: 'NA',    rev: 3_107_520 },
    { region: 'EMEA',  rev: 2_134_280 },
    { region: 'LATAM', rev: 775_845   },
  ]
  return (
    <Sheet name="Revenue">
      <Column name="region" type="string" primary />
      <Column name="revenue" type="currency" currency="USD" />
      {rows.map(r => (
        <Row key={r.region}>
          <Cell>{r.region}</Cell>
          <Cell>{r.rev}</Cell>
        </Row>
      ))}
    </Sheet>
  )
}
03 How it works

One pipeline, five primitives, infinite surfaces.

NextSheet doesn't replace Excel or Sheets. It treats them as compile targets, the same way Next.js treats the browser as just another one. You write components. The compiler resolves references, types the cells, and emits for whatever surface you ask.

tsx
Source
Components
<Sheet>, <Column>, <Row>, <Cell> JSX with types, business rules as pure functions.
Resolver
Cell graph
Analyzes dependencies, detects cycles, freezes evaluation order.
</>
Codegen
Multi-target emitter
Google Sheets API · Excel OOXML · .xlsx binary · .csv · JSON. One AST, five backends.
T
Type-check
End-to-end types, even in formulas
If amount is currency, adding it to a string is a compile error — not a #VALUE! at 3 AM.
Runtime
Live sync with any backend
Change the code, the production .xlsx updates. Git as the source of truth, not the file.
04 Backends & targets

Write once. Deploy where the business already is.

The CFO opens Excel. Marketing opens Sheets. Finance lives in audited PDFs. NextSheet compiles to every surface where your users already work — without migrating them to a new product.

Google Sheets
Stable
Bidirectional sync via OAuth. Native formulas, not images. Collaborators see cells — not code.
nextsheet deploy --target google
Excel Online
Stable
Microsoft Graph. Push to SharePoint or OneDrive. Works with corporate accounts without add-ins.
nextsheet deploy --target excel-online
.xlsx static
Stable
OOXML binary generated at build. Ideal for emails, reports, offline distribution, and auditing.
nextsheet build --target xlsx
.csv / .tsv
Stable
Flatten to tabular, ready to ingest into BigQuery, Snowflake, Redshift. Auto-escape, UTF-8 encoding.
nextsheet build --target csv
SuperSheet
Stable
Deploy to the NextSheet hosted platform. Shareable URL, diff per PR, ephemeral preview.
nextsheet deploy --target supersheet
Agent API
New · v0.5
Fluent WorkbookBuilder + applyPatch(). JSON schemas for LLMs. toAnthropicTools() / toOpenAITools().
import { wb } from 'nextsheet/agent'
05 Agent API

Your agent knows every cell.

NextSheet's Agent API gives LLMs a typed, structured interface to read, modify, and reason over your workbooks — not raw file bytes. Every operation is auditable, reversible, and formula-aware.

?"
Ask questions, get cited answers
Ask questions about your workbook and get answers with cell-level citations — row index, column name, and sheet included.
∂=
Update assumptions safely
Update assumptions while preserving formula dependencies. The agent patches values without touching the formulas that depend on them.
×!
Debug errors at the root
Debug errors and identify their root causes. The agent traces #VALUE!, circular refs, and broken dependencies back to their source cells.
◈+
Build models and fill templates
Build new models or fill existing templates. Describe what you need in plain language — the agent writes typed Sheet components.
≡→
Navigate multi-tab workbooks
Navigate complex multi-tab workbooks seamlessly. The agent resolves cross-sheet references and follows data across sections.
⊕∘
Connect your other tools
Use connectors to bring context from your other tools directly into your spreadsheets — CRMs, databases, APIs.
nextsheet · agent · Sales.sheet.tsx
youWhat's driving the MEA decline in row 5?
agentMEA (row 5, sheet Sales) is down -3.1% YoY. The issue is in C5 (price: $199) — flat while volume dropped. D5 and E5 confirm the margin compression. Suggest reducing price to stimulate demand.
suggested patch →
{ op: "updateCell",
  sheet: "Sales",
  rowIndex: 4,
  column: "price",
  value: 185 }

→ D5: $247,556 → $230,180
  E5: -3.1%  → -9.3%  (formula preserved)
youApply it and recalculate.
agentApplied. D5 updated to $230,180. Formula in E5 recalculated automatically — dependency chain preserved.
Ask about your workbook…
import { wb, fromWorkbook, AgentError } from 'nextsheet/agent'
06 Charts

Charts are components, not screenshots.

A NextSheet <Chart/> emits as a native chart on the target surface: editable in Sheets, interactive in Excel, SVG in the browser. Same component, five destinations.

<Chart type="area" />live
$7.70M +16.8% YoY
<Chart type="bar" />q3
34,019 units · 5 regions
NAEULAAPME
<Chart type="line" />12w
+22.1% APAC growth
W1W12
07 Deploy

Git is the source of truth. Not the file.

Every change is a PR. Every release is a tag. Every rollback is a git revert. Finally, your financial models stop living in model_FINAL_v7_JUAN_vdef.xlsx.

CI that understands cells

Cell-level diffs, not bytes. Tests over formulas. The reviewer sees which number changed and why, not a binary blob.

diff · sheets/forecast.sheet.tsx● passing
- <Cell format="currency">{r.rev * 1.12}</Cell>
+ <Cell format="currency">{r.rev * (1 + growth)}</Cell>
D2: $2,390,393 → $2,481,124 +3.8%
D3: $868,946 → $901,883 +3.8%

Preview deployments per PR

Every pull request generates an ephemeral .xlsx, a disposable Sheet, and a shareable URL. Your CFO reviews the model before it reaches main.

nextsheet-bot · 2s ago
Preview ready for #pr-482
Q3 growth rate adjustment
Sheets
preview-482.goog →
.xlsx
forecast-482.xlsx →
08 Roadmap

Public, opinionated, in Git.

Today v0.4 is stable for Sheets, Excel, and .xlsx, with Agent API for LLMs. The next quarters build toward v1: typed formulas, collaborative runtime, and a delivery engine.

Q2 · 2026 · Now
  • Core: <Sheet>, <Row>, <Cell>, <Column>
  • Backends: Sheets, Excel, .xlsx, .csv
  • Formula type-checking
  • CLI & dev server with hot reload
  • Agent API (v0.5): WorkbookBuilder + applyPatch()
  • Schema Inspector + column sort + search
Q3 · 2026
  • PDF reports with automatic pagination
  • Cell-level diff in GitHub Actions
  • Pivot tables as components
  • Plugin & adapter registry
Q4 · 2026
  • SQL sinks (Postgres / BigQuery)
  • Collaborative runtime (CRDT)
  • Enterprise SSO / audit log
  • Scheduled builds & delivery
Q1 · 2027 · v1.0
  • Generic typed formulas
  • Time-series as a primitive
  • Stable public API (LTS)
  • Complete docs at nextsheet.dev

The first framework
for a billion authors.

Open, versioned, written in TypeScript.

nextsheet.dev/preview/sales.sheet.tsx
// sheets/Sales.sheet.tsx
import { Sheet, Column, Row, Cell } from 'nextsheet'
import { revenue, growth } from '@/data'

export default function Sales() {
  return (
    <Sheet name="Q3">
      <Column name="region"  type="string"   primary />
      <Column name="units"   type="number"            />
      <Column name="revenue" type="currency" currency="USD" />
      {revenue.byRegion.map(r => (
        <Row key={r.region}>
          <Cell>{r.region}</Cell>
          <Cell>{r.units}</Cell>
          <Cell>{r.rev * (1 + growth)}</Cell>
        </Row>
      ))}
    </Sheet>
  )
}
D4fx=r.rev * (1 + growth)
A · regionB · unitsC · priceD · revenueE · yoy
1North America12,480$249$3,107,520+18.2%
2Europe9,320€229€2,134,280+12.4%
3LATAM4,105$189$775,845+34.9%
4APAC6,870$209$1,435,830+22.1%
5MEA1,244$199$247,556-3.1%
6Σ total34,019$7,701,031+16.8%
source · .tsx
output · .xlsx
/ / /