Skip to main content
Plugins let you register new utilities, components, variants, and more using JavaScript. This gives you complete control over extending Tailwind’s functionality.

Plugin API Overview

The plugin API provides these methods:
function
Register new utility classes
function
Register utilities that accept values
function
Register new variants
function
Register variants that accept values
function
Register component classes (same API as addUtilities)
function
Access theme values
function
Access config values

Creating a Simple Plugin

Here’s a basic plugin structure:
tailwind.config.ts
Usage:

Adding Static Utilities

Add utilities with fixed styles:

Match Utilities (Dynamic Values)

Create utilities that accept values:
With theme values:
Usage:

Match Utilities Options

The matchUtilities function accepts options:

Type Parameter

The type parameter validates arbitrary values:
  • 'any' - Any value is accepted
  • 'color' - Colors only
  • 'length' - Length values (px, rem, etc.)
  • 'percentage' - Percentage values
  • 'number' - Numbers
  • 'angle' - Angle values (deg, rad, etc.)
  • Array of types: ['length', 'percentage']

Adding Variants

Create custom variants:

Accessing Theme Values

Access theme values in your plugin:

Plugin with Configuration

Create plugins that accept configuration:

Real-World Plugin Examples

Scrollbar Utilities

Text Shadow Plugin

Animation Delay Plugin

Distributing Plugins

Create a shareable plugin package:
my-plugin/index.ts
Package structure:
package.json:
Usage:

Plugin Best Practices

  1. Use TypeScript - Get type safety and better IDE support
  2. Provide defaults - Make configuration optional with sensible defaults
  3. Follow naming conventions - Use Tailwind’s naming patterns
  4. Document thoroughly - Include usage examples and options
  5. Test across browsers - Ensure cross-browser compatibility
When creating utilities that use modifiers (like opacity modifiers for colors), set modifiers: 'any' in the options to allow arbitrary modifier values.
Plugins run during build time. Avoid expensive operations or side effects that could slow down builds.