// the find
GetFirefly/firefly
An alternative BEAM implementation, designed for WebAssembly
Firefly is an ahead-of-time compiler and runtime for Erlang/Elixir that targets WebAssembly and native platforms, producing standalone executables instead of BEAM bytecode. It implements its own BEAM-compatible runtime in Rust, with the primary goal of running Elixir in the browser. The target audience is Erlang/Elixir developers who need WASM targets or want self-contained binaries without shipping OTP.
The compiler pipeline is architecturally serious — Erlang AST gets lowered through Core IR, Kernel IR, SSA IR, and then MLIR/LLVM, which mirrors how the real BEAM compiler works and isn't a shortcut. Using Rust for the runtime gives you memory safety without a GC in the runtime layer itself, which is the right call for a WASM target. The pluggable runtime design (runtimes/crt as entry point, separate emulator crate) means you can swap backends without touching the compiler. Explicit non-goals (no hot code reloading, no dynamic code loading) are listed upfront, which is honest and helps you know what you're getting.
The project has been dead since October 2023 — no commits in nearly three years. The README still has placeholder 'NOTE: This section is a placeholder' text in the installation section, and the docs describe functionality that 'may' work rather than does work; this is a research artifact, not something you can ship against. Building it requires a specific Rust nightly from 2022, LLVM 15, and cargo-make, and the setup docs are incomplete in places. NIF support, which most real Erlang/Elixir libraries depend on, is explicitly unfinished. If you're hoping to run a Phoenix app in WebAssembly, you're still years away from that being practical with this codebase.