/

Unlumen UI: Twenty-Two Components Around One Idea

Motion that responds to the page rather than running on a timer, and why a set you can read in ten minutes can be the right one.

Serafim Korablev
Serafim Korablev
@korablev

Unlumen UI is a small set - 22 components here - built around one idea: motion that responds to the page rather than motion that runs on a timer. Scroll reveals, count-ups, a navigation menu that animates between items. That focus is what makes a set of twenty-two worth knowing when sets of four hundred exist.

The components

Motion Navigation Menu is the header with an animated indicator, the pattern the tabs guide argues should animate its position and width rather than fading between states.

Scroll Reveal Image and Side By Side Slide are the scroll-driven pieces, and the scroll animation guide makes the case that a reveal is an IntersectionObserver rather than a scroll listener.

Count Up is the animated number, which the stats guide covers with the two rules that keep it honest: the final value belongs in the DOM from the start, and it should not re-run every time the element scrolls back into view.

Glow Button is the hover treatment, Pixel Liquid Background is the backdrop, Animated Sidebar is the navigation panel, and Vertical Marquee is the moving column.

Why a small set can be the right one

The long-tail guide makes the general argument; this set is a good illustration of it. Twenty-two components chosen around one idea share timing and easing, which is most of what makes a page feel coherent, and a set you can read through in ten minutes is a set you can actually choose from.

The trade is coverage. There are no primitives, no forms, no data display, so this is a second or third source rather than a foundation, and taking three components from it is the intended use rather than a compromise.

What to check

The same short list that applies to any single-author set: whether the component reads your CSS variables rather than hardcoding colours, what it installs alongside itself, and whether its file name will collide with something you already have. The CLI guide covers the last one, which is the only silent failure of the three.

Where else to look

The honest list, because the answer is not always us:

SourceBest forTrade-off
The registry directoryEvery tracked registry with its size and last commitOnly registries that publish an index
CSS scroll-driven animationsReveals and progress with no runtime at allUneven support; needs a fallback
A large general registryCoverage, when you need a specific variantSearch it rather than browse it
21stThis set with previews, beside everything nearbyQuality varies by author, so preview before you take it

Taking one

Every component page has a live preview and the code. Installing goes through the shadcn CLI against our registry:

bash

That key comes from your 21st account, and installs require a membership. Set API_KEY_21ST once in your shell and the command works for anything in the catalogue.

Browse the registry directory →

Frequently asked

What is Unlumen UI built around?
Motion that responds to the page rather than running on a timer: scroll reveals, an animated navigation indicator, a count-up, a sidebar that animates open. Twenty-two components chosen around one idea share timing and easing, which is most of what makes a page feel coherent.
Is a twenty-component set worth using?
When it is focused, yes. Coverage is the trade: no primitives, no forms, no data display, so it is a second or third source rather than a foundation. Taking three components from it is the intended use rather than a compromise.
What rules apply to an animated counter?
Two. The final value belongs in the DOM from the start so it exists for a crawler and for anyone who does not watch the animation, and it should not re-run every time the element scrolls back into view. Under reduced motion, render the number immediately.
What should you check when taking from a single-author set?
Whether the component reads your CSS variables, what it installs alongside itself, and whether its file name will collide with something you already have. The last one is the only silent failure of the three.

Published

Aug 21, 2026

Read time

3 min

Tags

ComparisonRegistriesReactMotion

Share