ComponentizeJS
ComponentizeJS copied to clipboard
Compile components without a JS runtime
Summary
For certain scenarios, it would be great if we could create WebAssembly Components from JS/ESM with this library, without requiring a JS runtime.
Background
If a backend service written in Python or Ruby would like to take an input string of Javascript, precompile a wasm component, and then run it using a Wasmtime host for Python or Ruby, needing a full JS runtime to do the compilation step will complicate things in that backend host.
Proposal
With the current trend that a lot of JS tooling is also available in Rust (Biome, Oxc, Rolldown, etc), would it be possible to see this project as a two-layer library?
The lower layer is implemented in Rust (maybe using existing ecosystem tools where available) to bundle and compile the JS code into a WebAssembly Component, and the higher layer would be bindings to the lower layer.
Those higher-layer bindings might be JS, which would give the end result of this project (lower layer + higher level), but those bindings might also be written in Python or Ruby, to pair with e.g. Wasmtime-Py or Wasmtime-Rb.
Let me know if I should elaborate!
Sorry for not replying to this earlier!
I do agree that this would make sense, yes. Unfortunately it's a pretty tall order, for two reasons:
- much of the logic is written in JS, which would have to be ported
- we still need some native application that can invoke the tools involved—in particular wizer
All of this is in principle solvable, but hard to make a priority for the time being.
First, thanks for responding!
I totally understand this isn't top priority right now.
Regarding 1; wouldn't it mostly be just rewriting src/componentize.js in Ruby/Python? Or are there large JS modules being imported that would also need rewriting?
Regarding 2; yes, totally makes sense! But for a Python or Ruby app, it would still remove the dependency on a JS toolchain to deploy/run the app, which would be a big win!