wit-bindgen VS component-model

Compare wit-bindgen vs component-model and see what are their differences.

wit-bindgen

A language binding generator for WebAssembly interface types (by bytecodealliance)

component-model

Repository for design and specification of the Component Model (by WebAssembly)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
wit-bindgen component-model
27 33
877 827
4.6% 6.5%
9.4 8.2
4 days ago 6 days ago
Rust Python
Apache License 2.0 GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

wit-bindgen

Posts with mentions or reviews of wit-bindgen. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-11-15.
  • Wit-Bindgen
    1 project | news.ycombinator.com | 25 Jan 2024
  • WASM by Example
    16 projects | news.ycombinator.com | 15 Nov 2023
    The component model is already shipping in Wasmtime, and will be stable for use in Node.js and in browsers via jco (https://github.com/bytecodealliance/jco) soon. WASI Preview 2 will be done in December or January, giving component model users a stable set of interfaces to use for scheduling, streams, and higher level functionality like stdio, filesystem, sockets, and http on an opt-in basis. You should look at wit-bindgen (https://github.com/bytecodealliance/wit-bindgen) to see some of the languages currently supported, and more that will be mature enough to use very soon (https://github.com/bytecodealliance/componentize-py)

    Right now jco will automatically generate the JS glue code which implements a Component Model runtime on top of the JS engine's existing WebAssembly implementation. So, yes, Components are a composition of Wasm Modules and JS code is handling passing values from one module/instance to another. You still get the performance benefits of running computation in Wasm.

    One day further down the standardization road, we would like to see Web engines ship a native implementation of the Component Model, which might be able to make certain optimizations that the JS implementation cannot. Until then you can consider jco a polyfill for a native implementation, and it still gives you the power to compose isolated programs written in many languages and run them in many different contexts, including the Web.

    (Disclosure: I am co-chair of WASI, Wasmtime maintainer, implemented many parts of WASI/CM)

  • Spin 2.0 – open-source tool for building and running WASM apps
    13 projects | news.ycombinator.com | 4 Nov 2023
    Thank you!

    To your point, the primary consideration for choosing the languages is their support for WebAssembly, and WASI in particular.

    Due to Spin's heavy use of WASI and the component model, languages that have first party support in the WIT bindings generator (https://github.com/bytecodealliance/wit-bindgen) are the easiest to implement, followed by languages that can be built on top of the support for those with first party support.

    For example, the JavaScript support is built by embedding QuickJS (in particular, Shopify's Javy project — https://github.com/fermyon/spin-js-sdk), which then uses the Rust SDK.

  • Rust + WASM + Typescript [+ React]
    7 projects | /r/rust | 18 Jul 2023
    There are many options, but what worked best for me is compiling with cargo-wasi and loading the resulting Wasm file with browser_wasi_shim. Using wasm32-wasi instead of wasm32-unknown-unknown requires a bit more work (the communication with JS has to be set up manually), but gives the flexibility of having just a Wasm file that can be dropped in and loaded dynamically. (There's wit-bindgen for generating wrapping code according to an interface definition but I didn't have much success with it.)
  • Introducing - Wasmer Runtime 4.0
    3 projects | /r/rust | 22 Jun 2023
    I've been playing with creating a go version of the abi for use with wit-bindgen because the current one uses cgo https://github.com/bytecodealliance/wit-bindgen
  • What in Rust is equivalent to C++ DLLs (shared libraries), or what do I need to do to support extensions in my app?
    7 projects | /r/rust | 21 May 2023
    wit-bindgen - Language Binding Generator for WASM Interface Type
  • Quick tip: Numeromancy, WebAssembly and SingleStoreDB Cloud
    2 projects | dev.to | 24 Feb 2023
    wit-bindgen-rust = { git = "https://github.com/bytecodealliance/wit-bindgen.git", rev = "60e3c5b41e616fee239304d92128e117dd9be0a7" }
  • Using WASM for a plugin system in Rust? (generate code at runtime and then hot reloading it as a library)
    6 projects | /r/rust | 22 Feb 2023
    Yep, you're right. For this, there are a few options. The ones most relevant to you are fp-bindgen, which targets Wasmer, and wit-bindgen, which targets wasmtime.
  • Introducing Ambient 0.1: a runtime for building high-performance multiplayer games and 3D applications, powered by Rust, WebAssembly and WebGPU
    8 projects | /r/rust | 22 Feb 2023
    Are you evaluating if WebAssembly Component Model, its WIT format and related tooling like wit-bindgen could be a good fit for your multiple languages support?
  • Using SingleStoreDB, WebAssembly and GraphQL
    2 projects | dev.to | 15 Feb 2023
    [package] name = "sentiment" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] wit-bindgen-rust = { git = "https://github.com/bytecodealliance/wit-bindgen.git", rev = "60e3c5b41e616fee239304d92128e117dd9be0a7" } vader_sentiment = { git = "https://github.com/ckw017/vader-sentiment-rust" } lazy_static = "1.4.0" [lib] crate-type = ["cdylib"]

component-model

Posts with mentions or reviews of component-model. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-13.
  • Tree-shaking, the horticulturally misguided algorithm
    6 projects | news.ycombinator.com | 13 Apr 2024
    I don't think that's a very good goal. Jettisoning the DOM means jettisoning accessibility and being able to leverage everything that the browser gives you out-of-the-box. You have to render to a canvas and build everything from scratch. I think Wasm is great for supplementing a JS app, not replacing it (e.g. using a Wasm module to do some calculations in a Worker). I like to use the right tool for the job, and trying to use something other than JS to build a web app just seems a little janky to me.

    At one point, there was a Host Bindings proposal that would enable you to do DOM manipulation (it looks like it was archived and moved to the Component Model spec [1]). That would probably be the ideal way to avoid as much JS as possible. However, browser vendors have been heavily optimizing their JS runtimes, and in some cases, Wasm may actually be slower than JS.

    I've been following Wasm's progress for several years, which has been slow, but steady. Ironically, I think the web is actually the worst place to use it. There's so much cool non-web stuff being done with it and I'm more interested to see where that goes.

    [1] https://github.com/WebAssembly/component-model?tab=readme-ov...

  • 3D and 2D: Testing out my cross-platform graphics engine
    17 projects | news.ycombinator.com | 2 Apr 2024
    Well the great thing about WebAssembly is that you can port QT or anything else to be at a layer below -- thanks to WebAssembly Interface Types[0] and the Component Model specification that works underneath that.

    To over-simplify, the Component Model manages language interop, and WIT constrains the boundaries with interfaces.

    IMO the problem here is defining a 90% solution for most window, tab, button, etc management, then building embeddings in QT, Flutter/Skia, and other lower level engines. Getting a good cross-platform way of doing data passing, triggering re-renders, serializing window state is probably the meat of the interesting work.

    On top of that, you really need great UX. This is normally where projects fall short -- why should I use this solution instead of something like Tauri[2] which is excellent or Electron?

    [0]: https://github.com/WebAssembly/component-model/blob/main/des...

    [1]: https://github.com/WebAssembly/component-model/blob/main/des...

    [2]: https://tauri.app/

  • Missing the Point of WebAssembly
    2 projects | news.ycombinator.com | 9 Jan 2024
    While I don't necessarily agree with the unnecessary, unsupported casual, & cheap contempt culture here ("unshackle the web from the mess that is JavaScript", "places that don't really need these problems to be solved")...

    WebAssembly component-model is being developed to allow referring to and passing complex objects between different modules and the outside world, by establishing WebAssembly Interface Types (WIT). It's basically a ABI layer for wasm. This is a pre-requisite for host-object bridging, bringing in things like DOM elements.

    Long running effort, but it's hard work and there's just not that many hands available for this deep work. Some assorted links with more: https://github.com/WebAssembly/component-model https://www.fermyon.com/blog/webassembly-component-model https://thenewstack.io/can-webassembly-get-its-act-together-...

    It's just hard work, it's happening. And I think the advantages Andy talks to here illuminate very real reasons why this tech can be useful broadly. The ability to have plugins to a system that can be safely sandboxed is a huge win. That it's in any language allows much wider ecosystem of interests to participate, versus everyone interested in extending your work also having to be a java or c++ or rust developer.

  • Steel – An embedded scheme interpreter in Rust
    13 projects | news.ycombinator.com | 3 Dec 2023
    A. Sure, but it isn't sufficiently beneficial for the cost.

    B. WebAssembly is immature for developing a plugin system because of the lack of a sufficient ABI: https://github.com/WebAssembly/component-model

    C. There aren't any other languages that meet the criteria. Lua was a no-go from the start. The maintainers did not like the language, and it necessitated adding more C code to Helix which could complicate building even further. https://github.com/helix-editor/helix/discussions/3806#discu...

  • Bring garbage collected programming languages efficiently to WebAssembly
    16 projects | news.ycombinator.com | 3 Nov 2023
    AFAIK GC is irrelevant for "direct DOM access", you would rather want to hop into the following rabbit hole:

    - reference types: https://github.com/WebAssembly/reference-types/blob/master/p...

    - interface types (inactive): https://github.com/WebAssembly/interface-types/blob/main/pro...

    - component model: https://github.com/WebAssembly/component-model

    If this looks like a mess, that's because it is. Compared to that, the current solution to go through a Javascript shim doesn't look too bad IMHO.

  • Rust Is Surging Ahead in WebAssembly (For Now)
    2 projects | news.ycombinator.com | 19 Oct 2023
    The wasm idl (called WIT) is actively being worked on here: https://github.com/WebAssembly/component-model/blob/main/des...

    Being able to access DOM is definitely an objective. It's just taking a lot longer than folks guessed to build a modular wasm ABI.

  • Reaching the Unix Philosophy's Logical Extreme with WebAssembly
    6 projects | news.ycombinator.com | 28 Aug 2023
    The WASM Component Model

    https://github.com/WebAssembly/component-model

  • WASI: WebAssembly System Interface
    6 projects | news.ycombinator.com | 5 Aug 2023
  • Introducing - Wasmer Runtime 4.0
    3 projects | /r/rust | 22 Jun 2023
    Take a look at the python abi to see what the structure looks like for calling into components https://github.com/WebAssembly/component-model/tree/main/design/mvp/canonical-abi
  • How WebAssembly Is Eating the Database
    1 project | news.ycombinator.com | 23 May 2023

What are some alternatives?

When comparing wit-bindgen and component-model you can also consider the following projects:

lunatic - Lunatic is an Erlang-inspired runtime for WebAssembly

bartholomew - The Micro-CMS for WebAssembly and Spin

spin - Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.

kwasm - Proof of concept React-ish UI library, powered by WebAssembly

wasmer - 🚀 The leading Wasm Runtime supporting WASIX, WASI and Emscripten

webassembly-tour - ⚙️ Take you through a tour of WebAssembly (WASM targets on WASI) with wasmCloud, Krustlet, WAGI, etc. 🌟 Give it a star if you like it.

spec - WebAssembly specification, reference interpreter, and test suite.

wasi-experimental-http - Experimental outbound HTTP support for WebAssembly and WASI

proposals - Tracking WebAssembly proposals

extism - The framework for building with WebAssembly (wasm). Easily load wasm modules, move data, call functions, and build extensible apps.

wasi-sockets - WASI API proposal for managing sockets