- Bump all published packages to v0.0.34
- Document library caching, lowering, and record-spread performance improvements
- Refresh the compiler surface manifest for the release
- Bump all published packages and the surface manifest to v0.0.30.
- Promote host-callback channels into the marked release notes.
- Include callback registration in cross-target ABI symbol checks.
- Bump all published packages to v0.0.29.
- Promote the mobile library target notes into the release changelog.
- Refresh the compiler surface manifest for the new version.
* feat: add mobile library targets for iOS and Android
- three library-mode-only triples join SCRIPTC_TARGET:
aarch64-apple-ios, aarch64-apple-ios-simulator (darwin hosts with
Xcode's iPhoneOS/iPhoneSimulator SDKs), and aarch64-linux-android
(any host with an NDK). The consuming pattern is an embedding app
linking profile-configured static archives — Xcode on the Apple side,
Gradle/NDK on the Android side — so the executable lane refuses the
triples with SC3002 and the pointer to --lib
- zig bundles no Apple or bionic libc: resolveCc discovers the sysroot
(xcrun for the selected Apple SDK; ANDROID_NDK_ROOT or the newest
ndk/<version> under the SDK root) and spells it into targetArgs,
where every cache tier already keys it. The canonical LLVM spellings
map to zig's own with the minimum-version floors pinned:
aarch64-ios.15.0[-simulator] stamps LC_BUILD_VERSION minos 15.0 into
every object, aarch64-linux-android.26 pins the bionic stub level an
embedder's minSdkVersion must meet. API 26 bionic carries everything
the library-lane units call (arc4random_buf included), so no shim TU
joins the archive
- localization follows the existing object-format rule: both iOS
platforms ride the Mach-O host-ld64 arm (ld64 reads iOS objects and
preserves platform/minos through the -r merge), Android rides the
cross-ELF arm (zig relocatable merge + in-process demotion) via the
driver's zig spelling. abi.instance_per_thread needed no per-target
work — thread-local statics compile identically on all three
- admission is a pure env/host check ahead of toolchain discovery: an
iOS triple off a darwin host and near-miss mobile spellings refuse
SC3002 with the pairing or the supported set named, in compile() and
compileLibrary() both, decorated by the profile teaching machinery
- library-multi grows the mobile lanes: M12 admission shape always
runs; SCRIPTC_IOS=1 builds localized a/b archives per target and
emission (M1 symbol exactness, ambient audit, version floor), links
probes with the Xcode clang, and EXECUTES the two-instance and
four-thread probes on a booted simulator byte-for-byte against the
desktop expectations (device-arch archives are build+link verified);
SCRIPTC_ANDROID=1 does the same through the NDK clang and an
emulator, reusing a running device or writing and booting a headless
arm64 AVD directly
- the surface manifest's coverage notes record the mobile posture (the
library-admissible surface only; no mobile claim outside it), the
profile spec and the platforms page carry the mobile matrix with the
version floors, and non-mobile builds are unchanged byte-for-byte
* fix: harden mobile target tooling
* Harden mobile target test isolation
- Bump all workspace packages and the surface manifest to 0.0.28.
- Promote the changelog entry for cross-platform runtime localization.
- Advance release markers for publishing automation.
- Bump all three published packages to 0.0.27.
- Publish release notes for multi-instance library archives.
- Regenerate the compiler surface manifest.
Bump all published packages to 0.0.26, publish the release notes for the new target and runtime surfaces, and regenerate the compiler surface manifest.
* feat: support wasm32-wasi as a production target
- Add production LLVM WASI codegen with a 32-bit ABI, coroutines, and dynamic modules
- Integrate WASI builds and execution into the CLI with capability diagnostics
- Add differential coverage and document the fourth production target
Co-authored-by: Albert <57402359+bulatovv@users.noreply.github.com>
* fix: address wasm target review findings
* fix WASI guest paths and fetch alias detection
* fix WASI async bridge and fetch detection
---------
Co-authored-by: Albert <57402359+bulatovv@users.noreply.github.com>
- Bump all published packages to 0.0.25.
- Document fair socket-read scheduling in the release notes.
- Regenerate the compiler surface manifest for the new version.
- Bump workspace package versions to v0.0.24.
- Document the release’s filesystem, encoding, process, array, and performance updates.
- Refresh the compiler surface manifest for the release.
* feat: support fs/promises FileHandle
- Add static lowering and typing for fs/promises.open and the supported FileHandle surface.
- Implement FileHandle ownership and I/O across the C runtime and C/LLVM backends.
- Add differential corpus coverage and refresh the supported-surface manifest.
* fix fs file handle argument handling
* fix fs file handle validation
* fix(fs): preserve FileHandle read error codes
* fix(runtime): match empty FileHandle buffer behavior
* feat(string): support static split limits
- Lower split limits for string and literal RegExp separators across C and LLVM.
- Match JavaScript ToUint32 limit semantics in the runtime.
- Add differential coverage and refresh diagnostics and surface metadata.
* fix(string): default undefined split limits
* feat(fs): support static writeSync
- Lower Buffer-window and UTF-8 string overloads through the C and LLVM backends.
- Match Node's positioned and current-offset write behavior, validation, and errors.
- Add differential corpus coverage and publish the static surface manifest entry.
* fix(fs): preserve writeSync runtime semantics
* fix fs.writeSync error parity
* fix fs write descriptor errors
- Lower unshift and reverse through the C and LLVM backends.
- Preserve spread, mutation, evaluation-order, and reference-counting semantics.
- Add runtime, differential, and surface-manifest coverage.
* feat(fs): support static rename APIs
- Lower fs.rename, fs.renameSync, and fs/promises.rename through the C and LLVM backends.
- Add runtime callback, error, and promise handling for rename operations.
- Cover typed and check-JS usage with differential corpus tests.
Co-authored-by: ryoppippi <1560508+ryoppippi@users.noreply.github.com>
* fix Windows rename semantics
* fix: move callback rename work off main thread
* fix(runtime): preserve rename callback checkpoints
---------
Co-authored-by: ryoppippi <1560508+ryoppippi@users.noreply.github.com>
* Support static util.parseArgs
- Lower typed util.parseArgs calls through the C and LLVM backends.
- Add a link-gated native parser with Node-compatible options, tokens, defaults, and errors.
- Cover ESM, CommonJS, default argv, sanitizer, and TS7 behavior.
* fix(runtime): align parseArgs behavior with Node
* fix(runtime): close parseArgs parity gaps
* fix(runtime): match parseArgs edge cases
* fix(runtime): preserve parseArgs short and default semantics
- Stamp all published packages and the compiler surface manifest at 0.0.23.
- Publish release notes for the new runtime, compiler, and web-platform surface.
- Preserve a clean Unreleased section and mark only the latest release body.
* Support Date instance lowering
- Lower read-only Date values and constructors through the C and LLVM backends.
- Add portable calendar helpers, differential coverage, and documented surface contracts.
- Fence unsupported mutation, identity, locale, and component-constructor forms.
Co-authored-by: sensei-woo <sensei-woo@users.noreply.github.com>
* Fix Date exception and timezone semantics
* fix: harden Date lowering edge cases
* fix Date lowering edge cases
* Fix Date union fences and offset clipping
---------
Co-authored-by: sensei-woo <sensei-woo@users.noreply.github.com>
* Lower AbortController for fetch cancellation
- Add static and dynamic lowering for construction, signal access, and abort calls
- Back controllers with native signal state shared by fetch
- Cover cancellation semantics across C, LLVM, diagnostics, and surface tests
Co-authored-by: sensei-woo <sensei-woo@users.noreply.github.com>
* Fix AbortController abort edge cases
* Fence AbortController method extraction
---------
Co-authored-by: sensei-woo <sensei-woo@users.noreply.github.com>
- Stamp all publishable packages at v0.0.22.
- Publish release notes for persistent builds and external coverage types.
- Refresh the compiler surface manifest for the release.
- Classify Node 24 fetch APIs and options by static, dynamic-only, unsupported, and out-of-scope support.
- Project the inventory into the surface manifest and add runtime drift and conformance checks.
- Fence unprofiled Headers members with actionable SC2020 diagnostics.
- Pin the supported fetch surface to an explicit Node and Undici profile.
- Generate deterministic WebIDL, AbortSignal, and stream differential campaigns.
- Match Node stream pull scheduling while preserving typed source identity.
- Stamp all publishable packages at v0.0.21.
- Publish release notes for the contract-sidecar fixes.
- Refresh the compiler surface manifest for the release.
- Stamp all publishable packages at v0.0.20.
- Publish release notes for the contract-sidecar improvements.
- Refresh the compiler surface manifest for the release.
- Add static Array and Uint8Array copying, sorting, and join surfaces.
- Lower Uint8Array spread, destructuring, and iterator methods across C and LLVM.
- Pin Node 24 semantics with differential coverage and runtime size gating.
- Lower to the stable array sort helper over a shallow snapshot.
- Publish Array.prototype.toSorted in the static surface manifest.
- Cover stability, copy semantics, and evaluation order differentially.
- Stamp the runtime, compiler, and CLI packages at 0.0.17.
- Regenerate the surface manifest for the synchronized version.
- Add release notes for the Windows CLI build and run fixes.
- Lower Number.prototype.toFixed through the compiler IR and native backends.
- Match JavaScript rounding, range errors, and numeric edge cases in the runtime.
- Add differential coverage and update surface metadata and diagnostics.
- Synchronize package versions and regenerate the compiler surface manifest.
- Publish release notes for prompt output flushing and Linux host clang builds.
- Bump all published packages to 0.0.15 and refresh the surface manifest.
- Promote the outbound native FFI notes into the marked release block.
- Verify the workspace build plus plain and sanitized full test lanes.
- The CA-store surfaces (tlsca.get/root/set) demote the determinism attestation but no fence could deny them: three AMBIENT_SURFACE_FNS rows, one per Node spelling. Split rather than folded into a single "CA store" surface — an author who denies REPLACING the trust anchors is making a different decision from one who denies reading them, and rootCertificates is a value read with no call form to hang a table row on.
- The parity test's full-fence declaration set names the new node-builtin.tls. family; surface-manifest.json regenerated.
- Order-parity baselines for the seven fixtures the two lanes added (2556-2558, 2582-2585). Pure insertions: no recorded baseline moved.
- The crypto introspection statics (getFips and the cipher/hash/curve name lists) bake at the call site, and the crypto constant table joins http2's under a generalized per-module baked-constants lowering.
- The CA-store introspection surface lands in its own unit (scr_tls_ca.c) behind its own link gate, so a getCACertificates-only binary never pulls mbedTLS: getCACertificates, rootCertificates, setDefaultCACertificates.
- http2.createSecureServer grows the eager request handler and the runtime options record, riding the same server-options walk as tls.createServer; string-typed 'data' listeners decode.
- process once/off for 'unhandledRejection' plus the sibling 'rejectionHandled' registry, removal by closure identity per the warning-registry stance.
- Merge resolution unions this lane with main's fs ladders, createRequire erasure, and dyn secure-context work; the runtime's retired "DOM" nickname is spelled "dyn" throughout.
- Node serves the builtin for both spellings — a builtin wins over a same-named npm package for the bare specifier — so both key the same lowering tables
- The stale prefix-only caution predated the createRequire erasure; the hint's claim and the behavior now agree
- text, json, and buffer settle real promises over the readable machinery with Node's settle timing and rejection set; arrayBuffer and blob fence with their representation reasons
- createRequire over this file's URL is compile-time plumbing: builtin specs become namespace imports, relative JSON bakes as validated documents, npm packages ride the require-condition graph, unresolvable names throw Node's catchable MODULE_NOT_FOUND
- module.builtinModules bakes as the compat target's exact list
# Conflicts:
# packages/compiler/src/frontend/lowering/lower-modules.ts
# packages/compiler/src/frontend/lowering/lowerer.ts