Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/sxzz/rolldown-plugin-wasm. Rolldown plugin for WASM.
Something went wrong. Try again.
TypeScript 91%
JavaScript 6%
Shell 2%
Rust <1%
README.md
rolldown-plugin-wasm #
Rolldown plugin for WASM.
This project is heavily referenced from @rollup/plugin-wasm and vite-plugin-wasm.
Install #
npm i rolldown-plugin-wasm
Usage #
// rolldown.config.ts
import { defineConfig } from 'rolldown'
import { wasm } from 'rolldown-plugin-wasm'
export default defineConfig({
plugins: [
wasm({
// ...options
}),
],
})
Importing WASM Modules #
import { add } from './add.wasm'
add(1, 2)
Asynchronous Init #
import init from './add.wasm?init'
const instance = await init(
imports, // optional
)
instance.exports.add(1, 2)
Synchronous Init #
import initSync from './add.wasm?init&sync'
const instance = initSync(
imports, // optional
)
instance.exports.add(1, 2)
wasm-bindgen Support #
Target bundler (default, recommended) #
import { add } from 'some-pkg'
add(1, 2)
Target web #
Node.js #
import { readFile } from 'node:fs/promises'
import init, { add } from 'some-pkg'
import wasmUrl from 'some-pkg/add_bg.wasm?url'
await init({
module_or_path: readFile(wasmUrl),
})
add(1, 2)
Browser #
import init, { add } from 'some-pkg/add.js'
import wasmUrl from 'some-pkg/add_bg.wasm?url'
await init({
module_or_path: wasmUrl,
})
add(1, 2)
Note
Other targets such as nodejs and no-modules are not supported.
TypeScript Support #
// tsconfig.json
{
"compilerOptions": {
"types": ["rolldown-plugin-wasm/types"],
},
}
Options #
/**
* - `"auto"` will determine the environment at runtime and invoke the correct methods accordingly
* - `"auto-inline"` always inlines the WASM and will decode it according to the environment
* - `"browser"` omits emitting code that requires node.js builtin modules
* - `"node"` omits emitting code that requires `fetch`, but requires Node.js 20.16.0 or higher
*/
export type TargetEnv = 'auto' | 'auto-inline' | 'browser' | 'node'
export interface Options {
/**
* The maximum file size for inline files. If a file exceeds this limit, it will be copied to the destination folder and loaded from a separate file at runtime.
* If `maxFileSize` is set to `0` all files will be copied.
* Files specified in `sync` to load synchronously are always inlined, regardless of size.
*
* @default 14 * 1024
*/
maxFileSize?: number
/**
* String used to rename the emitted Wasm files.
* @default '[hash][extname]'
*/
fileName?: string
/**
* Configures what code is emitted to instantiate the Wasm (both inline and separate)
*/
targetEnv?: TargetEnv
}
Sponsors #
License #
MIT License © 2026-PRESENT Kevin Deng
MIT License Copyright (c) 2019 RollupJS Plugin Contributors