bartblast

bartblast

Creator of Hologram

Hologram Roadmap Unveiled: The Path to ElixirConf 2025 and Beyond

Hey! For those following Hologram’s progress… I’m excited to share that I’ve just published the official roadmap for Hologram. You can check it out at: https://hologram.page/docs/roadmap

The roadmap page provides a comprehensive overview of:

  • Development Plan: Featuring both immediate priorities (before ElixirConf 2025) and medium-term goals (after ElixirConf), with features listed in planned order of implementation

  • Feature Status: Detailed breakdown of what’s already implemented and what’s coming next

My immediate focus is on key improvements like optimizing client bitstring performance, implementing component-level rerendering, completing DOM events support, and adding cookies and sessions functionality.

The page also includes detailed status tables for various framework components, including the template engine, framework runtime, and Elixir client runtime features.

I hope this transparency helps the community understand where Hologram is headed and what to expect in the coming months. I welcome your feedback and contributions!

What features are you most excited about? Let me know in the comments!

Most Liked

jam

jam

Looking good! Thanks for sharing.

JS Interop

Curious what this might look like.

Component Subscription DSL

This definitely caught my attention. Would be interested to learn more.

I think Svelte-like blocks are much more readable and maintainable than Vue-like ones

fwiw, I agree. I also think that supporting both would be more confusing.

bartblast

bartblast

Creator of Hologram

Regarding Phoenix template support - I understand that compatibility with Phoenix templates would certainly ease adoption and reduce the migration burden for developers looking to try Hologram. It’s a thoughtful suggestion that I’ve considered carefully.

However, after weighing the tradeoffs, I’ve decided not to pursue Phoenix template compatibility for several important reasons:

  1. Divergent Design Philosophies: Hologram and Phoenix have fundamentally different approaches to UI rendering. Hologram is designed for client-side rendering with Elixir-to-JavaScript transpilation, while Phoenix templates are server-rendered. Supporting both could create conceptual inconsistencies and may confuse developers (point 3).

  2. Maintenance Burden: Supporting two template syntaxes means maintaining two parallel systems, doubling the work for every feature, bug fix, and optimization. This could significantly slow down Hologram’s development.

  3. Confusing Developer Experience: Offering two ways to do the same thing can create decision fatigue and confusion for developers. New users might struggle to understand which approach to use when.

  4. Diluted Innovation: By trying to maintain compatibility with Phoenix templates, we might constrain Hologram’s ability to innovate in ways that are optimized for client-side rendering patterns.

  5. Optimization Challenges: Hologram’s template system is optimized for its specific transpilation approach (and will be optimized even more). Phoenix templates might not transpile as efficiently to JavaScript, potentially leading to performance issues.

  6. Documentation Complexity: Having to document two parallel systems would make the documentation more complex and potentially harder to navigate.

  7. Testing Overhead: We’d need to test all features across both template systems, increasing the testing burden.

  8. Divergent Evolution: As Phoenix continues to evolve its template system, maintaining compatibility would become increasingly difficult over time.

  9. Mixed Paradigms: Phoenix templates are designed with server-side rendering in mind, while Hologram templates are designed for client-side rendering. These different paradigms might lead to subtle bugs or unexpected behaviors when mixing approaches.

  10. Clear Differentiation: Having a distinct template syntax helps clearly position Hologram as a different approach to UI development in Elixir, rather than just an alternative to Phoenix LiveView.

  11. Focus on Core Strengths: By focusing exclusively on own template system, we can ensure it’s the best it can be, rather than dividing resources between two systems.

  12. Migration Path vs. Compatibility: Instead of supporting Phoenix templates directly, we could focus on providing clear migration paths and tools to help developers transition from Phoenix to Hologram.

I believe that maintaining a focused, single-template approach will ultimately lead to a better developer experience and a stronger framework in the long run. That said, I’m committed to providing clear migration paths and documentation to help Phoenix developers transition to Hologram as smoothly as possible.

bartblast

bartblast

Creator of Hologram

When props change, the component is not reinitialized - this is similar to how both LiveView and modern JS frameworks work. Components persist across renders, and only their props are updated. You’re right that the goal is similar to LiveView’s update function, though I prefer a more declarative approach where components can listen for specific prop changes. One key difference is that LiveView’s update doesn’t have access to previous prop values, only the new ones.

No worries at all, I’m here to explain and answer your questions!

I appreciate your inquisitiveness. It’s important to note that I don’t expect users to understand these implementation details. In fact, the goal of Hologram is to let developers focus on shipping features without worrying about the underlying boilerplate they’d otherwise have to write.

If you’re interested in understanding what’s happening with the scripts, you can check out the UI.Runtime module here:

D4no0

D4no0

Congrats! Very nice progress!

bartblast

bartblast

Creator of Hologram

Looping everyone in: @Eiji quotes fragments of a discussion we had in a GitHub issue: Missing or undocumented features when adding Hologram support to existing LiveView app · Issue #181 · bartblast/hologram · GitHub

Correct.

These are two separate things - in some scenarios we may need to just trigger an action for a single connection (window tab) without having to define a subscription in a component. The DSL would be for channel-like scenarios where we want to send to specific topics (e.g. chat scenario). What are your thoughts in this regard?

I agree with @jam - this would be confusing if we supported both.

I don’t reject the idea of introducing some simple syntax for partials eventually, but not in the medium-term.

Can you elaborate on that?

Browsers collapse sequences of whitespace into a single space when rendering text content. For block elements, whitespace at the beginning and end of content is ignored entirely. In normal text flow, no matter how many spaces, tabs, or line breaks you have between words, they’ll render as a single space. There are specific exceptions to this, but in such rare cases (like <pre> elements) you can just write the if block without surrounding whitespaces.

Minifying whitespace text nodes makes sense, though, in my opinion.

At the moment there is no way to react to prop changes. The only things that can change the state are actions that react to DOM events, other actions, or commands.

Example use case is described here: How to modify component state in reaction to a prop change? · Issue #161 · bartblast/hologram · GitHub

Where Next?

Popular in News & Updates Top

barnabasJ
You can now add subscriptions using the DSL. subscriptions do pubsub YourAppWeb.Endpoint subscribe :something_changed do action...
New
zachdaniel
Hey folks! I’ve begun putting together some concrete, framework-wide tooling and guidance on the usage of LLMs in development. The goal h...
New
zachdaniel
Hey friends! A long time quality of life feature we’ve been wanting to add is the ability to refer to to-one relationships in calculation...
New
garrison
This is the first RFD (Request For Discussion) for Hobbes, a database/library written in Elixir. I am going to be exercising a little mo...
New
bartblast
Backward Incompatible Changes Change template sigil from ~H to ~HOLO Require Elixir 1.15+ and Erlang/OTP 24+ New Features Add “select”...
New
jjcarstens
I know you might be thinking ¬ “Why make another SSH daemon wrapper when there already exists many like sshex and esshd??” Well, grea...
New
zachdaniel
Ash and AshPostgres generators/installers, built with igniter are available on main! I’ll be very grateful to anyone willing to give the...
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
zachdaniel
AshCloak AshCloak is small but mighty! Simply configure the extension, and it will encrypt your attributes :partying_face: Since an exam...
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

chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
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
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New

We're in Beta

About us Mission Statement