Skip to main content

Home

WebAssembly plugin for WILL SDK for ink

The plugin provides 2 distributions: digital-ink-wasm and digital-ink-wasm-st.

digital-ink-wasm​

This distribution targets SharedArrayBuffer-enabled environments. It also provides multi-threaded support for the pipeline build process. To enable Site Isolation mode, provide the following headers on the server:

response.setHeader("Cross-Origin-Embedder-Policy", "require-corp") response.setHeader("Cross-Origin-Opener-Policy", "same-origin")

More information can be found here: Cross-origin isolation overview

digital-ink-wasm-st​

This distribution should be used when SharedArrayBuffer is not available in the underlying environment. It is a single-thread distribution. The application still gains a performance boost, but for larger files, the main thread load should be handled manually.

Integration​

The WILL SDK for ink expects the plugin to be installed first. PluginsManager static property DEPENDENCIES_SRC defaults to '/node_modules'.

import {PluginsManager} from "digital-ink"// import in webpack envimport factory from "@digital-ink/wasm"// init application callbackasync init() { ... const singleThreadDistribution = (typeof SharedArrayBuffer == "undefined"); // mjs const wasm = await PluginsManager.installWASM(singleThreadDistribution) // webpack const wasm = PluginsManager.connectWASM(factory, singleThreadDistribution) ...}

wasm namespace (install result)​

  • Provides const string version.
  • Provides a function getExceptionMessage with argument exception message pointer.
  • Provides namespace workers when loaded distribution allows multi-threading; for single-thread distribution, this namespace is not available.

Webpack configuration​

  • WASM is a low-level assembly-like language with a compact binary format that runs with near-native performance and provides languages such as C/C++, C# and Rust with a compilation target so that they can run on the web.
  • It can be run in modern web browsers. WASM does not allow bundling.
  • It is also designed to run alongside JavaScript, allowing both to work together.
  • Webpack would treat @digital-ink/wasm as an external dependency. To provide visibility for it, it should be accessible from webpack env. Webpack configuration should be extended. This configuration targets the copy-webpack-plugin plugin.
/* package.json */"devDependencies": { ... "copy-webpack-plugin": "^11.x"}

To update the webpack configuration:

/* config-overrides.js */const webpack = require("webpack");const CopyPlugin = require("copy-webpack-plugin");module.exports = function override(config, env) { if (!config.eternals) { config.externals = []; } if (!config.plugins) { config.plugins = []; } config.externals = [...config.externals, "bindings"]; config.plugins.push( new CopyPlugin({ patterns: [ { from: "node_modules/@digital-ink/wasm/native", to: "static/js/native" } ] }) ); return config;}

License​

End user license agreement for Wacom Ink SDK

Home​