bartblast
Hologram v0.12: Faster Compiles, Smaller Bundles, and More
Hologram v0.11: Regular Expressions, Client Stacktraces, and More
A proper Hologram-way file upload is planned as part of a high-level forms abstraction, which comes after Local-First support lands.
Hologram v0.10: Events and middleware for Elixir running in the browser
Hologram v0.9: Realtime for Elixir running in the browser
This release brings JavaScript interoperability - the most requested feature since the project's inception. Hologram's premise is that you shouldn't need to write JavaScript, but cutting yourself off from 3 million npm packages and hundreds of browser APIs isn't realistic. v0.8.0 bridges that gap: call JS functions, use npm packages, interact with Web APIs, instantiate classes, and work with Web Components - all from Elixir, with zero client-side latency.
AMA!
Hologram v0.8.0: Elixir Gets JavaScript Interop
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.
On top of that, since the browser platform has different characteristics, you can surgically drop down to native JS functions instead of compiling and bundling everything. For example, things like Unicode code point databases are already built into the browser - no need to ship them in your bundle when you can just call into the native APIs. The compiled output is also readable which helps with debugging.
For web apps generally JS is the better target IMO - you want the smallest possible bundle and the app reacting as quickly as possible on load.
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.
From 34% to 96%: The Porting Initiative Delivers – Hologram v0.7.0
This release is a milestone for our porting initiative. 49 contributors ported 150 Erlang functions across 19 modules, pushing client-side Erlang runtime coverage from 34% to 96% and overall Elixir standard library readiness from 74% to 87%.
This means the vast majority of Elixir standard library functions needed for full-stack web and basic local-first apps now work in the browser - string processing, collections, sets, binary operations, Unicode normalization, math, time operations, file path handling, and more.
Beyond porting, the release includes enhancements, bug fixes, and infrastructure groundwork.
Happy to answer any questions!
Hologram compiles Elixir to JavaScript to run in the browser, enabling full-stack development in pure Elixir - and soon, Local-First applications.
I'm deeply grateful to Curiosum's founders for believing in this vision and going all in.
Read more about what this partnership means for Hologram: https://hologram.page/blog/hologram-partners-with-curiosum
I’m deeply grateful to the EEF for their support of the project vision.
Read more about what this means for Hologram and learn about the EEF’s mission: https://hologram.page/blog/hologram-awarded-eef-stipend
(Hologram compiles Elixir to JavaScript to run in the browser, enabling full-stack development in pure Elixir - and soon, Local-First applications.)
I'm Bart Blast, creator of Hologram. I wanted to share an update that's been on my mind lately. For those unfamiliar, Hologram is a full-stack Elixir web framework that automatically transpiles Elixir to JavaScript, bringing the language to the browser, see: https://hologram.page
After nearly 3 years of full-time work on Hologram, I've reached a crossroads. I believed deeply enough in this vision to dedicate years of my life to it - and that belief has been validated. We're seeing real-world production use, endorsements from community leaders, and genuine excitement from the ecosystem. But to keep this momentum going, I need to find a sustainable path forward.
Right now, I'm working 60+ hour weeks trying to balance contract work with Hologram development. It's not sustainable, and frankly, neither the codebase nor the community deserves a maintainer who's stretched this thin.
I've put together a post that explains where we are, where we're going, and how you can help if Hologram's vision resonates with you: https://hologram.page/blog/seeking-sustainable-sponsorship
Even if sponsorship isn't an option for you right now, sharing the post or talking about Hologram in your networks helps more than you know.
Thank you for reading. Let's build the future of Elixir web development together!
- Bart
You might find Hologram interesting for this use case - it transpiles Elixir to JavaScript so your UI runs client-side. No persistent connection needed, so no reconnection delays or error messages. Still write in Elixir, still communicate with the server when needed.
It's early stage with some rough edges, but there are already Hologram apps in production: https://hologram.page
In the meantime, here are the best places to follow development and join discussions:
- Hologram forum: https://elixirforum.com/hologram
- Hologram Slack: https://elixir-lang.slack.com/channels/hologram
- Monthly newsletter: https://hologram.page/newsletter
- My X account: https://x.com/Bart_Blast
- My Bluesky account: https://bsky.app/profile/bartblast.com
I'm also planning to set up a Discord channel soon.