<?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: Shewart</title>
    <description>The latest articles on DEV Community by Shewart (@shewart).</description>
    <link>https://dev.to/shewart</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%2F3068346%2F6d79f153-42af-4238-8d1e-7bf3892b31fe.png</url>
      <title>DEV Community: Shewart</title>
      <link>https://dev.to/shewart</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shewart"/>
    <language>en</language>
    <item>
      <title>I built shadcn/ui for Blazor, and version 0.4.0 is out</title>
      <dc:creator>Shewart</dc:creator>
      <pubDate>Tue, 10 Nov 2026 13:07:46 +0000</pubDate>
      <link>https://dev.to/shewart/i-built-shadcnui-for-blazor-and-version-040-is-out-26k9</link>
      <guid>https://dev.to/shewart/i-built-shadcnui-for-blazor-and-version-040-is-out-26k9</guid>
      <description>&lt;p&gt;I'm Shewart, a .NET developer in Harare, Zimbabwe. Every time I started a Blazor app, I hit the same wall: the React world had &lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;shadcn/ui&lt;/a&gt;, beautiful, accessible components you copy into your project and own. Blazor had great component libraries, but making them look like &lt;em&gt;my&lt;/em&gt; app meant fighting their CSS.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;ShellUI&lt;/strong&gt;: shadcn/ui for Blazor. Version 0.4.0 just went stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool install -g ShellUI.CLI
shellui init
shellui add button card dialog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;init&lt;/code&gt; sets up Tailwind CSS and a theme, and wires everything into your project. &lt;code&gt;add&lt;/code&gt; copies the components, and everything they depend on, into &lt;code&gt;Components/UI&lt;/code&gt;. They're plain &lt;code&gt;.razor&lt;/code&gt; files: your code, to change however you like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Card&amp;gt;
    &amp;lt;CardHeader&amp;gt;
        &amp;lt;CardTitle&amp;gt;Welcome back&amp;lt;/CardTitle&amp;gt;
    &amp;lt;/CardHeader&amp;gt;
    &amp;lt;CardContent&amp;gt;
        &amp;lt;Button Variant="ButtonVariant.Outline"&amp;gt;Cancel&amp;lt;/Button&amp;gt;
        &amp;lt;Button&amp;gt;Save&amp;lt;/Button&amp;gt;
    &amp;lt;/CardContent&amp;gt;
&amp;lt;/Card&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  No Node.js
&lt;/h2&gt;

&lt;p&gt;Tailwind usually means npm. ShellUI downloads Tailwind's standalone binary once per machine and adds a build step, so &lt;code&gt;dotnet build&lt;/code&gt; builds your CSS. Nothing to install, nothing to keep in sync.&lt;/p&gt;

&lt;h2&gt;
  
  
  Whole pages, not just components
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shellui init --dashboard 02
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives you a full dashboard layout, with a collapsible sidebar whose links come from your app's actual pages. If your app uses ASP.NET Core Identity, one more command restyles every sign-in, sign-up and account-recovery page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shellui add auth-02
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's in 0.4.0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;93 components&lt;/strong&gt;, from buttons and dialogs to charts, a data table, a command palette, date pickers, sheets and toasts. &lt;code&gt;shellui add all&lt;/code&gt; installs the lot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An AI chat kit:&lt;/strong&gt; chat, streaming messages, prompt suggestions, a collapsible reasoning block and tool-call cards:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;Reasoning Text="@thinking" IsStreaming="@isStreaming" /&amp;gt;
  &amp;lt;ToolCall Name="search_orders" State="running" Arguments="@args" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your classes win.&lt;/strong&gt; A component's &lt;code&gt;Class&lt;/code&gt; now overrides its own styles, like tailwind-merge in React. No more &lt;code&gt;!important&lt;/code&gt; tricks:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;Button Class="px-8 bg-destructive"&amp;gt;Delete&amp;lt;/Button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Updates that respect your edits.&lt;/strong&gt; &lt;code&gt;shellui update&lt;/code&gt; rewrites components from newer templates but skips files you've changed. When a component's API changes, &lt;code&gt;shellui migrate&lt;/code&gt; rewrites your own pages and shows you the diff first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;shellui doctor&lt;/code&gt;&lt;/strong&gt; checks your setup (Tailwind, the host page, render mode, missing files) and tells you how to fix each problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard focus stays inside&lt;/strong&gt; open dialogs, sheets and drawers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.NET 8, 9 and 10&lt;/strong&gt; for both the CLI and the package.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Themes and dark mode
&lt;/h2&gt;

&lt;p&gt;Every component reads CSS variables, so dark mode works out of the box, and any theme from &lt;a href="https://tweakcn.com" rel="noopener noreferrer"&gt;tweakcn&lt;/a&gt; works too:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shellui theme apply https://tweakcn.com/themes/&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;theme-id&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Prefer a package?
&lt;/h2&gt;

&lt;p&gt;If you'd rather not own the source, the same components ship as one NuGet package, with a precompiled stylesheet so you don't need Tailwind at all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet add package ShellUI.Components
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;ShellUI is free and MIT-licensed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📘 Docs and live examples: &lt;a href="https://shellui.dev" rel="noopener noreferrer"&gt;shellui.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Source: &lt;a href="https://github.com/shellui-dev/shellui" rel="noopener noreferrer"&gt;github.com/shellui-dev/shellui&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's pre-1.0, so APIs can still change between minor versions; that's what &lt;code&gt;shellui migrate&lt;/code&gt; is for. If you build with Blazor, I'd love to hear what's missing, what breaks, and what you'd want next. Issues and PRs are open, and a star genuinely helps other people find it.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙏&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>blazor</category>
      <category>csharp</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
