wasm-bindgen icon indicating copy to clipboard operation
wasm-bindgen copied to clipboard

PoC for inline target

Open torfmaster opened this issue 1 year ago • 5 comments

This PR adds an "isomorphic" or "inline" target next to the nodejs target as a proof of concept. It targets simple use cases as using small snippets of Rust Code in larger typescript codebases. In detail it allows (with a proposal that I will create for wasm-pack) creating npm packages that ship wasm modules inline.

Background

Using Rust code via wasm in existing nodejs typescript applications is challenging. It usually involves changing the bundler configuration and currently involves handling wasm artifacts. The motivating example for a typescript lambda built via nx and bundled via esbuild (which is the de-facto standard for AWS Lambda in CDK). After a lot of experimentation (involving using different bundlers and writing plugins) I found no obvious way for my rather easy use case (a few lines of Rust Code embedded via wasm). Hence I

Relation to other issues

This touches at least https://github.com/rustwasm/wasm-bindgen/issues/2265, https://github.com/rustwasm/wasm-pack/issues/1334, https://github.com/rustwasm/wasm-pack/issues/831.

Testing

I currently only did some rough manual testing. Once I know that this PR is somehow useful I can invest more.

torfmaster avatar Aug 12 '24 14:08 torfmaster

I'm sorry this isn't a very substantial contribution, but the name "isomorphic" is rather confusing to me. If I understand, the idea is to make the code identical for browsers and other JS engines (which I'd really love to see), whereas "isomorphic" refers in general to things that are equivalent but not necessarily identical? Would it make more sense to call the code something more like "cross-compatible"?

lgarron avatar Aug 30 '24 22:08 lgarron

"cross-compatible" is not very specific. I would prefer not to invent a new industry term. This behavior is generally known within the developer community as isomorphic builds. Consider it a term of art.

cryptoquick avatar Aug 30 '24 23:08 cryptoquick

Hmm, it seems you're right: https://en.wikipedia.org/wiki/Isomorphic_JavaScript

That also states:

The naming of the term 'Isomorphic JavaScript' has been a matter of controversy.[1] The term 'isomorphic' was first coined by Charlie Robbins from Nodejitsu, in one of the company's blog posts.[2] Spike Brehm, a software engineer from Airbnb, wrote another blog post using the same term.[3] However, others have proposed to use the term Universal JavaScript instead.[1][4][5]

I certainly think "universal" is much less of a misnomer, but thanks for the context!

lgarron avatar Aug 31 '24 06:08 lgarron

I changed the target name to "inline"

  • because it is less controversial
  • it is more precise. I don't claim this code will work with web browsers at all

It would be great to have an "universal" target (or if you want to call it like this: isomorphic). But the required changes would be much bigger than this tiny pull request.

torfmaster avatar Aug 31 '24 19:08 torfmaster

Out of curiosity I also checked browser compatibility: after a tiny fix basic functionality (meaning you can go the happy path and npm i a wasm project in your react app) seems to be there in browsers as well. A PoC is here: https://github.com/torfmaster/inline-wasm-react.

torfmaster avatar Sep 04 '24 20:09 torfmaster