<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 瑚琏</title>
    <description>The latest articles on DEV Community by 瑚琏 (@zhanglala103838).</description>
    <link>https://dev.to/zhanglala103838</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4022318%2F483a0241-6760-4b90-81e8-1c19b4b9caf9.png</url>
      <title>DEV Community: 瑚琏</title>
      <link>https://dev.to/zhanglala103838</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhanglala103838"/>
    <language>en</language>
    <item>
      <title>hulianui: a React component library with 349 components, OKLCH runtime theming, and its own llms.txt for AI coding assistants</title>
      <dc:creator>瑚琏</dc:creator>
      <pubDate>Thu, 09 Jul 2026 07:21:46 +0000</pubDate>
      <link>https://dev.to/zhanglala103838/hulianui-a-react-component-library-with-349-components-oklch-runtime-theming-and-its-own-2jl3</link>
      <guid>https://dev.to/zhanglala103838/hulianui-a-react-component-library-with-349-components-oklch-runtime-theming-and-its-own-2jl3</guid>
      <description>&lt;p&gt;There's no shortage of React component libraries. What's missing is one that's &lt;strong&gt;good-looking by default, covers the deep-end components nobody ships, and can be read verbatim by your AI coding assistant.&lt;/strong&gt; That's why I built &lt;a href="https://hulianui.haloritual.com" rel="noopener noreferrer"&gt;&lt;strong&gt;hulianui&lt;/strong&gt; (&lt;code&gt;@hulianui/ui&lt;/code&gt;)&lt;/a&gt; — "Hulian" for short.&lt;/p&gt;

&lt;p&gt;If you're in a hurry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docs &amp;amp; live site: &lt;a href="https://hulianui.haloritual.com" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live demos (a dozen real admin apps): &lt;a href="https://hulianui.haloritual.com/demos" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com/demos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub (MIT): &lt;a href="https://github.com/hulianui/hulian" rel="noopener noreferrer"&gt;https://github.com/hulianui/hulian&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install: &lt;code&gt;pnpm add @hulianui/ui @hulianui/tokens&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's how it differs from shadcn/ui, MUI, and Ant Design, and a few design decisions I'm proud of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why build another one
&lt;/h2&gt;

&lt;p&gt;I'm not trying to out-Ant-Design enterprise dashboards, and this isn't another shadcn reskin. The real pain is that these three things are rarely true at the same time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Looks good out of the box.&lt;/strong&gt; Many libraries are feature-complete but ship with a default skin that screams "admin panel," and you burn hours tuning tokens before it's presentable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Covers the deep end.&lt;/strong&gt; Gantt charts, node/flow editors, danmaku, geo heatmaps, schedulers — the long-tail-but-critical components that generic libraries just don't have, so every project rebuilds them or stitches together five dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-friendly.&lt;/strong&gt; In 2026, half of writing feature code is a conversation with Cursor / Claude Code / Copilot. If a component library can't be understood accurately by an AI assistant, onboarding is a stream of hallucinated prop names and doc-hunting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;hulianui is aimed squarely at all three.&lt;/p&gt;

&lt;h2&gt;
  
  
  OKLCH two-layer tokens + runtime theming, zero dark-mode flash
&lt;/h2&gt;

&lt;p&gt;The theming system is built on the &lt;strong&gt;OKLCH color space + Tailwind v4 &lt;code&gt;@theme&lt;/code&gt;&lt;/strong&gt;, split into two token layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primitive layer:&lt;/strong&gt; OKLCH color ramps (perceptually uniform — no graying or hue shift across light/dark).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic layer:&lt;/strong&gt; &lt;code&gt;--color-primary&lt;/code&gt; / &lt;code&gt;--color-surface&lt;/code&gt; / &lt;code&gt;--color-hairline&lt;/code&gt;, etc. Components only ever consume semantic tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The payoff: theme switching is just runtime CSS-variable changes — &lt;strong&gt;no reload, no flash.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hulianui/ui&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Light/dark is a data-theme-driven pure CSS-variable swap — zero repaint flash&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ThemeProvider&lt;/span&gt; &lt;span class="na"&gt;defaultSetting&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ThemeProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dark mode isn't a naive color inversion either — there's a theme-aware shadow system (dark mode uses a white inset rim-light instead of drop shadows) and a "hairline" border token (light mode separates with shadow, dark mode with a 1px border). You can tweak all of it live in the &lt;a href="https://hulianui.haloritual.com/theme/color" rel="noopener noreferrer"&gt;theme docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The components generic libraries don't ship
&lt;/h2&gt;

