Very cool! I've wondered for a while if a wasm-bindgen-like approach would be useful for people. So I'm curious to see other people's feedback here.
- Alon On Mon, Aug 18, 2025 at 12:58 PM Mo_Al_ <may642.2...@gmail.com> wrote: > Hello all, > > I always liked that Rust offered wasm-bindgen, along with js-sys and > web-sys, which provided bindings generated from webidl. And I wanted the > same thing for C++. > > Wasmbind itself consists of 2 libraries: > - jsbind, provides some javascript interfaces required by webbind, with > some sugar as well. > - webbind, which is generated from webidl via the @webref/idl npm package. > > This allows for a less stringly-typed api than for example directly using > emscripten's val api. > > I would appreciate your review and trial. > > This is the repository: > https://github.com/emlite/wasmbind > > A wasmbind emscripten example: > https://github.com/emlite/wasmbind-emscripten-example > > Note that wasmbind can also target wasm32-unknown-unknown and wasm32-wasi > using wasi-libc, wasi-sysroot or the wasi-sdk. > > The api looks like: > #include <jsbind/jsbind.hpp> > #include <webbind/webbind.hpp> > > using jsbind::Console; > using jsbind::Function; > using namespace webbind; > > int main() { > emlite::init(); > Console con; > auto document = window().document(); > auto bodies = document.getElementsByTagName("body"); > if (bodies.length() == 0) { > con.log("I Ain't got Nobody!"); > return -1; > } > auto body = bodies.item(0); > auto button = document.createElement("BUTTON") > .safe_cast<HTMLButtonElement>().unwrap(); > button.textContent("Click me"); > button.addEventListener( > "click", > Function::Fn<void(PointerEvent)>([=](auto e) { > con.log(e.clientX()); > }) > ); > body.appendChild(button); > auto style = button.style(); > style.setProperty("color", "red"); > style.setProperty("background-color", "#aaf"); > style.setProperty("border", "solid"); > } > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/emscripten-discuss/c63b60a0-34d6-4f17-ba2b-987c73e3521bn%40googlegroups.com > <https://groups.google.com/d/msgid/emscripten-discuss/c63b60a0-34d6-4f17-ba2b-987c73e3521bn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpQNiPC3ac4DK5w74X4gtp-8gSTLRcA-STnaPZByLXBxmA%40mail.gmail.com.