bartblast

bartblast

Creator of Hologram

šŸŽ‰ Hologram - An Isomorphic Elixir Web Framework is Here!

Hey Elixir community! :waving_hand:

First, I owe you all an apology. There’s a running joke among my friends that Hologram is like nuclear fusion or fully autonomous Tesla cars - always ā€œcoming very soonā„¢ā€ :sweat_smile:. While I’ve been telling many of you earlier dates, life had other plans.

I want to be transparent with you - the past two years have been incredibly challenging for me health-wise. I went through three surgeries, and from January to July, I was bedridden and unable to walk. It completely turned my life and work upside down. But I’m back now, stronger than ever, and ready to finally share Hologram with you!

What’s Hologram?

Hologram is an isomorphic web framework that runs as your frontend layer in Elixir projects. While it requires Phoenix to run, you can use it with other backend solutions like Ash (HASH stack, anyone? :wink:). What makes it special? I’ve rebuilt it from the ground up with the ambitious goal of supporting 100% of Elixir syntax eventually.

Current Requirements

  • Elixir 1.13.4 - 1.17.3
  • OTP 22.3 - 27.1

(Other versions might work too, but they haven’t been tested yet)

Let’s Talk About the Current State

I want to be upfront about some current limitations and quirks:

  1. While we don’t have 100% Elixir syntax coverage yet, what’s implemented lets you fully experience Hologram’s programming model.
  2. Live reloading is a bit moody right now - if you run into issues, try restarting the server or deleting the _build directory.
  3. Bundle sizes are currently larger than they’ll eventually be. The transpiled code is intentionally verbose for easier debugging.
  4. Compilation is taking its time because everything recompiles on any change. We had incremental compilation before, but I temporarily removed it for better debugging.
  5. Rendering is currently slower than planned due to full page rerenders on component state changes and a temporary bitstring implementation (yes, we’re using integer arrays for bits right now :sweat_smile:).

What’s Next?

I’m working on Hologram full-time for the next couple of months, focusing on:

  • Addressing all the limitations mentioned above
  • Implementing cookies and session support
  • Porting the remaining Erlang functions to JS
  • Adding tons of optimizations

I believe we’ll be production-ready in a few months. I’ve spent the past months sharpening the saw, and now I’m all in!

How Can You Help?

The best help right now would be:

  • Play with Hologram and report any bugs you find
  • Share your feedback and experiences
  • Stay tuned for coding tasks if you’d like to contribute directly

Got questions? Create a topic in our Hologram Forum - I’m there daily, and your questions will help shape the documentation!

New Website! :artist_palette:

Check out the new Hologram website! (Desktop users, you might want to disable f.lux or similar tools for an hour to get the full experience :wink:)

Special Thanks :heart:

A massive thank you to everyone who reached out, showed interest, and cheered me on during this journey. And the most special thanks goes to Emilia :purple_heart: - without you, I don’t know how I would have made it through those bedridden months. You’re amazing!

Spread the Word!

If you’re excited about Hologram, please share this announcement with your network! Let’s get more eyes on this project and build something amazing together.

Let’s make web development in Elixir even more awesome! :rocket:


P.S. Remember, this is just the beginning. The current quirks will be resolved soon, and I can’t wait to see what you’ll build with Hologram!


GitHub repo: GitHub - bartblast/hologram: Full stack Elixir web framework that intelligently compiles Elixir client-side code to JavaScript Ā· GitHub

Website: https://hologram.page/

Most Liked

zachdaniel

zachdaniel

Creator of Ash

Setup was easy, seems pretty clear how one might leverage Ash inside of commands :slight_smile:

No notes really :smile: Wish I had a bit more time to tinker, but I don’t see any challenges to folks using Ash with Hologram as it stands now.

At some point I think a super power might be declarative modeling data sources for pages, and how commands affect that data. I’ve got some ideas for a ā€œdata pipelineā€ concept that might slot well into Hologram some day :smile:

bartblast

bartblast

Creator of Hologram

Thank you so much, @jam! :blush:

  1. The rest of the documentation is in progress, and I’m thrilled to share that the brand new Actions docs page is now live: Actions. It covers how actions work in various scenarios, and I’ll be finishing the Commands doc page soon as well.

  2. Noted! I’ll definitely consider adding some simple app examples like a todo app or a basic chat to help illustrate the framework’s capabilities.

  3. Hologram features a Context API and will include something akin to LiveView’s sticky components. Additionally, components can access session, cookies, database, filesystem, etc., during the initial server render. Given this, do you still see a need for a global state on the client-side?

  4. Absolutely! I plan to provide wrappers for Web APIs in Hologram. Regarding client-side databases, I envision a solution using indexedDB underneath that can automatically sync with the server database when online, allowing for offline work as well. The ultimate goal of Hologram is to enable a single codebase that can be deployed across multiple platforms: web, mobile and desktop.

AstonJ

AstonJ

Congrats on the launch Bart! :partying_face:

It’s great to see the Elixir ecosystem expanding, and in a way where new tools like Hologram are designed to work with stalwarts like Phoenix :smiley:

Btw a quick easy way to link to the Hologram forum is forum.elixirforum.com/hologram :023:

I’m also sorry to hear you’ve been poorly, I wish you a continued speedy recovery and you and Hologram all the very best for 2025!

Where Next?

Popular in News & Updates Top

bartblast
Hologram v0.8.0 is out! This release brings JavaScript interoperability - the most requested feature since the project’s inception. You c...
New
fhunleth
We’ve released new versions of all of the officially maintained Nerves Systems. The official systems, nerves_system_rpi0, nerves_system_b...
New
fhunleth
We recently released Nerves 1.4.0 and an update to the Nerves new project generator, nerves_bootstrap. The biggest change is support for ...
New
bartblast
I’m excited to announce Hologram v0.5.0, a major evolution of the full-stack Elixir web framework! This release brings massive performanc...
New
bartblast
Hologram v0.6.0 is here, bringing production-ready features to the full-stack Elixir web framework! This release focuses on enhanced secu...
New
sorentwo
Many months ago when I originally announced Oban I mentioned that a LiveView powered UI would be available for it soon. Well, the ā€œsoonā€ ...
New
jjcarstens
The Raspberry Pi is a very popular hardware platform for Nerves users and the official systems are getting an upgrade! :tada: :beers: Wh...
New
hugobarauna
Discover Livebook 0.9’s new security features, including Hubs for centralized secret management, notebook stamping, and a sneak peek into...
New
zachdaniel
We’re working hard on improving docs, and have some substantial things that it would be great to get some thoughts on. One of the bigges...
New
bartblast
Hey there! :slight_smile: We need help completing Elixir’s browser runtime by porting some Erlang functions to JavaScript. Hologram aut...
New

Other popular topics Top

TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 42158 114
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
nobody
Hi! In PHP: $_SERVER[ā€˜SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New

We're in Beta

About us Mission Statement