Skip to main content

Getting Started with Wasm

Install the library:#

Latest Release: This version matches the main branch of this repository, is stable and will have changelogs.

npm install @iota/client-wasm// or using yarnyarn add @iota/client-wasm

Development Release: This version matches the dev branch of this repository, may see frequent breaking changes and has the latest code changes.

npm install @iota/client-wasm@dev// or using yarnyarn add @iota/client-wasm@dev

Build#

Alternatively, you can build the bindings if you have Rust installed. If not, refer to rustup.rs for the installation. Then install the necessary dependencies using:

npm install

and then build the bindings for node.js with

npm run build:nodejs

or for the web with

npm run build:web

NodeJS Setup#

const iota = require('@iota/client-wasm/node')
async function main() {  // Get the nodeinfo  let iota_client = await iota.Client.withNode("https://api.lb-0.h.chrysalis-devnet.iota.cafe/");  console.log("Nodeinfo: ", await iota_client.getInfo())}main()

Web Setup#

The library loads the WASM file with an HTTP GET request, so the .wasm file must be copied to the root of the dist folder.

Rollup#

  • Install rollup-plugin-copy:
npm install rollup-plugin-copy --save-dev// or using yarnyarn add rollup-plugin-copy --dev
  • Add the copy plugin usage to the plugins array under rollup.config.js:
// Include the copy pluginimport copy from 'rollup-plugin-copy'
// Add the copy plugin to the `plugins` array of your rollup config:copy({  targets: [{    src: 'node_modules/@iota/client-wasm/web/client_wasm_bg.wasm',    dest: 'public',    rename: 'client_wasm_bg.wasm'  }]})

Webpack#

  • Install copy-webpack-plugin:
npm install copy-webpack-plugin --save-dev// or using yarnyarn add copy-webpack-plugin --dev
// Include the copy pluginconst CopyWebPlugin= require('copy-webpack-plugin');
// Add the copy plugin to the `plugins` array of your webpack config:
new CopyWebPlugin({  patterns: [    {      from: 'node_modules/@iota/client-wasm/web/client_wasm_bg.wasm',      to: 'client_wasm_bg.wasm'    }  ]}),

Usage#

import * as iota from "@iota/client-wasm/web";
iota.init().then(() => {async function main() {  // Get the nodeinfo  let iota_client = await iota.Client.withNode("https://api.lb-0.h.chrysalis-devnet.iota.cafe/");  console.log("Nodeinfo: ", await iota_client.getInfo())}main()});
// or
(async () => {  await iota.init()  // Get the nodeinfo  let iota_client = await iota.Client.withNode("https://api.lb-0.h.chrysalis-devnet.iota.cafe/");  console.log("Nodeinfo: ", await iota_client.getInfo())})()
// Default path is "client_wasm_bg.wasm", but you can override it like thisawait iota.init("./static/client_wasm_bg.wasm");

iota.init().then(<callback>) or await iota.init() is required to load the wasm file (from the server if not available, because of that it will only be slow for the first time)