Skip to content

Migrate threaded WASI loader to napi-rs 3.8 and emnapi v2 - #431

Draft
ishiko732 wants to merge 1 commit into
previewfrom
wasm32-wasip1-todo1
Draft

Migrate threaded WASI loader to napi-rs 3.8 and emnapi v2#431
ishiko732 wants to merge 1 commit into
previewfrom
wasm32-wasip1-todo1

Conversation

@ishiko732

Copy link
Copy Markdown
Member

Summary

  • upgrade the binding toolchain to napi-rs 3.12, @napi-rs/cli 3.8, wasm-runtime 1.2, and emnapi v2
  • remove the local napi-rs CLI patch and publish a single ESM Node loader requiring Node.js 24+
  • rebuild the threaded Node/browser dynamic loaders with initialization rollback, deterministic disposal, and worker cleanup
  • expose ./dynamic while preserving ./dynamic-wasi as a same-file compatibility alias
  • update build artifacts, tests, documentation, and the changeset

Why

The existing dynamic loaders were based on the older emnapi v1 runtime and no longer matched the lifecycle and plugin contracts generated by napi-rs CLI 3.8. Migrating them together avoids a runtime/loader version mismatch and removes the need to maintain separate CommonJS and ESM Node loaders.

Impact

  • @open-spaced-repetition/binding now requires Node.js 24 or newer.
  • Existing ./dynamic-wasi consumers continue to work.
  • This PR remains limited to native and threaded wasm32-wasip1-threads outputs; threadless WASI and Cloudflare support remain follow-up work.
  • The Preview Release workflow can build native Node and threaded WASI artifacts before publishing them with pnpm dlx pkg-pr-new@0.0.79 publish.

Validation

  • frozen-lockfile install with Node.js 26
  • native release build
  • wasm32-wasip1-threads release build
  • binding tests: 6 files, 57 tests passed
  • Biome, Cargo fmt, Clippy, and Taplo checks
  • packed binding imported through ESM and CommonJS on Node.js 24
  • git diff --check

@changeset-bot

changeset-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 75f5eb9

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 11 packages
Name Type
@open-spaced-repetition/binding Minor
@open-spaced-repetition/binding-android-arm64 Minor
@open-spaced-repetition/binding-darwin-arm64 Minor
@open-spaced-repetition/binding-darwin-x64 Minor
@open-spaced-repetition/binding-linux-arm64-gnu Minor
@open-spaced-repetition/binding-linux-arm64-musl Minor
@open-spaced-repetition/binding-linux-x64-gnu Minor
@open-spaced-repetition/binding-linux-x64-musl Minor
@open-spaced-repetition/binding-wasm32-wasi Minor
@open-spaced-repetition/binding-win32-arm64-msvc Minor
@open-spaced-repetition/binding-win32-x64-msvc Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.88%. Comparing base (02ecc1a) to head (75f5eb9).

Additional details and impacted files
@@           Coverage Diff            @@
##           preview     #431   +/-   ##
========================================
  Coverage    98.88%   98.88%           
========================================
  Files           76       76           
  Lines         2336     2336           
  Branches       573      573           
========================================
  Hits          2310     2310           
  Misses          24       24           
  Partials         2        2           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pkg-pr-new

pkg-pr-new Bot commented Jul 29, 2026

Copy link
Copy Markdown

Open in StackBlitz

@open-spaced-repetition/binding

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding@431

ts-fsrs

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs@431

@open-spaced-repetition/srs-kit

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/srs-kit@431

@open-spaced-repetition/binding-android-arm64

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-android-arm64@431

@open-spaced-repetition/binding-darwin-arm64

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-darwin-arm64@431

@open-spaced-repetition/binding-darwin-x64

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-darwin-x64@431

@open-spaced-repetition/binding-linux-arm64-gnu

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-linux-arm64-gnu@431

@open-spaced-repetition/binding-linux-arm64-musl

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-linux-arm64-musl@431

@open-spaced-repetition/binding-linux-x64-gnu

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-linux-x64-gnu@431

@open-spaced-repetition/binding-linux-x64-musl

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-linux-x64-musl@431

@open-spaced-repetition/binding-wasm32-wasi

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-wasm32-wasi@431

@open-spaced-repetition/binding-win32-arm64-msvc

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-win32-arm64-msvc@431

@open-spaced-repetition/binding-win32-x64-msvc

pnpm add https://pkg.pr.new/open-spaced-repetition/ts-fsrs/@open-spaced-repetition/binding-win32-x64-msvc@431

commit: 75f5eb9

@ishiko732
ishiko732 force-pushed the wasm32-wasip1-todo1 branch from f39b33a to 75f5eb9 Compare July 29, 2026 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant