SpawnJS 3.x is the current line. Versions of record are in CHANGELOG.md (core and Blazor package 3.0.0 as of this writing).
- One crossing per call. Arguments, POCOs, arrays and the method travel in a per-instance call tape in .NET memory; Javascript reads it in one
JSImportand writes the result back by aJSSchemain the same crossing (Architecture, v3 design). - Callback arguments in .NET memory before the call. A JS -> .NET handler reads nothing back across the boundary.
- Marshaller contract:
Write(JSTape, T)/Schema/Read(ref JSTapeReader)(Writing marshallers).NetToJSis gone. - Generated POCO codecs (
SpawnDev.SpawnJS.Generators, shipped in the package) with[SpawnJSPoco]for runtime-only types; the reflection plan stays for anything the generator cannot mirror exactly. - Multi-instance kept: all state per .NET instance, tested with two runtimes in one page.
- Microsoft
JSObjectavoided as a handle (speed, Symbol tagging, dispose aliasing).JSHost.DotnetInstanceused once at register. - Typed wrappers (
SpawnJSObject/JSRef) so BlazorJS-style wrapper bodies port. - Blazor extras in
SpawnDev.SpawnJS.Blazor(ElementReference.As<T>(),ElementRef<T>,SpawnJSRunAsync) so the core stays Blazor-free. - Trim descriptor shipped in the package.
- Live suite in
SpawnDev.SpawnJS.Demo+SpawnJS.TestRunner(Playwright).
- A
Funccallback's return value costs one extra call (a deliberate trade: the return value's pins must outlive the handler in threaded builds). - Generated codecs leave readonly fields,
override/newmembers and types without a public parameterless constructor to the reflection plan.
- Slot lifetime is manual. A helper that "builds it JS-side and returns the slot" leaks unless the caller disposes.
- An unhandled exception on a JS-to-.NET callback can exit the WASM runtime. Handle or the process is gone.
Getis a property lookup;Callis a method. Dotted paths are property paths, not expressions.- Default marshalling is JSON-shaped (plain objects and number arrays). TypedArray /
BigIntare explicit types.
New work lands in CHANGELOG.md. This page is orientation, not a promise list.