Skip to content

Choose a Surface

Formulon exposes the same core through several packaging surfaces.

Same engine, different host contracts

Runtime choice affects packaging, memory lifetime, deployment, and error reporting. It should not change spreadsheet semantics.

SurfaceBest forPackage
WebAssemblyBrowser apps, workers, Node services@libraz/formulon
Native NodeNode services that want a .node addon@libraz/formulon-native
PythonNotebooks, batch jobs, data pipelinesformulon
CLIShell scripts, CI checks, workbook inspectionGitHub Releases
C ABIHost applications and custom bindingsrepository build

Pick the highest-level surface that fits your deployment. Drop to the C ABI only when you need a binding that is not already packaged.

Decision guide

RequirementRecommended surface
Browser upload, local preview, worker-side recalculationWASM
Node service with no native install assumptionsWASM
Node service with large workbooks and native deploymentNative Node
Batch job or notebookPython
CI workbook snapshotsCLI
New language bindingC ABI

All surfaces share the same engine. Differences should be about packaging, lifetime management, and host error reporting, not formula semantics.