OPEN SOURCE SPREADSHEET INFRASTRUCTURE

Make the spreadsheet a product capability, not a black box.

A spreadsheet UI for real workflows: keep the viewport bounded, move computation to a Worker, and choose the workbook backend that fits your product.

Framework-agnostic UI core · Solid reference implementation · Rust/WASM workbook engine

▦Revenue plan .xlsx
LMShare
E8ƒx=SUM(E4:E7)
A
B
C
D
E
1
Channel
Q1
Q2
Q3
Year
2
Revenue plan · FY 2026
3
Pipeline
Actual
Forecast
Forecast
Total
4
Self-serve
$126k
$164k
$198k
$488k
5
Sales-led
$214k
$241k
$286k
$741k
6
Partners
$38k
$62k
$91k
$191k
7
Expansion
$81k
$118k
$139k
$338k
8
Forecast
$459k
$585k
$714k
$1.76m
Synced just now
⌗
Bounded projection

Request only the worksheet projection in view.

◌
Worker computation

Move formula calculation off the main thread.

⌘
Bring your backend

Keep the UI distinct from the data source.

01 / PRODUCT THESIS

Built for your product workflow, not a desktop Excel remake.

01

Set a boundary before the data gets big.

Viewport projection lets the renderer work with visible cells instead of expanding a full workbook into the browser.

Explore viewport projection →

02

Keep computation in the background.

A Rust/WASM workbook can run in a Web Worker while the main thread keeps scrolling, editing, and keyboard input responsive.

See the runtime boundary →

03

Keep control of your data.

The framework-agnostic UI core reads and writes through a backend port that can meet your product where it is.

Read the architecture →

02 / EVALUATE BY JOB

Start with the question you need to answer.

The homepage does not list every capability. Pick a real task and go straight to its running demo and explanation.

WORKBENCH

Give operations, finance, or sales an editable business surface.

See the full workbench: selection, editing, formulas, filters, comments, and worksheet structure share one UI state.

Open workbench demo →
import { SpreadsheetGrid } from
  '@einfach/solid-excel/vnext'

const backend = createStaticSpreadsheetBackend({
  sheets: [{ id: 'plan', name: 'Plan' }],
  matrix: revenuePlan,
})

<SpreadsheetGrid
  sheetId="plan"
  viewport={viewport}
  backend={backend}
/>