Equana

Blog

Engineering notes on language design, WebAssembly numerics, and browser-native scientific computing.

July 30, 2026·Max Schurigwebassemblyperformancebenchmarks

From 3 to 410 GFLOPS in the browser — a dgemm optimization diary

The full optimization ladder for double-precision matrix multiply in Equana, from a naive JavaScript triple loop to a multi-threaded WASM SIMD kernel — every rung, with numbers.

Read article
July 29, 2026·Max Schurigwebassemblyperformanceblas

Your hand-written WASM matmul beats OpenBLAS-in-WASM — here's why

A hand-written WebAssembly dgemm kernel sustains 37.9 GFLOPS single-thread where OpenBLAS compiled to WASM manages 30.7. The reason is what native BLAS assumes about the machine — and what the WASM compile takes away.

Read article
July 28, 2026·Max Schuriglanguage-designdispatchequana

Multiple dispatch in a dynamically-typed language

How Equana picks which function to run — on argument count and runtime types, walking a type hierarchy — and why operators, user types, and built-ins all share one dispatch table.

Read article
July 27, 2026·Max Schuriginterpretersdebugginglanguage-design

Building a debugger is easy when you own the AST walk

A notebook debugger with breakpoints, stepping, and variable inspection — and why it took a few hundred lines instead of DWARF, source maps, and deoptimization.

Read article
July 26, 2026·Max Schurigparsinglanguage-designequana

A two-pass parser for a language where "sin x", "2x", and "3 add 4" are all legal

How Equana parses bracket-free calls, implicit multiplication, and user-defined infix operators without backtracking — a registry scan followed by a plain Pratt parser.

Read article
July 25, 2026·Max Schuriglanguage-designequanaengineering

Why we built our own language instead of a MATLAB-compatible interpreter

The pivot from "rewrite Julia in TypeScript" to designing Equana — what a clean-sheet language bought us in granularity and backend flexibility, and what it cost.

Read article
July 24, 2026·Max Schurigcloudflarearchitecturewebassembly

The compute-heavy app whose server does no computing

Equana runs a whole numerical stack on Cloudflare Workers, and the Worker never runs a single floating-point kernel. Here is the inverted architecture and why it wins.

Read article
July 23, 2026·Max Schurigwebassemblyarchitectureperformance

One .wasm file per function: lazy-loading a numerical library

Instead of one big WebAssembly module, Equana ships each kernel as its own tiny .wasm binary, fetched the first time you call it and selected for your exact hardware.

Read article
July 22, 2026·Max Schurigffiwebassemblyarchitecture

Same code, three backends: the TS/WASM/native FFI dispatch chain

Every numerical function in Equana runs three ways — native system libraries, a portable WASM binary, and a TypeScript fallback — behind one call. Here is how the dispatch chain is wired.

Read article
July 21, 2026·Max Schuriglinear-algebrasparsenumerics

Sparse matrices in the browser — CSR, iterative solvers, and 40 functions

Equana's sparse package is its largest specialized library. Here is how compressed storage, summing triplet assembly, and Krylov solvers let a browser tab handle systems a dense matrix could never fit.

Read article
July 20, 2026·Max Schurigfftdspalgorithms

Radix-2 Cooley–Tukey vs Bluestein — an FFT for arbitrary lengths

A fast FFT for powers of two is the easy half. Making every other length just as fast means turning an arbitrary-length transform into a power-of-two convolution. Here is how both algorithms fit together.

Read article
July 19, 2026·Max Schurignumericsfloating-pointprecision

What quad precision actually means (and how we made float128 real)

Doubling the bits in a float doesn't double the digits — it roughly doubles them. Here is what binary128 buys you, why we chose the representation we did, and how we kept every digit alive from source literal to storage.

Read article
July 18, 2026·Max Schurigfeaeigenvaluesvisualization

Modal analysis of a 3D part, entirely in your browser

Assemble a stiffness and mass matrix, solve a generalized eigenproblem for the natural frequencies and mode shapes, and watch the part flex — every step runs on-device.

Read article
July 17, 2026·Max Schurigvisualizationvtknotebook

Volume rendering scientific data with VTK.js in a notebook

Render 3D scalar fields as translucent volumes, pull isosurfaces out of them with marching cubes, and drive a live WebGL canvas — all inside a notebook cell.

Read article
July 16, 2026·Max Schurigsymbolic-mathcassymwa

Symbolic math in the browser with symwa

A real computer algebra system — exact fractions, symbolic derivatives, equation solving, and simplification — running in a notebook tab next to your numeric code.

Read article
July 15, 2026·Max Schuriglsptoolinglanguage-design

Writing a language server for your own language

How Equana gets completions, hover, signature help, and go-to-definition in both VS Code and its in-browser editor — from a single semantic core wrapped by two different frontends.

Read article
July 14, 2026·Max Schurigtestingmarketingengineering

What executing every code sample taught us about our own marketing

We wired every code snippet on the site — hero, docs, comparison pages, blog — to run against the real kernel in CI. The bugs it caught were all in the copy, not the code.

Read article
July 13, 2026·Max Schurigtauridesktopperformance

Shipping a browser app as a desktop app with Tauri — where native numerics pay off

Equana's desktop build runs the exact same React UI in a Tauri shell, but dispatches numerical kernels to native OpenBLAS, Apple Accelerate, and SuiteSparse. Here's the dispatch chain, and where native actually wins.

Read article
July 12, 2026·Max Schuriglanguage-designparsingequana

Designing a programming language that reads like English — for scientific computing

Why Equana lets you write "let f be x mapsto x^2", how the parser handles optional syntax without backtracking, and where readable becomes footgun.

Read article
July 12, 2026·Max Schurigdspffttutorial

FFT signal analysis in your browser in 10 lines

Build a noisy signal, run it through an FFT, read the spectrum, and find the dominant frequencies — every cell runs in a browser tab.

Read article
July 12, 2026·Max Schurigmemory-managementinterpretersarchitecture

Reference counting instead of GC: deterministic memory for a browser notebook

Why Equana's interpreter — hosted inside a garbage-collected runtime — deliberately uses reference counting for its arrays, and how views, temporaries, and free() work.

Read article
July 12, 2026·Max Schurigwebassemblyperformancearchitecture

Running LAPACK-style kernels in the browser: zero-copy WASM via SharedArrayBuffer

How Equana's TypeScript interpreter and its WASM kernels share one linear memory, why slices allocate nothing, and what the benchmarks say.

Read article