Everything that ships with the engine — the canonical specification, per-package API references generated from the source on every build, the repository's audit trail, and a growing set of topic guides that explain the moving parts in narrative form.
SPEC.md is the document the engine, the static checker, and the bounded model checker all answer to. SPEC.async.md adds the composite statechart for fetched resources and conflicts.
The canonical engine spec — denotational semantics
(Behavior a = GraphTime → a), the commit pipeline
in §5, the worked end-to-end example in §10, and the
race-class catalogue with the full enumerator/checker rules
in §16.
The composite statechart that governs every async fetch — launch, version-stamp, abort, settle — together with the conflict-record registry, transaction-phase contract, and the rules that tie outcomes back to the graph.
Read SPEC.async.md@causl/* package.Generated from the source on every build via TypeDoc. The symbol pages link straight back to the relevant SPEC sections wherever a behavior is normative.
Generated from the source on every build via TypeDoc.
Engine — Behaviors, derivations, transactions, snapshot/hydrate, retention, explain.
View API
React bindings — useCausl,
useDispatch, useCauslFamily,
MVU runner, SSR.
Spreadsheet patterns on top of the core — formulas, ranges, cycles.
View APIAsync resources and the conflict registry, composed as statecharts.
View APIInspection primitives — explain materialisation, liveDerivation, snapshot, statechart.
View APIRedux DevTools Extension protocol bridge (zero-cost when the extension is absent).
View API
Persisted-input adapter with structured
PersistenceError reporting.
npm wrapper for causl-check — the Rust-backed
static IR linter (twelve passes).
Benchmarks — Jotai / RTK / MobX comparisons across the canonical scenario taxonomy.
View APIMigration drift detector — flags unmigrated Jotai/MobX/Redux patterns in adopters.
View APIcausljs/causl-ts.
These four files travel with the source and are the right
starting points for anyone evaluating, upgrading, or
contributing to causl. Each causljs/* repo ships
its own analogous trio (README, CHANGELOG, CONTRIBUTING) and
the same pre-commit hook contract — see the
cross-org topology section.
Why causl needs to exist, what it commits to, how it compares to the rest of the JavaScript state-management landscape, and the package map.
Read on GitHub
A wave-by-wave record of what has actually landed on
main. Updated on every release; the source of
truth for "what changed since I last upgraded".
The repo's contribution rules — branch model, PR template,
how each of the eight commitments is enforced at the package
boundary, in CI, and in code review, and the
pre-commit hook setup that mirrors the full
CI gate union locally (cargo-husky for
Rust-side repos, plain Husky for the TS-side).
Where the SPEC is normative and exhaustive, these guides walk through one concept at a time with diagrams and worked examples.
A guided tour through
Behavior a = GraphTime → a: why this shape makes
glitch-freedom a theorem rather than a scheduler trick, and
how derivations compose.
The single statechart that governs resource fetch, conflict status, transaction phases, and interaction modes — rendered inline so each transition has a name you can grep for.
Read on GitHubcausl-check catchesA rule-by-rule mapping from each twelve-pass lint to the SPEC §16 race class it corresponds to — including which shapes are caught statically and which still require the enumerator.
Read on GitHub
The canonical mapping table from common patterns in the three
most-migrated-from libraries to their causl equivalents,
paired with the codemod rules in
@causl/migration-check.
The most recent CI output from the Apalache differential
runner against the EPIC-7 TLA+ corpus — regenerated on every
run of the bounded model checker. The Tier-3 S-row corpus
(spec_s1.tla / spec_s2.tla /
spec_s3.tla) covers the SPEC.async §9.1.1 rows.
The extension surface by which an adopter declares a custom
race class without violating the closed §9.1 catalogue. Phase 2
shipped the loader + SARIF integration in
causljs/causl-check.
Race detection across multiple causljs/* repos in
a single SARIF stream — the per-push fast check, the nightly
cross-repo sweep, and the federated finding wire format.
Causl was split out of a single monorepo into seven repositories
under the causljs
GitHub organisation. Each repo owns one concern; the
contribution flow, the CI gates, and the release cadences are
independent.
@causl/core, @causl/react,
@causl/formula, @causl/sync,
@causl/devtools,
@causl/devtools-bridge,
@causl/persistence,
@causl/checker,
@causl/bench,
@causl/migration-check.
engine-rs-core (pure-algorithm
no_std + alloc) plus the single consolidated
bridge cdylib that replaced the legacy
engine-rs-bridge-serde +
engine-rs-bridge-gc pair in
PR #74.
epic/1 migrated the hot path to
&mut dyn CellAccess.
Defaults loadWasmBackend() to the consolidated
@causljs/causl-wasm bridge
(DEFAULT_WASM_ENGINE_MODE=rust-ssot). Where
causl-ts keeps the JS engine as the SSOT, this
fork inverts the default.
Compares causl-ts / causl-ts-wasm-engine / Jotai / RTK / MobX
across the SPEC scenario taxonomy. The
CAUSL_TS_SOURCE env var (upstream vs
wasm-engine) lets a single run A/B the two
TypeScript-side engines. Output feeds the dashboard at
/benchmarks.
causl-check (twelve-pass IR linter),
causl-enumerate (SPEC §16.4 bounded enumerator),
the Apalache differential runner, the Tier-3 Apalache S-row
corpus, RFC 0001 (adopter race classes), and RFC 0002
(federated race detection).
Small dev server used while iterating on the demos that ship
with causljs/causl-org. Was previously vendored
into causl-ts/tools/causl-org-srv/; lives
standalone now.
causljs/causl-check.All three crates are CI gates, not runtimes — they read the TypeScript source, lower it to the IR, and reject programs that violate SPEC §16 before they reach production.
causl-check
The static IR linter — twelve passes, one per race class,
shipped as a Rust binary and wrapped by
@causl/checker for npm consumers.
causl-enumerateThe SPEC §16.4 bounded model checker — full type surface, phased transitions with per-step events, an oracle, and Tier-1/2/3 bound presets.
View on GitHubRe-runs the EPIC-7 TLA+ corpus through Apalache and diffs its output against the bounded enumerator — the safety net for the safety net.
View on GitHub
Everything linked above is generated from, or lives in, the
seven repos under the causljs organisation on
GitHub. Issues, PRs, and the complete eight-commitment audit
trail are there.