For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/llms-full.txt, and this page is available as Markdown at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/updates/binding/index.md.
  • 简体中文
  • Updates

    Published package releases, changelogs, and npm downloads.

    0.6.0

    Breaking Changes

    • Remove @open-spaced-repetition/binding-win32-ia32-msvc and the i686-pc-windows-msvc build 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-wasi remains 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 uses 1, FSRS-4.5/5 use 0.5, and FSRS-6 uses weights[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.deltaT preserves fractional elapsed days, and FSRSBinding.nextStates accepts fractional days for FSRS-7 while retaining whole-day behavior for FSRS-6. BindingMemoryState(stability, difficulty, stabilityFast?) adds a stabilityFast getter; the optional constructor argument defaults to stability for compatibility. (#530) Thanks @ishiko732!
    • Add the threadless @open-spaced-repetition/binding-wasm32-wasip1 package, including its /workerd and /wasm exports. 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 returning false stops the operation. (#432, #433) Thanks @ishiko732!
    • Accept ReadableStream<Uint8Array> input for CSV conversion. (#447) Thanks @ishiko732!
    • Add convertCsvToFsrsItemsWithCardIds and card IDs in training/evaluation workflows, preserving card identity across converted review items. (#553) Thanks @ishiko732!
    • Add enableSchedPenalties for FSRS-7 training and evaluation. (#558) Thanks @ishiko732!

    Fixes and Dependencies

    • Validate optimizer inputs and bound review-history expansion. FSRSBindingItem rejects review ratings outside 1–4, including Manual, and supplied cardIds must 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!

    0.4.0

    Minor Changes

    • #379 7479e74 Thanks @ishiko732! - chore(binding): remove the Burn dependency. Upgrade fsrs to the published 6.4.0 crate (no longer requires the custom burn fork), drop the [patch.crates-io.burn]/[patch.crates-io.burn-train] workspace patches, and delete the burn-v0.17.1-sys-metrics.wasm32 patch.

    0.3.0

    Minor Changes

    • #325 948e3cd Thanks @ishiko732! - feat(binding): add computeOptimalSteps to analyze revlog and recommend optimal learning/relearning steps

      Compute optimal learning/relearning steps from CSV revlog data. Analyzes review history by rating groups, fits forgetting curves via golden-section search, and recommends step durations based on desired retention and decay parameters.

    Patch Changes

    • #327 e089f2f Thanks @ishiko732! - fix: Build the binding packages with Rust 1.94.1 and invalidate Turborepo caches when CI configuration changes.

    • #329 5cd8949 Thanks @ishiko732! - fix: include README, localized package docs, and license files in the published binding tarball

    0.2.1

    Patch Changes

    0.2.0

    Minor Changes

    • #272 23ec7a9 Thanks @ishiko732! - refactor(binding): refactor progress callback to support training interruption

      BREAKING CHANGES:

    • #309 7c0d97c Thanks @ishiko732! - feat(binding): add initOptimizer dynamic loader for custom wasm/worker resources

      • Export ./dynamic-wasi entry from binding with initOptimizer(options) for Node.js and browser
      • Export ./wasi-worker and ./wasm entries from binding-wasm32-wasi for resolving worker and wasm paths
      • Allows users to provide wasm binary (Buffer, URL, Response) and worker (factory, instance, path) externally

    Patch Changes

    0.1.1

    Patch Changes

    • #241 f2b700d Thanks @ishiko732! - Fix missing build artifacts in the binding package and ensure .js, .cjs, .mjs, and .d.ts files are properly included in the distributed package.

    0.1.0

    Minor Changes

    • #237 c1d61fe Thanks @ishiko732! - # @open-spaced-repetition/binding v0.1.0

      🎉 Release the first version of the high-performance FSRS optimizer based on fsrs-rs and napi-rs.

      Features

      • High-Performance Parameter Optimization: Native Rust implementation for computationally intensive FSRS parameter optimization
      • Multi-Platform Support: Pre-built binaries for 11 platforms:
        • Windows: x64, ia32, arm64 (MSVC)
        • macOS: x64, arm64 (Darwin)
        • Linux: x64/arm64 (GNU/MUSL)
        • Android: arm64
        • WebAssembly: wasm32-wasip1-threads
      • Core APIs:
        • computeParameters(): Optimize FSRS parameters from review history
        • convertCsvToFsrsItems(): Convert CSV review logs to FSRS data format
        • FSRSBinding: FSRS scheduler instance for memory state calculations

      Requirements

      • Node.js >= 20.0.0
      • For WebAssembly: Additional package manager configuration required

      Limitations

      • ⚠️ Beta Notice: API may change in future releases
      • Cannot run in edge-runtime environments (edge-runtime does not support WASI)

      Documentation

      See README.md for installation instructions and usage examples.