Loading video...

Video Failed to Load

Go Home

I'm making progress on the auto-sync WebAssembly project. This video shows a live-editable AssemblyScript program. Both the program and its state are auto-synced between browser windows.

30,809 views • 3 years ago •via X (Twitter)

11 Comments

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

AssemblyScript didn't work great with this initially so I introduced a new rollback strategy that performs better for Wasm produced by AS. For now the library will pick a rollback strategy based on a heuristic or optional setting. I'd like to simplify that but for now it works.

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

Next steps: * Chase down rare desyncs * Fix a few time synchronization issues * Improve how disconnects / reconnects work

Avi 💜 Magic Circle's profile picture
Avi 💜 Magic Circle3 years ago

This looks super cool - can you share more about what you’re building?

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

Thanks! I'm building a library that lets you write multiplayer / synced WebAssembly programs, but you don't need to think about the networking details at all. It effectively makes the same Wasm program 'magically' run in multiple places at once.

Wil Chung's profile picture
Wil Chung3 years ago

Is there a name to the project? Will it be stand-alone open source or baked into Bloom?

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

I'm still thinking about a name. See this thread: This will be stand-alone from Bloom. My ideal plan: Open-source the core so people can hack it, improve it, and self-host it. But also offer paid hosting with a free tier that is dead-simple to use.

Daniel Bakas's profile picture
Daniel Bakas3 years ago

Hi again @kettlecorn! Question here: Could this work with Three.js?

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

Someone would have to write a layer to communicate between this and Three.js, but otherwise there's no reason it couldn't. A possible scenario is all networked logic runs in this library and all rendering / visual stuff runs in Three.js.

Andrii Maliuta 🇺🇦 😻's profile picture
Andrii Maliuta 🇺🇦 😻3 years ago

Awesome!

🍞☁⛩️ (realms/acc)'s profile picture
🍞☁⛩️ (realms/acc)3 years ago

How many connect users have you tried? This is very interesting

Ian Kettlewell's profile picture
Ian Kettlewell3 years ago

I haven't stress tested it yet. In theory it can scale to many users but it may be limited by overhead in the peer-to-peer connections. If it scales poorly there are approaches to fix that but those wouldn't be implemented right away.

Related Videos