plasmate-wasm

March 29, 2026 ยท View on GitHub

Compile HTML to Plasmate SOM in any JavaScript runtime via WebAssembly. No native binary, no browser engine, no network requests. Just HTML in, structured JSON out.

Install

npm install plasmate-wasm

Usage

Node.js

const { compile, compile_pretty, version } = require('plasmate-wasm');

const html = '<html><body><nav><a href="/about">About</a></nav><main><h1>Hello</h1><p>World</p></main></body></html>';

const somJson = compile(html, 'https://example.com');
const som = JSON.parse(somJson);

console.log(som.title);           // "Hello"
console.log(som.regions.length);   // 2 (navigation + main)
console.log(som.meta.element_count);  // element count

Browser (ES module)

<script type="module">
  import init, { compile } from './plasmate_wasm.js';
  await init();
  
  const som = JSON.parse(compile(htmlString, 'https://example.com'));
</script>

API

compile(html: string, url: string): string

Compile HTML to SOM JSON (compact). The url parameter is used for stable ID generation only; no network request is made.

compile_pretty(html: string, url: string): string

Same as compile but returns pretty-printed JSON.

version(): string

Returns the compiler version.

Why WASM?

The full Plasmate binary includes a browser engine for JavaScript execution and page rendering. That is necessary for fetching live pages but is heavy (large binary, platform-specific).

The SOM compiler itself is pure computation: parse HTML, identify regions, classify elements, generate IDs, serialize JSON. It has no system dependencies and compiles cleanly to WebAssembly.

This package gives you the compiler without the browser. Use it when:

  • You already have the HTML (CMS build pipelines, static site generators)
  • You need to run in environments where native binaries are not available (serverless, edge functions, browsers)
  • You want zero-dependency SOM compilation in any JavaScript runtime

For fetching live pages with JavaScript execution, use the full plasmate CLI or the daemon mode.

Size

The WASM binary is approximately 864KB (before gzip). After gzip compression (typical for CDN delivery), this drops to approximately 300KB.

License

Apache 2.0