&lt;p&gt;This is hulianui's biggest differentiator. Beyond the usual forms/tables/nav/feedback, it ships a batch of components that are &lt;strong&gt;hard to find in generic libraries and painful in every project&lt;/strong&gt; — all zero/light-dependency, all on the same token skin:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Docs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gantt&lt;/td&gt;
&lt;td&gt;Read-only CSS-grid percentage layout, UTC date math, today line, zero deps&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/gantt" rel="noopener noreferrer"&gt;/components/gantt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flow (node canvas)&lt;/td&gt;
&lt;td&gt;Native PointerEvents + SVG bézier edges, controlled nodes/edges, drag nodes / drag-to-connect / pan-zoom&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/flow" rel="noopener noreferrer"&gt;/components/flow&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Danmaku&lt;/td&gt;
&lt;td&gt;Live-stream scrolling comment lanes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/danmaku" rel="noopener noreferrer"&gt;/components/danmaku&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WorldMap&lt;/td&gt;
&lt;td&gt;Litable points, drill-down, aspect-fit&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/world-map" rel="noopener noreferrer"&gt;/components/world-map&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduler&lt;/td&gt;
&lt;td&gt;Month/week/day/resource views, drag-to-create / move / resize&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/scheduler" rel="noopener noreferrer"&gt;/components/scheduler&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ProTable&lt;/td&gt;
&lt;td&gt;Search area + toolbar (density / column settings / fullscreen) + pagination — a whole admin list page in one component&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hulianui.haloritual.com/components/pro-table" rel="noopener noreferrer"&gt;/components/pro-table&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kanban / Timeline / Sankey&lt;/td&gt;
&lt;td&gt;Board / timeline / sankey diagram&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hulianui.haloritual.com/components/kanban" rel="noopener noreferrer"&gt;Kanban&lt;/a&gt; · &lt;a href="https://hulianui.haloritual.com/components/timeline" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt; · &lt;a href="https://hulianui.haloritual.com/components/sankey" rel="noopener noreferrer"&gt;Sankey&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And these aren't isolated demos — I built a dozen &lt;strong&gt;complete, real admin apps&lt;/strong&gt; with them, 100% dogfooded, in the &lt;a href="https://hulianui.haloritual.com/demos" rel="noopener noreferrer"&gt;live demos&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hulianui.haloritual.com/demos/dashboard" rel="noopener noreferrer"&gt;Global dispatch command center&lt;/a&gt; (data wall + WorldMap drill-down)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hulianui.haloritual.com/demos/hanhub" rel="noopener noreferrer"&gt;LLM API gateway console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hulianui.haloritual.com/demos/ai-workflow" rel="noopener noreferrer"&gt;AI image/video workflow builder&lt;/a&gt; (Flow node canvas in anger)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real test of a component is whether it dares to power full business pages, not just a storybook cell.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-first: an llms.txt your coding assistant can read verbatim
&lt;/h2&gt;

&lt;p&gt;This is the part I think is most ahead of the curve. hulianui serves a spec-compliant &lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt; machine-readable corpus at the site root:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hulianui.haloritual.com/llms.txt" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com/llms.txt&lt;/a&gt; — a categorized index of all 353 components (one-line purpose + link each)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hulianui.haloritual.com/llms-full.txt" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com/llms-full.txt&lt;/a&gt; — self-contained full corpus: per-component Props / Events / Slots / examples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when you onboard with Cursor, Claude Code, or Copilot, you feed it llms.txt and it writes code &lt;strong&gt;from ground truth instead of training memory&lt;/strong&gt; — no guessed prop names, no hallucinated APIs. Every component doc page also has a "Copy MD for AI" button.&lt;/p&gt;

&lt;p&gt;In a world where "let the AI write the feature" is the daily default, that might be more useful than a few more components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Public npm, no token&lt;/span&gt;
pnpm add @hulianui/ui @hulianui/tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Single barrel import&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ProTable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Gantt&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hulianui/ui&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📖 Docs: &lt;a href="https://hulianui.haloritual.com" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🏗️ Live demos: &lt;a href="https://hulianui.haloritual.com/demos" rel="noopener noreferrer"&gt;https://hulianui.haloritual.com/demos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ GitHub (MIT — stars &amp;amp; issues welcome): &lt;a href="https://github.com/hulianui/hulian" rel="noopener noreferrer"&gt;https://github.com/hulianui/hulian&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you also believe people shouldn't have to work against ugly software, give it a try — and tell me in the comments the one component your project keeps fighting with. hulianui might already have it.&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
