{"id":20699,"library":"wast-loader","title":"wast-loader","description":"Webpack loader for WebAssembly text format (.wast/.wat files). Version 1.14.1 compiles WAT to binary WebAssembly modules during webpack bundling. The loader integrates with webpack's webassembly/experimental module type (webpack 4) and is part of the webassemblyjs toolchain. It has limited ongoing development; the webassemblyjs monorepo appears in maintenance mode. Key differentiator: enables writing WebAssembly in text format directly in webpack projects without separate compilation steps.","status":"maintenance","version":"1.14.1","language":"javascript","source_language":"en","source_url":"https://github.com/xtuc/webassemblyjs","tags":["javascript","webassembly","WebAssembly","wat","wast"],"install":[{"cmd":"npm install wast-loader","lang":"bash","label":"npm"},{"cmd":"yarn add wast-loader","lang":"bash","label":"yarn"},{"cmd":"pnpm add wast-loader","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Parsing and manipulating WAT AST","package":"@webassemblyjs/ast","optional":false},{"reason":"Parse .wast files into AST","package":"@webassemblyjs/wast-parser","optional":false},{"reason":"Print AST back to text format","package":"@webassemblyjs/wast-printer","optional":false},{"reason":"Convert WAT AST to wasm bytecode","package":"@webassemblyjs/helper-wasm-bytecode","optional":false}],"imports":[{"note":"Webpack 4 requires type: 'webassembly/experimental' for webassembly modules. Omitting it will cause errors.","wrong":"module.exports = { module: { rules: [{ test: /\\.wast$/, loader: 'wast-loader' }] } };","symbol":"wast-loader (webpack rule)","correct":"module.exports = { module: { rules: [{ test: /\\.wast$/, loader: 'wast-loader', type: 'webassembly/experimental' }] } };"},{"note":"This is a webpack loader, so the import style depends on webpack config. The loader output is a wasm module object.","wrong":"import wasm from './module.wast';","symbol":"CommonJS require","correct":"const wasm = require('./module.wast');"},{"note":"If using webpack with type: 'module', ESM imports are preferred. The default export is the wasm module.","wrong":"const wasm = require('./module.wast');","symbol":"ESM import","correct":"import wasm from './module.wast';"},{"note":"For type-only imports to avoid bundling issues. Requires a type declaration for .wast files.","wrong":"import WasmModule from './module.wast';","symbol":"TypeScript type import","correct":"import type WasmModule from './module.wast';"}],"quickstart":{"code":"// webpack.config.js\nconst path = require('path');\n\nmodule.exports = {\n  entry: './src/index.js',\n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: 'bundle.js',\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.wast$/,\n        loader: 'wast-loader',\n        type: 'webassembly/experimental',\n      },\n    ],\n  },\n};\n\n// src/add.wat\n(module\n  (func (export \"add\") (param $a i32) (param $b i32) (result i32)\n    local.get $a\n    local.get $b\n    i32.add\n  )\n)\n\n// src/index.js\nimport wasmModule from './add.wast';\n\nwasmModule.instance.then(instance => {\n  const { add } = instance.exports;\n  console.log(add(2, 3)); // 5\n});\n","lang":"javascript","description":"Shows a minimal webpack 4 config using wast-loader with .wast files, a simple add.wat module, and usage in entry point."},"warnings":[{"fix":"Upgrade to webpack 5 and use experiments.asyncWebAssembly, or use a newer loader like wasm-loader.","message":"Webpack 5 no longer supports webassembly/experimental; migrate to experiments: { asyncWebAssembly: true } and use asset/resource or async modules.","severity":"gotcha","affected_versions":">=1.14.1"},{"fix":"Consider using native webpack 5 wasm support or alternative loaders like wasm-pack.","message":"The package is part of the webassemblyjs monorepo, which is in maintenance mode. No new features are expected.","severity":"deprecated","affected_versions":"*"},{"fix":"Add 'type': 'webassembly/experimental' to the rule.","message":"Default webpack 4 config requires type: 'webassembly/experimental' or the loader may silently fail without warning.","severity":"gotcha","affected_versions":"*"},{"fix":"Use wasmModule.instance.then(instance => { ... }).","message":"Output is a Module object, not a buffer. Access .instance for the WebAssembly.Instance.","severity":"gotcha","affected_versions":"*"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Ensure rule has loader: 'wast-loader' and type: 'webassembly/experimental' in webpack 4.","cause":"Missing type: 'webassembly/experimental' in webpack rule or loader not configured; webpack treats .wast as a regular file.","error":"Module parse failed: Unexpected token (1:0) You may need an appropriate loader to handle this file type."},{"fix":"Run: npm install @webassemblyjs/ast @webassemblyjs/wast-parser @webassemblyjs/wast-printer @webassemblyjs/helper-wasm-bytecode","cause":"Missing peer dependency; wast-loader requires @webassemblyjs packages that are not automatically installed.","error":"Error: Cannot find module '@webassemblyjs/ast'"},{"fix":"Use wasmModule.then(module => { const instance = module.instance; ... }) or await wasmModule.","cause":"The loader returns a Module object that may not have an instance if used incorrectly (e.g., accessing .instance before the promise resolves).","error":"TypeError: wasmModule.instance is undefined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}