Choose a Surface
Formulon packages the same C++ core for several hosts. Each package is a surface: the API and distribution format one host sees.
Same engine, different host contracts
The surface decides packaging, memory lifetime, deployment, and how host errors are reported. Formula results come from the shared core; where exact agreement matters, check it with the same engine version, profile and workbook on each surface you ship.
| Surface | Best for | Package |
|---|---|---|
| WebAssembly | Browser apps, workers, Node services | @libraz/formulon |
| Native Node | Node services that can build or stage a .node addon | @libraz/formulon-native (built from a source checkout, not on npm) |
| Python | Notebooks, batch jobs, data pipelines | formulon |
| CLI | Shell scripts, CI checks, workbook inspection | GitHub Releases |
| MCP | AI agents that open, edit and save workbooks | @libraz/formulon-mcp |
| C ABI | Host applications and custom bindings | repository 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
A Node service uses Native Node only when a .node addon can be built or staged; otherwise WASM covers it.
| Requirement | Recommended surface |
|---|---|
| Browser upload, local preview, worker-side recalculation | WASM |
| Node service with no native install assumptions | WASM |
| Node service with large workbooks and native deployment | Native Node |
| Batch job or notebook | Python |
| CI workbook snapshots | CLI |
| AI agent editing workbooks | MCP |
| New language binding | C ABI |