v0.60.0
v0.60.0
Released 2026-07-05.
Minor release. First release published to both npm and JSR, plus a new unscoped js2wasm proxy for discoverability. Six days of work centered on standalone (host-free) mode — native Promises, generators, and descriptor reflection with no JS runtime — alongside broad test262 conformance fixes and continued IR adoption.
test262: 32,472 / 43,106 passing (75.3%) on the committed baseline. The report now credits host-free (portable, no-JS-host) passes, so the headline number reflects a stricter honesty bar than earlier releases rather than a like-for-like count.
Packaging & distribution
@loopdive/js2now publishes to npm and JSR via tokenless OIDC trusted publishing, and the unscopedjs2wasmproxy makesnpm install js2wasmresolve to the canonical package.- The publish workflow was split into independent per-registry jobs so a not-yet-configured registry can't block the others.
Standalone / host-free runtime
Standalone mode (--target standalone, pure WasmGC, no JS host) gained large chunks of runtime that previously required host imports:
- Native Promises —
new Promise(executor)retires thePromise_newhost import (#2959);Promise.all/Promise.racecombinators (#2867 Gap 4); recursive thenable assimilation and asyncthrow→rejectrouting (#2867); and a general N-state async resume machine for multi-await linear code (#2895, #2906). - Native generators — heterogeneous boxed-any carriers, live-across-yield local spills, and
yield*completion-value delegation (#2864); resume-funcidx desync and i64/BigInt-yield boxing fixes (#2941, #2993). - Descriptor reflection & builtins — host-free
Object.getOwnPropertySymbols(#2866); intrinsic accessor descriptors (#2885);new <non-constructor-builtin>()throwsTypeError(#2886); reflectiveMath/Number/globalThisreads via native singletons (#2933, #2988); and identity-stable reified builtin static-method values + shared%ArrayIteratorPrototype%identity (#2963, #3013). - Dynamic member-read substrate — a new
__dyn_member_getcarrier wired into the IR member-read path (#2949 S5.x, #3053), with byte-inert dynamic equality and relational lowering (#2949 S5.2, S5.3). - Host-free honesty metric — the report credits only genuinely host-free passes (#2879, #2889).
Language conformance
- RegExp
@@replace/@@splitargument, flag, and exec-override result coercion (#3051). - for-in now walks the prototype chain for inherited enumerable keys (#2964).
- Object.defineProperty descriptor round-trip, value-less-default →
undefined, and crash fixes (#3042, #3044). - Destructuring — assignment-destructuring defaults fire on absent element/property (#2845); native tuple-from-iterable destructure in standalone/wasi (#2995); early errors for
asyncshorthand properties and trailing comma after a rest element (#3026). - Coercion —
ToPrimitivevalueOf→toStringfall-through in operators (#2891);[Symbol.toPrimitive]()on hint-less object literals emits valid Wasm (#2883); BigInt⇄String loose equality viaToNumber(#2109); exact integer-exponent path for**/Math.pow(#2887). - Tagged templates reconciled to a spec-correct
TemplateStringsArray(#2981);(eval as any)()stack overflow fixed (#3005).
IR adoption
- IR lowers class get/set accessors and constructors for flat classes (#3000-B, #3000-C), keeps
super_init/super_calllive through DCE (#3000-E), and claims static methods underextends(#2857). - Coercion-site and windowing type queries route through the type oracle / oracle-ratchet (#3037, #3054-B2, #1930).
Website & tooling
- Report page gains a standalone toggle, mobile-overflow handling, benchmark data, and edition-scoped error patterns (#2871); assorted blog/landing chart and scoring fixes.
- Merge-queue robustness: failure-aware auto-enqueue that won't re-add a just-parked PR (#2975).
Curated highlights; full history: git log v0.59.5..v0.60.0 (786 merges).