github software-mansion/popcorn v0.2.0

6 hours ago

Hello! It's been a while since the last release and we have a lot to show for it. We've been mostly working on AtomVM stability, improving communication between JS and Elixir runtimes, and running some experiments.
Experiments in question:

Local LiveView

Phoenix has support for not only serving static HTML templates but also components that can be interactive. It's known as a Phoenix LiveView.
LiveView works by adding JS handlers that react to clicks, typing, and other user interactions.
If a handler is triggered, it sends event data via WebSocket to your server, which can then update its state and send a patched HTML snippet back to the browser.

The technology is very stable and helps developers build features with a relatively small amount of code. The main drawback is that users need to have a good internet connection for it to work.

We are building a library that can run Elixir code locally in the browser so we thought – hey, this is a perfect fit. That's how this small experiment was born.
The proof of concept and further development were done by Franciszek Kubis and Mateusz Front. Local LiveView is still in active development. Please check out demos on our website!

Elixir language tour

This is another experiment that evolved into a full-fledged website, crafted by Marceli Mietla. We've created a tutorial for Elixir newcomers to learn the language with interactive examples – you can run little snippets of Elixir code, edit them, crash the VM – the possibilities are endless. Big thanks to Mateusz Front and Bartosz Błaszków for writing the tutorials.

You can take a look here: Elixir language tour

JS package

When a library bridges three languages (Elixir, Wasm, and JS), deciding where things belong gets tricky. Previously, we had a slightly annoying setup where you needed to copy .js files yourself to use JS API. This is no longer the case.
We're still migrating, but the plan is to have the VM (compiled to Wasm) living in the JS package, with JS bindings. The Hex package will host Elixir API and tools to create your app bundles. This makes it much easier to try Popcorn in your projects, especially in Phoenix apps 😉

If you want to read more about our struggles to package Wasm into npm library, here's an article for you.

AtomVM

We won't list every contribution, but here are some shoutouts:

We're also working on improving ets – supporting more table types, functions, and trying to eradicate aborts on OOM, which required redesigning some data structures). Mateusz Furga (not to be confused with the other Mateusz) has been dedicating his time to this effort.

The future

We've automated a bit of release process so improvements should land more frequently. We're planning to run some more experiments (BEAM on Wasm? More local LiveView? langtour as a tool?). We'll share how they go. Stay tuned.

Don't miss a new popcorn release

NewReleases is sending notifications on new releases.