MIT · C++20 · WebAssembly · React

A real spreadsheet engine. Written once. Run everywhere.

Skeepto is an open-source spreadsheet. A React UI on a C++20 engine compiled to WASM — the same binary in Electron, in the browser, and on Node.js. 344 functions, Excel formulas, read write .xlsx.

344
Excel functions
1
WASM binary
2
hosts · web & Node
0
JavaScript rewrite
Skeepto in Electron: a loan amortization schedule
Two repos, one core

The app and the engine
stay separate — on purpose.

Contributors can work on the UI, the server, or calculation without breaking everything. This is a serious spreadsheet, not a demo.

Application

Skeepto

The environment: Canvas grid, React, collaboration, virtual disk, offline Electron.

  • Instant local editing (WASM in the browser)
  • Electron desktop app — no MongoDB, no login
  • Collaborative mode · Node.js, MongoDB, WebSocket
  • Import / export .xlsx through the WASM converter
  • Open AI via MCP, self-hosted
github.com/Stephane-76/Skeepto

Calculation core

Skeepto Engine

The C++20 kernel: sparse cells, shared formulas, incremental recalc, 344 functions.

  • Native (macOS, Linux, Windows) or WebAssembly
  • Clear API: tApi / UISpreadSheet
  • Dynamic arrays · XLOOKUP · LET · MAP
  • Excel converter SkExcel — read and write
  • CppUnit tests · CMake superbuild
github.com/Stephane-76/SkeeptoEngine

What sets it apart

01

Local and server, the same code

Google Sheets calculates in the browser (not reusable server-side). Excel Online calculates on the server (latency on every action). Skeepto does both, from a single C++ codebase.

02

Self-hostable

React, WASM, Node.js, MongoDB. Your workbooks and your engine run on your infrastructure. MIT license.

03

AI you can drive, not a captive copilot

Copilot and Gemini stay in a proprietary cloud. Skeepto exposes the engine over the Model Context Protocol: any agent can drive the sheet.

04

An engine, not a widget

Insert a row without rewriting every address. Formulas are interned. Recalc walks the dirty graph — not a full-sheet sweep.

Skeepto Engine

Built to outrun Excel
on calculation, not on the ribbon.

Excel is a desktop product. This is a calculation core: dependency graph, work queues, resolved cycles — the same binary in the grid and under an agent.

  1. Lemon → RPN Formulas compile once, LALR(1) parser, interned opcodes.
  2. Kahn Topological work-queue on dirty cells. Each node evaluates once.
  3. Tarjan Cycles become strongly connected components.
  4. Gauss–Seidel Iterate until ε = 10⁻¹². Divergence → #RECURSIVE.

344 worksheet functions

  • 166 Math & stats
  • 36 Text
  • 35 Logical
  • 29 Dynamic arrays
  • 29 Lookup
  • 25 Date
  • 24 Financial

FILTER, SORT, UNIQUE, MAP, REDUCE, SCAN, XLOOKUP, LET, LAMBDA… Excel names are preserved on import and export.

Architecture

One binary. Two hosts.

The browser paints fast (Canvas 2D, JsonView). The server isolates each workbook in a pool of WASM instances. No business logic is rewritten in JavaScript.

C++20 Skeepto Engine
Browser · Electron SkReactSpreadSheet ENVIRONMENT=web · local editing
Node.js · Fastify SkReactSpreadSheetNode ENVIRONMENT=node · pool, XLSX, agents
// Same surface in JavaScript and in C++ (tApi)
const ss = new SpreadSheet.UISpreadSheet();
ss.NewWorkBook("demo");
ss.Value("A1", "10", "Sheet1");
ss.Value("A2", "20", "Sheet1");
ss.Value("B1", "=SUM(A1:A2)", "Sheet1");
ss.GetValue("B1", "Sheet1");   // "30"
Why this shape

Three web spreadsheets,
three places for the engine.

Excel Online Google Sheets Skeepto
Engine Server Client JavaScript WASM client and server — same C++
Full workbook Server Client + server authority WASM memory + server pool
Grid Canvas Canvas Canvas
Offline Almost impossible Limited Electron, zero server
Self-hosting No No Yes · MIT
Third-party AI Captive Captive Native MCP

Two repositories. One MIT license.

The fastest path: the Electron app. Node 18+, npm run build, then npm run electron. No C++ toolchain.