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 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
06 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 →
07 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
/ / /