So Many Exciting Projects in the BEAM Ecosystem
Lately, I've been feeling energized by a bunch of projects in the BEAM ecosystem. If you don't know, [the BEAM](https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine) (Bogdan's Erlang Abstract Machine) is the original VM for Erlang, and its siblings Elixir, Gleam, LFE, etc. We use "on the BEAM" as a kind of umbrella term for code running in that VM and written in those languages.
The thing that is exciting to me is that this ecosystem is evolving. There are really interesting efforts underway to take these "BEAM languages" beyond the BEAM.
Hologram
Hologram's stated purpose is to write rich interactive client-side user interfaces in Elixir.
Today, the mainstay of writing web applications in Elixir today is Phoenix LiveView. It's a great framework for most web applications-- my favorite one, in fact. Through clever use of the BEAM's process model and websockets, LiveView lets you create very interactive interfaces that feel pretty much just like anything you could create in React. However, LiveView is really a server-side framework. Almost everything is happening server side, and the client-side is just sending events over websockets and merging updates into the page. This model falls apart in certain cases where you need ultra-low latency updates, need to deal with complex client-side state, or are doing a lot of your work through browser JS APIs.
Hologram flips the model. In Hologram, most of the UI is executing in the browser. You only need to send a request down the socket when you need the server to do something like writing a row to the database. Generally, the UI state is kept client-side. As a result, Hologram handles high latency or even offline scenarios better, while still letting you write Elixir.
In order to accomplish this, Hologram is not just a UI framework, but also an alternative compiler and runtime for Elixir. It transpiles Elixir code to JS and runs it through an interpreter running in the browser. This is very exciting to me, because it takes Elixir beyond the BEAM and beyond the server. This should open up more mobile development in Elixir, as well as alternative architectures like zero-knowledge E2E encrypted systems.
AtomVM
AtomVM is a from-scratch implementation of an Erlang (and Elixir, Gleam, etc) VM targeted at small, low-power devices. Obviously this is going to unlock embedded development on a new range of devices (even smaller than the ones targeted by Nerves).
The thing that excites me the most about AtomVM is that it is a second implementation of the same bytecode used by BEAM. And since it is a newer project and one aimed at simpler, lower-power devices, it is also easier to read AtomVM's code than to read BEAM's code. In effect, it is acting as improved documentation of BEAM's bytecode. I think this will make it easier to develop many other interesting tools that interoperate with the BEAM and BEAM-based languages like new compilers and VMs.
The Common Theme
The thing I find exciting about both of these projects is that they take the BEAM ecosystem beyond the BEAM. The BEAM is a great platform, but it is one designed for one particular scenario-- server applications. But I don't want to have to leave Elixir behind to write a game, an client-side-E2E-encrypted messaging app, or an embedded application. These are languages are good enough to run everywhere, and I'm glad we're getting the tooling to do that.