Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/tailwindlabs/tailwindcss/llms.txt

Use this file to discover all available pages before exploring further.

Introduction

The Tailwind CSS plugin system allows you to extend the framework with custom utilities, variants, components, and base styles. Plugins receive a PluginAPI object with methods to register new styles and access theme configuration.

plugin() Function

Create a plugin by calling the default export from tailwindcss/plugin.
handler
(api: PluginAPI) => void
required
Function that receives the Plugin API and registers custom styles
config
Partial<Config>
Optional configuration object to extend theme values or add variants

Basic Plugin

import plugin from 'tailwindcss/plugin'

export default plugin(function({ addUtilities }) {
  addUtilities({
    '.scrollbar-none': {
      'scrollbar-width': 'none',
      '&::-webkit-scrollbar': {
        display: 'none'
      }
    }
  })
})

Plugin with Configuration

import plugin from 'tailwindcss/plugin'

export default plugin(function({ addBase }) {
  addBase({
    body: {
      margin: '0'
    }
  })
}, {
  theme: {
    extend: {
      colors: {
        'brand-blue': '#1fb6ff'
      }
    }
  }
})

plugin.withOptions()

Create a plugin that accepts configuration options.
pluginFunction
(options?: T) => PluginFn
required
Function that returns a plugin handler based on the provided options
configFunction
(options?: T) => Partial<Config>
Optional function that returns configuration based on the provided options

Example

import plugin from 'tailwindcss/plugin'

export default plugin.withOptions(
  function(options = { className: 'scrollbar-none' }) {
    return function({ addUtilities }) {
      addUtilities({
        [`.${options.className}`]: {
          'scrollbar-width': 'none'
        }
      })
    }
  },
  function(options = {}) {
    return {
      theme: {
        extend: {
          colors: options.colors || {}
        }
      }
    }
  }
)

PluginAPI Interface

The Plugin API provides methods to extend Tailwind CSS:
MethodDescription
addUtilities()Register static utility classes
matchUtilities()Register dynamic utilities that accept values
addVariant()Register a static variant
matchVariant()Register a dynamic variant that accepts values
addBase()Add base styles to the @layer base
addComponents()Add component styles (alias for addUtilities)
theme()Access theme configuration values
config()Access arbitrary configuration values
prefix()Apply the configured prefix to a class name

CssInJs Type

Plugins use a CSS-in-JS object format to define styles:
type CssInJs = {
  [key: string]: string | string[] | CssInJs | CssInJs[]
}

Features

  • Nested selectors: Use & for the current selector
  • Pseudo-classes: Define :hover, :focus, etc. as nested objects
  • Media queries: Use @media as object keys
  • At-rules: Support for @supports, @keyframes, etc.
  • camelCase properties: Automatically converted to kebab-case
  • Arrays: Multiple values for the same property

Example

{
  '.custom-utility': {
    display: 'flex',
    flexDirection: 'column',
    '&:hover': {
      opacity: '0.8'
    },
    '@media (min-width: 768px)': {
      flexDirection: 'row'
    }
  }
}

Loading Plugins

In CSS Files

@plugin "./plugins/my-plugin.js";

In Configuration Files

import myPlugin from './plugins/my-plugin'

export default {
  plugins: [
    myPlugin,
    myPlugin({ option: 'value' }) // For plugins with options
  ]
}

Type Exports

import type {
  Config,
  PluginAPI,
  PluginCreator,
  PluginsConfig,
  PluginUtils,
  ThemeConfig
} from 'tailwindcss/plugin'
Plugin handlers are called during build time. Use the design system API to register utilities and variants that are generated on demand.

Build docs developers (and LLMs) love