2/12/2026 at 3:45:19 AM
This looks really cool. Congratulations on the milestone.Does the elixir->js compiler exist as a separate project, or is it built into the framework? Is it based on an existing transpiler? How does it compare / contrast to something like gleam (which, AFAIU also let's you transpile elixir to JS)?
by knubie
2/12/2026 at 11:23:44 AM
Thank you! The Elixir -> JS compiler is currently coupled with the framework - it's a custom thing, not a separate dependency.Re the Gleam comparison: I don't know Gleam's implementation in detail so someone correct me if I'm wrong, but as I understand it - Gleam compiles to fairly readable JS with a minimal prelude, and deliberately treats the two targets as having different concurrency semantics. It doesn't try to replicate BEAM processes or OTP in JavaScript, instead using JS's native promise-based async. The upside is zero runtime overhead and clean JS interop.
Hologram takes the opposite approach - we're iteratively reimplementing the Erlang runtime in the browser, with the goal of having full semantic parity eventually. The tradeoff is a heavier runtime, but the benefit is that the same Elixir code can run on both server and client with consistent behavior.
by bartblast
2/12/2026 at 1:41:20 PM
you could have a lighter runtime by implementing a bytecode interpreter in wasm.by dnautics
2/12/2026 at 11:38:53 PM
To clarify - Hologram's runtime is heavier than Gleam's, but that doesn't mean it's heavy. The compiler does tree-shaking, bundling only the code your app actually uses, so you're not shipping the entire reimplemented runtime to the browser.As for the WASM bytecode interpreter idea - you'd run into the same problems I described in my earlier comment. Even a minimal interpreter compiled to WASM tends to land in the multi-MB range once you include enough of the runtime to be useful. You still can't touch the DOM from WASM, so every UI update crosses the JS bridge with serialization overhead. You lose the ability to surgically call native browser APIs (like built-in Unicode support) instead of bundling your own. And you lose readable output, which matters for debugging.
by bartblast
2/13/2026 at 7:01:50 AM
gleam doesn't run a bytecode interpreter in wasm! i think it compiles straight to rust? which is why there are some leaky as hell abstractions.by dnautics
2/12/2026 at 6:09:58 AM
I may be wrong but I believe the elixir->js compiler is currently built into the framework but it could potentially be separated in the future.Gleam is different in that JS is a first-class target and built into Gleam's compiler, while Hologram is a standalone project.
by lawn