wit-bindgen VS proposals

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

wit-bindgen

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

proposals

Tracking WebAssembly proposals (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 proposals
27 43
870 939
3.8% 1.1%
9.4 6.1
5 days ago 7 days ago
Rust
Apache License 2.0 -
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.
  • 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.
    6 projects | /r/rust | 22 Feb 2023
    Yes, wasm_bindgen is js only. At least for now, in future I would also expect it to migrate to component model. There is also cargo-component which is a way to create modules compatible with component model. You define your module interface in WIT and your dependencies on other wasm modules in the similar way you would define crate dependencies. Alternately there is wit-bindgen that is a codegen tool for multiple languages that also accepts WIT as input.
  • 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?
    8 projects | /r/rust | 22 Feb 2023
    Our plan is to stick with both a Rust host and guest to begin with, and start developing other offerings as required. All of our bindings are implemented on top of wit-bindgen, which acts as our data transfer layer - as long as your guest language is supported by wit-bindgen, you'll be able to use the runtime in some form. (Our bindings make it nicer to use, though 😆)

proposals

Posts with mentions or reviews of proposals. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-18.
  • WASM Instructions
    13 projects | news.ycombinator.com | 18 Feb 2024
    Block only. There’s a tail call proposal[1] that’s in phase 4 (nearly standardized).

    [1]: https://github.com/WebAssembly/proposals

  • Extism Makes WebAssembly Easy
    13 projects | news.ycombinator.com | 4 Oct 2023
    While it'd be a nice addition, I wouldn't expect it any time soon.

    It's currently still a stage 1 proposal, while we've been waiting for years for other proposals to be merged. The last time a proposal was actually finished was over 2 years ago.

    https://github.com/WebAssembly/proposals

    https://github.com/WebAssembly/proposals/blob/main/finished-...

  • Show HN: Unity like game editor running in pure WASM
    9 projects | news.ycombinator.com | 26 Sep 2023
    Do you know anything about any WASM developments that will enable pure WASM interaction with browser's Web-APIs at no or at a low cost without the JS layer? I'm looking at https://github.com/WebAssembly/proposals and it's very confusing. There are type imports, almost complete GC proposal(which apparently only for GCd languages, but not for anything browser<->wasm), the component model(which looks and sounds as something not for the browser use case), JS String Builtins (which will provide faster JS strings, but not DOM) and ECMAScript module integration (which will turn WASM modules into ES modules, but Web-APIs aren't ES modules so no luck). Sometimes I read contributor interactions and it looks as if providing such functionality isn't their priority or even in their plans, and WASI + component model for cloud and similar use cases are more important.
  • Haskell WebAssembly in the Browser
    3 projects | news.ycombinator.com | 21 Sep 2023
  • WASI Support in Go
    7 projects | news.ycombinator.com | 13 Sep 2023
    Threads are Phase 3

    https://github.com/WebAssembly/proposals

    You can also check out:

    https://webassembly.org/roadmap/

    And for Go, the proposal project on Github has many interesting conversations from the devs.

    And as a reminder to anyone interested in using Go WASM, it’s experimental and does not come with the same compatibility promise as Go itself:

    https://github.com/golang/go/wiki/WebAssembly

  • Learn WebAssembly by writing small programs
    7 projects | news.ycombinator.com | 5 Sep 2023
    GC proposal is from 2018: https://github.com/WebAssembly/proposals/issues/16 and there’s code: https://github.com/WebAssembly/gc/blob/master/proposals/gc/O...

    Seems like an awefully long time for progress to be made, given all the possibilities it would unlock.

  • Directly compiling Scheme to WebAssembly: lambdas, recursion, iteration
    5 projects | news.ycombinator.com | 31 May 2023
    The proposal was recently bumped to stage 4 (the penultimate stage) with at least a couple of runtimes working on implementing (besides v8, which has supported it for quite awhile now)

    https://github.com/WebAssembly/proposals

  • How do Rust WebAssembly apps free unused memory?
    5 projects | /r/rust | 26 Feb 2023
    But basically it boils down to the memory control proposal, which can be found here and is not very far along; Webassembly proposals lists it in stage one.
  • New video! 2022 in Programming Languages
    8 projects | /r/contextfree | 28 Jan 2023
    Here's the full tab list: - https://tjpalmer.github.io/languish/ - https://blog.python.org/2022/10/python-3110-is-now-available.html - https://devblogs.microsoft.com/python/python-311-faster-cpython-team/ - https://github.com/tc39/proposals/blob/main/finished-proposals.md - https://devblogs.microsoft.com/typescript/ten-years-of-typescript/ - https://devblogs.microsoft.com/typescript/announcing-typescript-4-6/#cfa-destructured-discriminated-unions - https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#the-satisfies-operator - https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/#go-to-source-definition - https://devblogs.microsoft.com/typescript/announcing-typescript-4-8/#build-watch-incremental-improvements - https://openjdk.org/projects/jdk/18/ - https://openjdk.org/projects/jdk/19/ - https://blog.jetbrains.com/clion/2022/07/july-2022-iso-cpp/ - https://en.wikipedia.org/wiki/C%2B%2B23 - https://en.cppreference.com/w/cpp/23 - https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2128r6.pdf - https://devblogs.microsoft.com/dotnet/announcing-dotnet-7/ - https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/ - https://devblogs.microsoft.com/dotnet/announcing-fsharp-7/ - https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/ - https://go.dev/blog/go1.19 - https://go.dev/blog/go1.18 - https://thephd.dev/c23-is-coming-here-is-what-is-on-the-menu - https://thephd.dev/c23-is-coming-here-is-what-is-on-the-menu#n3017---embed - https://thephd.dev/c23-is-coming-here-is-what-is-on-the-menu#n3006--n3007---type-inference-for-object-definitions - https://www.php.net/archive/2022.php#2022-12-08-1 - https://wiki.php.net/rfc/dnf_types - https://blog.rust-lang.org/ - https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html#captured-identifiers-in-format-strings - https://blog.rust-lang.org/2022/02/24/Rust-1.59.0.html#inline-assembly - https://blog.rust-lang.org/2022/05/19/Rust-1.61.0.html#more-capabilities-for-const-fn - https://blog.rust-lang.org/2022/08/11/Rust-1.63.0.html#scoped-threads - https://blog.rust-lang.org/2022/11/03/Rust-1.65.0.html#generic-associated-types-gats - https://blog.jetbrains.com/kotlin/2022/06/kotlin-1-7-0-released/ - https://stat.ethz.ch/pipermail/r-announce/2022/000683.html - https://dart.dev/guides/whats-new - https://medium.com/dartlang/dart-2-18-f4b3101f146c - https://medium.com/dartlang/the-road-to-dart-3-afdd580fbefa - https://www.swift.org/blog/swift-5.6-released/ - https://www.swift.org/blog/swift-5.7-released/ - https://www.swift.org/blog/swift-language-updates-from-wwdc22/ - https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/ - https://www.lua.org/news.html - https://www.scala-lang.org/blog/2022/09/05/scala-3.2.0-released.html - https://tjpalmer.github.io/languish/#y=mean&weights=issues%3D1%26pulls%3D0%26stars%3D1%26soQuestions%3D1&names=solidity%2Chaskell%2Cjulia%2Celixir%2Cclojure%2Cperl%2Cgroovy%2Cocaml%2Cgdscript%2Ccmake%2Cnix%2Cvisual+basic+.net - https://blog.soliditylang.org/ - https://downloads.haskell.org/~ghc/9.4.1/docs/users_guide/9.4.1-notes.html - https://julialang.org/blog/2022/08/julia-1.8-highlights/ - https://discourse.julialang.org/t/julia-v1-9-0-beta2-is-fast/92290 - https://elixir-lang.org/blog/2022/09/01/elixir-v1-14-0-released/ - https://elixir-lang.org/blog/2022/10/05/my-future-with-elixir-set-theoretic-types/ - https://clojure.org/news/2022/03/22/clojure-1-11-0 - https://godotengine.org/en/news/default/1 - https://ocaml.org/news/ocaml-5.0 - https://tjpalmer.github.io/languish/#y=mean&weights=issues%3D1%26pulls%3D0%26stars%3D1%26soQuestions%3D1&names=gdscript%2Czig%2Cpascal%2Cfortran%2Cnim%2Cf%23%2Ccommon+lisp%2Cwebassembly%2Ccrystal%2Ccython%2Cvala%2Cerlang%2Chaxe%2Cv%2Cd - https://ziglang.org/download/0.10.0/release-notes.html - https://ziglang.org/news/goodbye-cpp/ - https://nim-lang.org/blog.html - https://nim-lang.org/blog/2022/12/21/version-20-rc.html - https://www.erlang.org/news/157 - https://github.com/WebAssembly/proposals/commits/main - https://github.com/crystal-lang/crystal/releases - https://dlang.org/changelog/2.099.0.html - https://dlang.org/changelog/2.100.0.html - https://dlang.org/changelog/2.101.0.html - https://github.com/odin-lang/Odin/releases - https://gleam.run/news/ - https://gleam.run/news/gleam-v0.22-released/ - https://gleam.run/news/gleam-v0.24-released/ - https://github.com/idris-lang/Idris2/blob/102d7ebc18a9e881021ed4b05186cccda5274cbe/CHANGELOG.md - https://github.com/diku-dk/futhark/blob/master/CHANGELOG.md#02111 - https://grain-lang.org/blog/2022/06/06/new-release-grain-v0.5-durum/ - https://rescript-lang.org/blog/release-10-0-0 - https://www.roc-lang.org/ - https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf - https://vale.dev/ - https://www.val-lang.dev/
  • Extism: Make all software programmable with WebAssembly
    14 projects | news.ycombinator.com | 1 Dec 2022
    [1]: https://github.com/WebAssembly/proposals

    A glance of the overview and spec seems to indicate that WASM will provide some primitive data types, and any GC language can build their implementation on top of it. As I understand it, it's heavily based on Reference Types[3], which allows acting on host-provided types, and is already considered part of the spec [4]. It doesn't remove the need for the 5 different runtimes to have their own GC, but it lowers the bulk that the runtimes need to carry around, and offloads some of that onto the WASM runtime instead.

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

What are some alternatives?

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

lunatic - Lunatic is an Erlang-inspired runtime for WebAssembly

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

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.

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

component-model - Repository for design and specification of the Component Model

binaryen - DEPRECATED in favor of ghc wasm backend, see https://www.tweag.io/blog/2022-11-22-wasm-backend-merged-in-ghc

expresscpp - Fast, unopinionated, minimalist web framework for C++ Perfect for building REST APIs

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

buttplug-rs - Rust Implementation of the Buttplug Sex Toy Control Protocol

wasmtime - A fast and secure runtime for WebAssembly

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