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 transpiles Elixir client-side code to JavaScript

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 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!

zachdaniel

zachdaniel

Creator of Ash

needs an igniter installer :wink:

EDIT: me shortly:

mix igniter.new hash --with phx.new --install ash,hologram

With an igniter installer that sets up hologram you could have a one liner setup :partying_face:

Excited to tinker.

bartblast

bartblast

Creator of Hologram

At the moment, such integration is not possible. Both frameworks have different architectures and paradigms. To allow using Hologram in Phoenix LiveView and vice versa, several architectural changes and integrations would need to be made in both of them.

While I recognize the potential benefits of such integration for Hologram’s adoption, I don’t plan to pursue this at the moment. The question remains whether it is worth the effort, or if it would be better to focus on enhancing other features of Hologram.

Where Next?

Popular in News & Updates Top

bartblast
Hey there! There’s a new kid on the block! :smiley: What is it? Full stack isomorphic Elixir web framework that can be used on top of P...
New
martosaur
InstructorLite - v1.1.1 and v1.1.2 Pass Gemini token in request header rather than in request parameter (as is shown in API reference :...
New
lawik
NervesHub has had a CLI for a long time. It is called nerves_hub_cli and for the longest time you’d add it as a dependency. But only once...
New
zachdaniel
Hey folks! I’ve released the first version of our new AI policy. Accepting it is now part of our issue and pull request templates. Feel ...
New
zachdaniel
Hey folks! We’re starting a new weekly newsletter with the goings on of the various Ash packages and other interesting news from myself a...
New
fhunleth
We are thrilled to announce another update for Nerves Systems to nerves_system_br 1.22.5-based releases. Nerves systems are the device su...
New
lawik
It is my pleasure to announce the official release of the new generation of NervesHub with the v2.0.0 release. Containers are tagged. :p...
New
jjcarstens
NervesPack 0.4.0 is a minor bump with a fairly big change. This update drops :nerves_firmware_ssh in favor of the newer and more focused...
New
bartblast
Hey there! :slight_smile: We need help completing Elixir’s browser runtime by porting some Erlang functions to JavaScript. Hologram aut...
New
bartblast
Hey! For those following Hologram’s progress… I’m excited to share that I’ve just published the official roadmap for Hologram. You can ch...
New

Other popular topics Top

jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
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
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 42633 214
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

We're in Beta

About us Mission Statement