Skip to content
Luc UIReact · TypeScript · English and Simplified Chinese

Precision meets expression.

Every LUC interface starts from one system: tokens, accessible components, spatial motion, professional charts and whole reference products — documented one page at a time.

import { Button } from "@luc/ui";

Actions · six intents

Status · never colour alone

StableDegradedDraft

Numbers · tabular by default

Monthly retention+2.4%
0.9%

Density · one radius scale

catalog entries
282
components and integrations
110
canonical charts
76
motion components
35

What this system believes

Four rules decide every component in the library — and every page that documents it.

Tokens come before components

Three layers — core, semantic and utility — so a component never names a colour or a size directly.

Dark mode is the reference

The dark theme is designed first; the light theme is an independent design, never an inversion.

The interface never computes

Charts and tables render values the caller prepared; indicators, factors and backtests stay in the data layer.

Documentation stays honest

Where a component cannot express something, its page says so instead of quietly faking the result.

How to read a component page

Each page opens with what the component is for, then a live example, the real import path, the API from the generated catalog and what it does not do.

The charts state their units

A chart here draws what you prepared and says nothing you did not declare: no computed indicator, no guessed currency, no line across a gap. Axes, ticks and tooltips are formatted from the format you pass in.

The figure beside this text is the catalog itself, counted by area of the site. It is the only dataset the front door owns, so it cannot drift from what it describes.

Motion answers a pointer. Nothing moves on its own.

Motion with an off switch

Changing the sentence is a real transition through the library's own stagger. Turn motion down in the header and the same change becomes an instant swap, which is what a reader who asked for less motion should get.

Open the motion gallery

Where to go next

Each surface has one job: learn the rules, find a component, read a chart, assemble a page, or see a whole product built from the library.

Install from a Git tag or a vetted tarball

The package is not published on npm. The public Git tag installs the built package directly; the release tarball is the offline, checksum-pinned alternative.

Git tag

Verified

The public install is the built package at the immutable v1.0.1 Git tag. It needs no install script, and the lockfile records the resolved commit.

pnpm add @luc/ui@github:lucxu495/luc-ui#v1.0.1
npm install @luc/ui@github:lucxu495/luc-ui#v1.0.1
yarn add @luc/ui@github:lucxu495/luc-ui#v1.0.1
bun add @luc/ui@github:lucxu495/luc-ui#v1.0.1

Packed tarball

Verified

Use the release tarball for offline or checksum-pinned installs. This repository's consumer gate installs both this artifact and the public Git tag with plain npm.

pnpm add ./luc-ui-1.0.1.tgz
npm install ./luc-ui-1.0.1.tgz
yarn add ./luc-ui-1.0.1.tgz
bun add ./luc-ui-1.0.1.tgz

Requires: react ^19.0.0 · react-dom ^19.0.0 · react-hook-form ^7.0.0 (optional, for @luc/ui/forms/react-hook-form) · tailwindcss ^4.0.0 · node >= 22 (repository tools)

Build with a system that shows you how it is built.

Luc UI is public on GitHub. Version 1.0.1 installs from an immutable Git tag published in GitHub Releases; registry publication is still pending, and there is no paid tier. The installation guide shows the exact commands that work today.

Luc UI v1.0Homedark theme