@open-spaced-repetition/binding 0.6.0
Published: 2026-10-28 14:10:23 UTC
Breaking Changes
- Remove
@open-spaced-repetition/binding-win32-ia32-msvcand thei686-pc-windows-msvcbuild target. Native 32-bit Windows builds are no longer supported; Windows x64 and ARM64 packages remain available. (#429) Thanks @ishiko732! - Require Node.js 24 or later and use an ESM default loader. Threaded WASI initialization is exposed through
./dynamic;./dynamic-wasiremains an alias. (#406, #431) Thanks @ishiko732! - Resolve timezones in Rust for CSV conversion instead of accepting a JavaScript offset callback. Use
convertCsvToFsrsItems(data, nextDayStartsAt, timezoneOrOffset, modelVersion?), with an IANA timezone name or a fixed UTC offset in minutes; IANA offsets are resolved per review timestamp, including daylight saving transitions. (#384, #550) Thanks @ishiko732! - Default optimizer/model workflows to FSRS-7, with fast stability and fractional study-day intervals. Set
modelVersion: 'FSRS-6'explicitly for FSRS-6 training/evaluation and pass'FSRS-6'to CSV conversion to retain whole study-day intervals. Use the same model version throughout conversion, training, and evaluation.new FSRSBinding()(or an empty parameter array) also defaults to FSRS-7; pass an explicit FSRS-6 parameter vector to retain FSRS-6 in that constructor. (#530) Thanks @ishiko732! - Require an explicit positive numeric decay for
computeOptimalSteps: FSRS-4 uses1, FSRS-4.5/5 use0.5, and FSRS-6 usesweights[20]. This single-decay fitting API does not support the FSRS-7 mixture curve. (#538) Thanks @ishiko732! - Memory-state JSON serialization now includes
stability_fast. Update strict stored-data schemas and preserve this field for FSRS-7; do not treat an FSRS-6 memory state as a complete FSRS-7 state. (#530) Thanks @ishiko732!
New Features
FSRSBindingReview.deltaTpreserves fractional elapsed days, andFSRSBinding.nextStatesaccepts fractional days for FSRS-7 while retaining whole-day behavior for FSRS-6.BindingMemoryState(stability, difficulty, stabilityFast?)adds astabilityFastgetter; the optional constructor argument defaults tostabilityfor compatibility. (#530) Thanks @ishiko732!- Add the threadless
@open-spaced-repetition/binding-wasm32-wasip1package, including its/workerdand/wasmexports. The trainer can run across Node.js, browser Workers, and Cloudflare Workers/workerd using the appropriate native or WebAssembly entry. The threadless WASIp1 build requires no COOP/COEP headers or shared memory, so static sites hosted on GitHub Pages can run training locally in a browser Worker without a training backend. See the optimizer guide and live playground. Training and time-series evaluation retain Promise-based APIs but execute synchronously on the current worker; use a dedicated Worker in browsers. Progress callbacks are supported, and returningfalsestops the operation. (#432, #433) Thanks @ishiko732! - Accept
ReadableStream<Uint8Array>input for CSV conversion. (#447) Thanks @ishiko732! - Add
convertCsvToFsrsItemsWithCardIdsand card IDs in training/evaluation workflows, preserving card identity across converted review items. (#553) Thanks @ishiko732! - Add
enableSchedPenaltiesfor FSRS-7 training and evaluation. (#558) Thanks @ishiko732!
Fixes and Dependencies
- Validate optimizer inputs and bound review-history expansion.
FSRSBindingItemrejects review ratings outside 1–4, including Manual, and suppliedcardIdsmust match the item count. (#550, #553) Thanks @ishiko732! - Fix dynamic loader cleanup after asynchronous work and update native/WASI dependencies and binding validation. (#536, #594) Thanks @ishiko732!
- Incorporate upstream training/evaluation fixes and update fsrs-rs to revision
d7f337b. (#571, #600) Thanks @ishiko732!