component-model
Ambient
Our great sponsors
component-model | Ambient | |
---|---|---|
31 | 23 | |
796 | 3,687 | |
6.8% | 1.3% | |
8.2 | 9.9 | |
7 days ago | 3 months ago | |
Python | Rust | |
GNU General Public License v3.0 or later | Apache License 2.0 |
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.
component-model
-
Missing the Point of WebAssembly
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
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
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)
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
The WASM Component Model
- WASI: WebAssembly System Interface
-
Introducing - Wasmer Runtime 4.0
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
-
mlang - a new programming language for WebAssembly
Thanks for your valuable comments. Yes. the wasm provides the linear memory and mlang will adopt Canonical ABI on top of that to implement high level types like string, record and variant etc.
That's the thing I always thought about whenever I was trying to add a new language feature to it. My plan is to use the Component approach to establish linkage, allowing me to gradually replace portions of the mlang compiler written in C with ones written in mlang itself. I'm extremely excited for the upcoming new component model standard, which I believe will be a game changer for the language ecosystem. The biggest hudles of new language adoption is resuablility of existing libraries implemented in other languages on the market. To me the component model appears to be a promising solution to this problem.
-
Announcing wasi-threads
you are thinking of wasi_preview_snapshot1 which was effectively posix mapped into wasm. This approach as a whole has been deprecated, wasi_snapshot_preview2 is entirely based on the component model which is closer to Erlang than Posix in that regard. A component function receives a copy of the data it should work on instead of a pointer and length into foreign memory. This makes it possible to give different components different sets of rights, but still have them work with each other, you could even have network between two components, but to the components it will seem like they ran in the same program
Ambient
- FLaNK Stack Weekly 09 Oct 2023
-
Show HN: Ambient, a multiplayer game engine and platform using WASM/WebGPU/Rust
Hi, this is Kuba from Ambient team, I work on Ambient backend.
The servers in question are part of the main Ambient application [0]. The server part is open-source just like the rest of the engine. You can start your own server using native build of Ambient (check cli help for `ambient serve`).
As for the orchestration and creating servers on demand, we are using Kubernetes and Agones [1]. Both of them are open too. We just have a thin API server that receives requests that a server is needed, checks if there's already one running and if not it uses Agones to allocate one.
- How do I run multiple "game rooms" in Bevy / Renet / Rapier on the server?
-
Bevy and WebGPU
Intriguing development! It's quite refreshing to witness Bevy hopping onto the WebGPU bandwagon. I can't help but wonder about the complexity involved in transitioning an existing codebase from WebGL to WebGPU in such a compressed timeline.
On a similar note, Ambient (https://github.com/AmbientRun/Ambient) has been on my radar for their utilization of WebGPU, though they seemingly lack a tangible web demo. Anyone have any insights or comparisons to share?
-
Does anyone here work in gamedev with Rust as their primary language?
I work on Ambient, an open-source platform for streamed[1] multiplayer games written entirely in Rust. We're a Swedish startup that supports remote and we're hiring for self-starters - if you think you can flourish in a startup environment, feel free to apply!
-
How feasible is to create a WASM plugin system in Rust?
Yes. I implemented the WASM logic for Ambient. It's all doable, but as the other commenters have mentioned, bindings can be a bit of a pain.
-
We're not really game yet.
Ambient is a very poor choice for OP if they're (rightfully) struggling with existing Rust render tech's immaturities. Not only is it poorly optimised at present (esp. for OP's use case), but it is also far from mature (see Ambient#6, Ambient#76, Ambient#150, ...).
Have you looked into what thirdroom or ambient have done in the space?
-
Ambient: The Multiplayer Game Engine
5) We've experimented with partial html UIs, but support for it on Rust native isn't great yet. We do have a fairly decent UI implementation (see examples here: https://github.com/AmbientRun/Ambient/tree/main/crates/ui/ex...) though it's not exposed to user code yet, but yeah I hear you that there's a lot of people who know html based UI tech. We'll see exactly where we end up there, but most likely the first step will be to expose the UI library we've built already to users.
Thanks!
What are some alternatives?
bartholomew - The Micro-CMS for WebAssembly and Spin
wit-bindgen - A language binding generator for WebAssembly interface types
spin - Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.
wasmer - 🚀 The leading Wasm Runtime supporting WASIX, WASI and Emscripten
spec - WebAssembly specification, reference interpreter, and test suite.
proposals - Tracking WebAssembly proposals
wasi-sockets - WASI API proposal for managing sockets
wasm3 - 🚀 A fast WebAssembly interpreter and the most universal WASM runtime
wajic - WebAssembly JavaScript Interface Creator
meetings - WebAssembly meetings (VC or in-person), agendas, and notes
wizer - The WebAssembly Pre-Initializer
jpeg2000-decoder - Decodes JPEG 2000 images in a subprocess, for safety