Under the hood

Why it's this fast, and this trustworthy

The heavy math lives in a native Rust core — not in the UI. That isn't an implementation detail. It's the reason the numbers are fast, correct, and reproducible.

Architecture

Strict separation, by design

A bug in a widget can never corrupt a scientific result. The math engine can be tested, optimized, and even run headlessly — the UI is strictly a viewer.

01Presentation (Flutter)
A viewer of domain state — never mutates results.
02Application
Use cases: graph execution, serialization, export.
03Domain (pure)
The node graph, entities, units, signal payloads.
04Native Core (Rust)
~128k lines: all math, simulation, units, σ.

A native Rust compute core

~128k lines of Rust, organized into focused modules: signal processing, statistics, an Intel-MKL-backed linear-algebra backend, tensor algebra, curve fitting, complex arithmetic, uncertainty & lineage, and a CAS bridge.

The philosophy is explicit — prefer proven, optimized crates over hand-rolled loops, except where there's a clear reason not to. That keeps results fast and trustworthy.

An AOT simulation compiler

Naively, a formula-based ODE re-parses its expression on every derivative evaluation. Captyse instead ahead-of-time compiles the scalar residual once into a flat f64 slot program with constant folding.

34s → 1.96s
Parse memoization
46.6 ms
AOT residual
~730×
Faster, bit-identical

It's gated and self-validating: the fast path validates bit-for-bit against the generic path and bails out if they ever disagree — so it can never silently produce wrong physics.

The two pillars

Units and uncertainty, carried natively

Every value carries its physical dimension and, optionally, a standard uncertainty — and both propagate correctly through every operation, including a live ODE solve.

Dimensional algebra

shipping

Unit algebra runs on every binary operation. Multiplying a velocity by a time yields a length; adding incommensurable quantities is rejected loudly.

Uncertainty propagation

shipping

First-order Gaussian propagation with correlation-aware lineage, so X − X correctly yields ~0 variance.

Reproducible by choice

Deterministic RNG, compensated (Kahan/Neumaier) summation, and Welford's online variance keep long simulations from leaking catastrophic-cancellation error. A user-chosen compute mode trades speed against bit-exactness explicitly:

  • Deterministic — one thread, bit-exact across machines.
  • Reproducible · Parallel — all cores + Intel CBWR, fast and bit-exact (the default).
  • Fast · Parallel — all cores, maximum speed.

A panic firewall

Rust panics are caught at every FFI boundary, so a numeric edge case never takes down the app. Runtime DLLs load through a hardened safe loader. And the event/solver honesty gate refuses to run an event-bearing model on an event-blind solver — rather than silently giving you wrong physics.

Proven by thousands of Rust tests and adversarial physics checks against analytic facts.

Early Access

Numbers you can trust, at speed

The engine is the product. Come build on it.