WebAssem-what? That’s more or less how our journey with Mycelial started.
Chris Aniszczyk, CTO of the CNCF—who has since joined Crane as an Advisory Partner!!!—suggested that maybe we should be paying attention to WebAssembly and introduced us to Gerred and Michael, who had both been working in OSS at companies we collectively knew about or had had some contact with for more than a decade.
That first call was a crash course in WebAssembly, edge computing, offline first, CRDTs, and the sheer difficulty of getting state from Point A to Point B when you have no guarantees about the state (ha!) of the network between those points. Like when your phone is switching between cell towers while you’re in the car. Or when the last hop to a remote piece of equipment is over a point to point microwave link that doesn’t like inclement weather.
What we learned opened our eyes to what it takes to build a really distributed application, the kind of thing used by smart lightbulbs, oil rigs, EV charging stations, and the tiny little ML models running on all sorts of “edge” devices and apps. Adding that to what was already clear—the number of things at the edge will only grow over time—we could not do anything but say yes to building critical software infrastructure for that future.
Depending on who I’m talking to, I’ll describe it a few different ways:
- Think about all the logic it takes to get state changes across big internetworks to endpoints without consistent connectivity, but where you need to make sure that every thing has the most correct most current view of the universe—what if that was just a library and service you could import?
- The easiest way to make sure every edge device, endpoint, or instance of an app has the most current version of the data, computation, or model it needs to do its job
- CRDTs as a Service
The Mycelial team calls what they’re building “Edge Native”, because problems at the edge are specific to the edge.
- Disconnects happen: applications must continue to work and keep track of what they’ve done while they’re disconnected, whether that means disconnected totally or connected to peers that are altogether disconnected from the cloud
- Conflicts follow: when endpoints reconnect, there are conflicts between their view of what’s happened and every other endpoint’s and whatever other services they depend on
- Bandwidth hurts: getting everything up to date and in sync after connectivity problems is often severely limited by the bandwidth available at the edge, leaving endpoints in a situation where they either never catch up or programmers in a situation where they have to take shortcuts to make it happen
Anyone who’s watched an app like Spotify try to catch up when you switch devices on not-the-best-bandwidth has experienced this first hand. Mycelial makes the very complex problem solving and software engineering it takes to fix issues like that as simple as the code you see at the top of this post.
Taking it back to where we started, what does any of this have to do with WebAssembly? Well, Mycelial is written in Rust and runs on WebAssembly, which gives them amazing performance along with the ability to deploy to the most compact, storage and computation constrained, operating environments while providing a secure service that does exactly what it’s supposed to do.
If you’re building any kind of distributed application, you can stop writing state sync and update logic and stop worrying about how to deal with connectivity issues. Get early access at mycelial.com and watch for the open source drops coming soon! 🤓💻😎
We’re proud to have led the team’s $3.8M Seed round late last year and can’t wait to see what you build with it! 🏗️✨🚀