
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
tailwind-tree
Advanced tools
A utility for writing deeply nested and composable Tailwind CSS classes using an expressive tree structure, supporting responsive and interactive variants for Tailwind v3 and v4.
Tailwind Tree is a utility designed for writing deeply nested, composable Tailwind CSS classes using a simple and expressive tree structure. It simplifies the management of complex class combinations with responsive and interactive variants, supporting both Tailwind v3 and Tailwind v4.
hover:
, md:
, focus:
, etc.tailwind-merge
pnpm add tailwind-tree
# or
npm install tailwind-tree
# or
yarn add tailwind-tree
Instead of manually writing long utility strings, use twTree
for cleaner, conditional, deeply nested Tailwind class composition.
<div class="bg-amber-500 text-nowrap hover:bg-slate-600 hover:text-clip md:focus:text-blue-700" />
twTree
import { twTree } from 'tailwind-tree';
<div
className={twTree([
'bg-amber-500 text-nowrap',
{
hover: ['bg-slate-600', 'text-clip'],
md: [{ focus: ['text-blue-700'] }],
},
])}
/>;
twTree([
'text-white',
isActive ? 'bg-green-500' : 'bg-green-300',
{
hover: [
'underline',
'opacity-50',
isFocused ? 'bg-blue-200' : 'bg-blue-100',
{
active: ['scale-105', 'font-semibold'],
},
],
focus: [
'ring-2',
{
visible: ['ring-green-500', isError ? 'ring-red-500' : 'ring-yellow-500'],
},
],
},
anotherCondition ? 'p-4' : 'p-2',
['font-bold', 'tracking-wide'],
]);
Supports:
hover:active
, focus:visible
)
twTree(...)
must be integrated into the Tailwind build pipeline to ensure your classes are discovered and preserved during purging.
Choose the right setup based on your Tailwind version:
@tailwind-tree/extractor
)Use the official extractor to enable precise class extraction:
pnpm add -D @tailwind-tree/extractor
// tailwind.config.js
import { extractTwTree } from '@tailwind-tree/extractor';
export default {
content: [
{
files: ['./src/**/*.{ts,tsx,js,jsx}'],
extract: extractTwTree(),
},
],
theme: {
extend: {},
},
plugins: [],
};
✅ This approach eliminates redundant or missing classes by parsing twTree(...)
directly.
@tailwind-tree/vite-plugin
)Since Tailwind v4 removed extractors, use the official plugin to inject safelisted classes:
pnpm add -D @tailwind-tree/vite-plugin
// vite.config.ts
import react from '@vitejs/plugin-react';
import tailwindcss from '@tailwindcss/vite';
import { twTreePlugin } from '@tailwind-tree/vite-plugin';
export default defineConfig({
plugins: [
react(),
twTreePlugin(), // <--- this adds all twTree classes to Tailwind safelist
tailwindcss(),
],
});
🧠 Note: Tailwind v4 may still generate redundant classes because it scans all string content. This is a limitation in Tailwind itself, not
twTree
.
The twTree
function accepts a second options
parameter:
twTree(input, options?)
Option | Type | Default | Description |
---|---|---|---|
merge | boolean | true | Whether to apply tailwind-merge to deduplicate conflicting classes |
prefix | string | "" | Prefix to prepend to every class name |
twTree(['bg-red-500', { hover: ['bg-red-600'] }], {
merge: false,
prefix: 'tw-',
});
// → "tw-bg-red-500 tw-hover:bg-red-600"
Package | Description |
---|---|
tailwind-tree | Core twTree logic for nested class generation |
@tailwind-tree/extractor | Tailwind v3 content extractor |
@tailwind-tree/vite-plugin | Tailwind v4 Vite plugin for safelisting classes |
MIT © Shervin Ghajar
Made with 💙 by @shervin-ghajar
FAQs
A utility for writing deeply nested and composable Tailwind CSS classes using an expressive tree structure, supporting responsive and interactive variants for Tailwind v3 and v4.
The npm package tailwind-tree receives a total of 20 weekly downloads. As such, tailwind-tree popularity was classified as not popular.
We found that tailwind-tree demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.