bartblast

bartblast

Creator of Hologram

Hologram UI is in the works - the official component library for Hologram - and the waiting list is now open.

A common reaction when I mention this is: “Just generate it with an LLM.”

But there’s more to a good component than markup - accessibility, responsive design, cross-browser compatibility, and the dozen edge cases nobody remembers until someone hits them. And it’s not just individual components, it’s them working together: consistent API, shared design tokens, predictable behavior, reusable composition patterns. A library designed around Hologram’s conventions gives you idiomatic components - not generic ones bolted on.

If rolling your own works, no reason to stop. But not everyone wants to spend time on components when they could be building their actual product.

What you get on the waiting list:

  • Early access before the general launch
  • Help shape what ships in v1 (input on which components get priority)
  • Proceeds sustain Hologram’s development

:hourglass_flowing_sand: Join the waiting list: hologram.page/ui

Curious what the community would prioritize - what components do you find yourself rebuilding most often? Forms, modals, data tables, navigation? :rocket:

Showing Posts 1 to 5

jonas_h

jonas_h

Interesting.

I really hope you won’t depend on Tailwind for this as I don’t want Tailwind as a dependency for my projects. If you would use standard CSS it would increase your reach (useful for both Tailwind and non-Tailwind projects) and you avoid compatibility issues when Tailwind introduces breaking changes. (CSS is super stable).

bartblast

bartblast OP

Creator of Hologram

I agree - it will be pure CSS, no Tailwind dependency. Easy to drop into any project, and easy to combine with Tailwind or another framework if that’s your stack.

jonas_h

jonas_h

Fantastic!

sezaru

sezaru

Honestly, I would prefer if you split the components into 2 parts.

One is the the “raw” component, without any UI attached to it, just its business logic, minimum HTML and attributes to decorate it. In other words, something like Headless UI.

And the other is a implementation of a style for these components.

Also, it would be great if the library would work like Chelekom - Phoenix & LiveView UI kit and components where you use a mix task to “install” the components, basically you just install the library for your dev environment, and when you run a mix task for installing a component, it will create its code inside a components directory inside your project. This means that it is very easy for the user to get the component and customize it for its needs with ease

bartblast

bartblast OP

Creator of Hologram

The plan is to offer both a default path and an escape hatch:

  1. Batteries-included with strong theming. Default path: alias Hologram.UI.Combobox and you’ve got an accessible autocomplete with full keyboard nav and ARIA support dropped into your page. A first-class theming layer (design tokens, variants, slot overrides) should cover most visual customization - colors, spacing, typography, density - without anyone needing to touch source. Structural customization (markup, layout, composition) is where the eject path below comes in.

  2. Composability + generators on top of the default path. A mix task that copies a component’s source into your project, with the smaller building-block primitives - effectively the headless layer you described - staying as a library dep. You own the wrapper and can customize it freely, while still getting upgrades to the underlying primitives.

The honest tradeoff with the eject path is drift on the ejected wrapper: once it lives in your repo, package upgrades stop touching that file and you own its maintenance from then on. The primitives underneath keep getting upgrades through the package - but the wrapper is yours to maintain. That cost compounds across many ejected components, so the eject path is best treated as per-component rather than default. Great when you genuinely need to fork the behavior or restructure the markup; not great if you ejected just to change a color, which is what the theming layer is there to prevent.

Probably shipping the batteries-included + theming side first, then layering the generator path on top once I see what people actually try to customize.

— All posts loaded —

Where Next? Top

Trending in News & Updates Top

sorenone
Today we’re releasing Oban for Python. Not an Oban client in Python. Not a pythonx wrapper embedded in Elixir. Nope, it’s a fully operati...
New
bartblast
I’ll be using this thread to share Hologram patch release announcements. Minor releases will continue to get dedicated threads with blog ...
New
sorenone
This release unifies configuration for queues, repos, and services, swaps opaque timing integers for readable durations, and backports pe...
New
pcharbon
:heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::heart::hea...
New
jvoegele
Bond brings Design by Contract to Elixir: preconditions, postconditions and invariants as executable specifications, checked at runtime a...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews