Changelog
All notable changes to @tinyactors/scxmljs are listed here. The format follows
Keep a Changelog.
Versioning#
The package follows Semantic Versioning, with the usual rule for 0.x: until 1.0, a minor version (0.1 → 0.2) may contain breaking changes, and a patch version (0.1.0 → 0.1.1) contains only fixes and additions. Every breaking change is listed under Changed or Removed with what to do instead.
The public API is everything the entry points export (@tinyactors/scxmljs, /trusted, /view,
/explorer), the custom elements' attributes, properties, events, slots and ::part() names,
the --scxml-* custom properties, and themes/tinyactors.css. Anything marked @internal,
the files under dist/ other than the entry points, class names inside the shadow DOM and the
private --x-* properties are not public API and can change in any release.
Unreleased#
Added#
<scxml-view>: theevent-dataattribute gives label clicks event data (a JSON object from event names to data), andscxml-sendlisteners can setdetail.data.<scxml-view>: when a clicked event changes nothing, or raises an error (for example a condition that throws, which counts as false), asend-statusbar says so, and the live region announces it. Before, the click looked like it did nothing.<scxml-explorer>: list rows answer "what is this state, what happens in it, how do I get out": entry actions and invokes, transitions as "event → target" with a condition mark, send buttons while the state is active, a "last visited" mark, and a click that opens the row in place. New parts:list-rowmodifiersactivevisitedopen,visited,row-actions,row-exits,row-event(fired),row-detail,open-detail;cardandlane-rowgetvisited,edge-labelgetsfired. Newstrings:onEntry,eventless,guard,justTaken,lastVisited,openDetail,lastStep.
Changed#
<scxml-explorer>is quieter: one header bar (the playback controls moved into it), no status badges or redundant counts, sentence-case labels, hairlines instead of boxes, and colour only for meaning (running colour: active; waiting colour: what the last step did). The System level hides the tree and shows the service inspector.<scxml-explorer>parts:speedsis now a<select>(it was a group of buttons);last-stepmoved from the playback bar to under the title;sendis now the event's name itself (there's no separate Send button);event-datais a<details>disclosure. The playback bar's queue readout is theclockpart's tooltip. The EnglishfocusSummaryno longer lists all descendants andtrafficgives a message total.
0.1.0 - 2026-09-28#
The first release.
Added#
- An SCXML 1.0 interpreter with the ECMAScript data model. All 160 automatic mandatory W3C conformance tests pass in both data models; see docs/conformance.md and docs/deviations.md.
- Two entry points with the same API:
@tinyactors/scxmljsruns chart code in a QuickJS sandbox (WebAssembly), with a per-evaluation timeout (scriptTimeoutMs) and a per-session memory limit (memoryLimitBytes);@tinyactors/scxmljs/trustedruns it in the host's engine. - Load-time validation (
SCXMLValidationErrorwith every problem) and authoring warnings (model.warnings). - Clocks:
realClock,VirtualClockfor tests,PlaybackClockfor pause, step and speed. - Custom Event I/O Processors and invokers; SCXML child sessions with a
loaderforsrc. - Typed session events,
settled(),waitFor(),steps()andsnapshot(). - Page integration:
connect(),bind()withdata-scxml-*attributes, and the opt-inreflectandelementEventsoptions. <scxml-view>(@tinyactors/scxmljs/view): a whole chart, drawn and running, with no JavaScript of your own.<scxml-explorer>(@tinyactors/scxmljs/explorer): explore running systems level by level, and its view-model.- A shared theming contract (
--scxml-*tokens,::part()), a neutral light/dark default theme, andthemes/tinyactors.css. - Works under a strict Content-Security-Policy (no
'unsafe-inline'styles) and with Trusted Types (sandboxed entry point); see docs/csp.md. <scxml-view>scales a too-wide diagram down on its own, no further than--scxml-min-scale(default 0.65);fitscales all the way. A terminated session keeps its final states marked (reached), and an element with nothing to show yet shows a hint instead of an error (a host may setsessionlater).- Tested in CI in Chromium, Firefox and WebKit (functional, screenshots, axe-core with no violations), in Node, Bun and Deno from the packed tarball, and with React 19, Vue 3, Svelte 5 and Angular 22 apps; see docs/bundling.md.