With the release of Tailwind CSS v4, some major changes have been introduced. One of the most significant changes is the removal of the tailwind.config.js file. Now, all configurations are directly managed within the global CSS file.
Another big change is the removal of the safelist class pattern from the Tailwind config. Previously, in Tailwind CSS v3, we could safelist classes dynamically using patterns inside the tailwind.config.js file. However, in Tailwind CSS v4, this approach no longer works.
Issue: Conditional Classes Not Applying
If you are applying Tailwind CSS classes conditionally, like in the following example:
import RichText from "../notion-inline-blocks/rich-text";
import cn from "../utils/class-merge";
import MentionPreviewRender from "../utils/notion-blocks/mention-preview/mention-preview-render";
export default function Paragraph({ block }) {
return (
<>
<p
className={cn(
"my-[0.0625rem] min-h-[1.875rem] px-0.5 py-[0.1875rem] text-[1rem] leading-normal font-normal [word-break:_break-word] whitespace-pre-wrap first:mt-0.5 last:mb-0",
block.paragraph.color !== "default" &&
block.paragraph.color !== "default_background" &&
(block.paragraph.color.includes("background")
? `bg-notion-${block.paragraph.color}`
: `text-notion-${block.paragraph.color}_color`),
)}
>
<RichText text={block.paragraph.rich_text} />
</p>
<MentionPreviewRender text={block.paragraph.rich_text} />
</>
);
}
Tailwind CSS will not apply the dynamically generated classes because it doesn’t know in advance which classes will be used.
Solution: Using a Safelist File
In Tailwind CSS v3, we used the safelist
option inside the tailwind.config.js
file to explicitly tell Tailwind which classes to keep during build. Since Tailwind CSS v4 no longer supports this, we need a new approach.
How to Safelist Classes in Tailwind CSS v4
To manually safelist classes, create a safelist-tailwindcss.txt file and define all the necessary classes inside it, like this:
md:grid-cols-1
md:grid-cols-2
md:grid-cols-3
md:grid-cols-4
md:grid-cols-5
----- rich text colors -----
text-notion-default_color
text-notion-blue_color
text-notion-brown_color
text-notion-gray_color
text-notion-green_color
text-notion-orange_color
text-notion-pink_color
text-notion-purple_color
text-notion-red_color
text-notion-yellow_color
text-notion-code_color
----- rich text background -----
bg-notion-default_background
bg-notion-blue_background
bg-notion-brown_background
bg-notion-gray_background
bg-notion-green_background
bg-notion-orange_background
bg-notion-pink_background
bg-notion-purple_background
bg-notion-red_background
bg-notion-yellow_background
bg-notion-code_background
----- callout background -----
bg-notion-callout-blue_background
bg-notion-callout-brown_background
bg-notion-callout-gray_background
bg-notion-callout-green_background
bg-notion-callout-orange_background
bg-notion-callout-pink_background
bg-notion-callout-purple_background
bg-notion-callout-red_background
bg-notion-callout-yellow_background
----- select colors -----
text-notion-select-default_color
text-notion-select-blue_color
text-notion-select-brown_color
text-notion-select-gray_color
text-notion-select-green_color
text-notion-select-orange_color
text-notion-select-pink_color
text-notion-select-purple_color
text-notion-select-red_color
text-notion-select-yellow_color
text-notion-select-code_color
----- select background -----
bg-notion-select-default_background
bg-notion-select-blue_background
bg-notion-select-brown_background
bg-notion-select-gray_background
bg-notion-select-green_background
bg-notion-select-orange_background
bg-notion-select-pink_background
bg-notion-select-purple_background
bg-notion-select-red_background
bg-notion-select-yellow_background
bg-notion-select-code_background
Where to Store the Safelist File?
You can store this file in the styles folder or the root directory, depending on your project structure.
my-project/
│── public/
│── src/
│ ├── app/
│ ├── components/
│ ├── styles/ # ✅ Recommended: Store safelist file here
│ │ ├── global.css
│ │ ├── safelist-tailwindcss.txt # ✅ Safelist file
│ ├── utils/
│── package.json
│── postcss.config.js
│── safelist-tailwindcss.txt # ✅ Alternative: Store in root directory
How Does This Work?
During development or build time, Tailwind automatically scans the root folder and detects which classes are used. By adding them to the safelist file, you ensure that Tailwind keeps these classes in the final CSS output
For more information, check the official documentation
Understanding and customizing how Tailwind scans your source files.

Conclusion
Since Tailwind CSS v4 has removed the safelist option from the config file, we now need to manually define and store classes in a separate safelist-tailwindcss.txt file. This ensures that dynamically applied classes are recognized and included during the build process.
This approach allows you to conditionally apply classes in your components without worrying about Tailwind purging them.
Related Blogs

How to Add Dark Mode in Next.js 15 App Router with Tailwind CSS V4 (Latest Method)
Learn how to implement dark and light mode in your Next.js 15 App Router project using Tailwind CSS V4. This step-by-step guide covers the latest changes in Tailwind V4 and Next.js 15 for a seamless theme switcher!

How to Add Google Tag Manager in Next.js 15 App Router (Official & Simple Method)
Learn how to integrate Google Tag Manager into your Next.js 15 App Router project using the official @next/third-parties package. This guide walks you through the latest and easiest method, no manual script tags, just clean integration.

How to Learn Touch Typing and Boost Your Speed to Type Faster
Want to type faster and improve your accuracy? This guide will show you how to learn touch typing, boost your speed, and become a typing pro in no time! Plus, you'll discover how to type without looking at the keyboard, a key skill for mastering touch typing and increasing your efficiency.

How to Never Make Spelling Mistakes While Coding
Learn how to avoid spelling mistakes in your code with a simple VS Code extension – the Spell Checker. This tool helps you spot and fix typos in function names, variables, and comments.