Choose your styling system: Nounjs Tailwind or Basecoat UI
Custom Tailwind-based component classes with noun- prefix
bunx @noundryfx/nounjs create my-app
# or
bunx @noundryfx/nounjs create my-app --tailwind
<button class="noun-btn-primary">Primary</button>
<button class="noun-btn-secondary">Secondary</button>
<div class="noun-card">
<div class="noun-card-body">Content</div>
</div>
<span class="noun-badge-success">Active</span>
<input class="noun-input" />
<table class="noun-table noun-table-hover">
shadcn/ui-inspired component library
bunx @noundryfx/nounjs create my-app --basecoat
<button class="btn">Primary</button>
<button class="btn-secondary">Secondary</button>
<button class="btn-destructive">Destructive</button>
<button class="btn-outline">Outline</button>
<div class="card">
<header>Title</header>
<section>Content</section>
</div>
<span class="badge">Badge</span>
<input class="input" />
| Component | Nounjs Tailwind | Basecoat UI |
|---|---|---|
| Primary Button | noun-btn-primary |
btn |
| Secondary Button | noun-btn-secondary |
btn-secondary |
| Outline Button | noun-btn-outline |
btn-outline |
| Ghost Button | noun-btn-ghost |
btn-ghost |
| Danger Button | noun-btn-danger |
btn-destructive |
| Text Input | noun-input |
input |
| Card | noun-card |
card |
| Badge | noun-badge-success |
badge |
| Table | noun-table |
table |
| Spinner | noun-spinner |
spinner |
module.exports = {
content: [
'./index.html',
'./app.js',
'./src/**/*.{js,noun,html}',
'./components/**/*.js'
],
theme: {
extend: {
// Your customizations
}
},
plugins: []
}
@import "tailwindcss";
/* Your custom styles */
.custom-class {
/* ... */
}
/* Component overrides */
.noun-btn-primary {
/* ... */
}
# Initialize Tailwind CSS in an existing project
noun init-css
# With Basecoat
noun init-css --basecoat
This creates tailwind.config.js, src/styles/globals.css, and sets up the build process.
Both styling options are built on Tailwind CSS v4, giving you access to all utility classes, custom configurations, and the modern CSS-first approach.