Code Monkey home page Code Monkey logo

wasm-bridge's Introduction

wasm-bridge

Goals

The goal of this crate is to "run wasmtime on the web", that means providing a unified API for desktop and web runtimes.

With wasm-bridge, you can write a single source code in Rust that you would normally write when using wasmtime, but it works on desktop as well as on the web.

How do I use this?

In general, you would use this crate the same way wou would use wasmtime, and just replace wasmtime with wasm_bridge.

Alternatively, refer to this handy table:

Use case ๐Ÿ“ Text tutorial โ–ถ๏ธ Video tutorial ๐Ÿงพ Full example ๐Ÿ“‘ Test cases
No bindgen Read here Coming soon See here Explore here
Component model Read here Coming soon Coming soon Explore here
Component model with WASI Coming soon Coming soon Coming soon Explore here

Versions

wasm-bridge wasmtime wit-bindgen cargo-component
0.5.x 20.0 0.24.0 0.11.0
0.4.x 19.0 0.24.0 0.10.1
0.3.x 15.0 0.15.0 0.5.0
0.2.x 11.0 0.8.0 -
0.1.x 10.0 - -

Alternatives

There are other options for loading and executing WASM modules on the desktop and on the web in RUST: wasmer can run on the web with the js feature flag, wasmi is an interpreter so it has no problem running on the web, and wasm_component_layer provides a unified API that can be "backed" by a number of "backends".

Crate Short description Component model Wasi support
wasm-bridge Re-exports wasmtime on sys, js-sys impl on web. Yes, but no resources. Partially yes.
wasmer Native impl in sys, js-sys impl on web. They have wai bindgen. Yes.
wasmi Lightweight WASM interpreter, run anywhere. Planned. Experimental wasmi_wasi crate.
wasm_runtime_layer Thin wrapper around wasmtime or wasmi, js-sys impl on web. wasm_component_layer, but no bindgen. Not to my knowledge.

License

The source code of wasm-bride is licensed under MIT, but there are portions that are copied from other projects, and may come with a different license.

Here is a full list of these exceptions:

wasm-bridge's People

Contributors

kajacx avatar ten3roberts avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

wasm-bridge's Issues

Add async Module & Instance initiating methods to avoid Chrome error

Chrome up to v114 disallows wasm sync compilation on main thread unless they are less than 4KB. This may lead to wasm-bridge adopted application crash at runtime on Chrome. I think the JS api should still keep these async methods so users could decide if they need them or not.

proc-macro derive produced unparsable tokens

The from_js_value procedural macro, used within bindings! does not handle parameterized types

Occurs when a compound type (e.g; record) contains a parameterized type.

The from_js_value derive macro generating FromJsValue does not properly qualify the type, in this example, it uses

Vec<u32>::method which is not valid Rust syntax, rather than <Vec<u32>>::method

To reproduce (wasm32-unknown-unknown):

wasm_bridge::component::bindgen!({ path: "./wit", world: "bindings" });
package host:bindings

interface core {
    record build {
        a: list<u32>,
    }

    foo: func(q: build) -> u64
}

world bindings {
    import core
}

I'd love to help and open a PR to resolve this, are there any other areas I could tackle while I am at it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.