Skip to content

Repository files navigation

tw-animations

NPM version NPM version NPM downloads License

Extended animation utilities for Tailwind CSS v4 and v3. 85+ animations, scroll timelines, and view animations with zero configuration.

WebsiteConfiguratorGitHub

Tailwind Animate

✨ Features

  • 85+ Animations - Attention seekers, fades, slides, zooms, rotations, and more
  • Scroll Animations - View timelines and animation ranges based on scroll position (NEW in v2.0)
  • Zero Configuration - Just import and start animating
  • Dual Support - Works with both Tailwind CSS v4 and v3
  • Fully Customizable - Control duration, delay, timing, direction, and more
  • CSS Custom Properties - Easy theming and dynamic control
  • Arbitrary Values - Use any value with bracket notation
  • Modern & Lightweight - Built with CSS custom properties and @utility syntax

📦 Packages

This monorepo contains two packages:

Package Version Description
tw-animations npm For Tailwind CSS v4 (CSS-only)
tw-animations-plugin npm For Tailwind CSS v3 (Plugin)

🚀 Installation

For Tailwind CSS v4

npm install tw-animations

Add the import to your CSS file:

@import "tailwindcss";
@import "tw-animations";

For Tailwind CSS v3

npm install tw-animations-plugin

Add the plugin to your Tailwind configuration:

// tailwind.config.js
module.exports = {
  plugins: [require("tw-animations-plugin")],
};

🎯 Quick Start

Basic Animation

<div class="animate-fade-in">Hello World!</div>

With Controls

<button class="animate-bounce animate-infinite animate-duration-[2s]">
  Click me
</button>

Scroll Animation (NEW in v2.0)

<div class="timeline-view animate-fade-in-up animate-range-entry">
  Appears when entering viewport
</div>

🎨 Available Animations

Attention Seekers (16)

animate-flashanimate-head-shakeanimate-heart-beatanimate-jellyanimate-rubber-bandanimate-shake-xanimate-shake-yanimate-swinganimate-tadaanimate-wiggleanimate-wobbleanimate-floatanimate-spinanimate-pinganimate-pulseanimate-bounce

New Animations (v2.0)

animate-blurred-fade-inanimate-blinkanimate-dancinganimate-jiggleanimate-popanimate-rotate-360animate-rotate-180animate-rotate-90animate-expand-horizontallyanimate-expand-verticallyanimate-bounce-fade-inanimate-pulse-fade-in

Fading Entrances (5)

animate-fade-inanimate-fade-in-downanimate-fade-in-startanimate-fade-in-endanimate-fade-in-up

Fading Exits (5)

animate-fade-outanimate-fade-out-downanimate-fade-out-startanimate-fade-out-endanimate-fade-out-up

Sliding Entrances/Exits (8)

animate-slide-in-downanimate-slide-in-startanimate-slide-in-endanimate-slide-in-upanimate-slide-out-downanimate-slide-out-startanimate-slide-out-endanimate-slide-out-up

Zooming Entrances/Exits (10)

animate-zoom-inanimate-zoom-in-downanimate-zoom-in-startanimate-zoom-in-endanimate-zoom-in-upanimate-zoom-outanimate-zoom-out-downanimate-zoom-out-startanimate-zoom-out-endanimate-zoom-out-up

Bouncing Entrances/Exits (10)

animate-bounce-inanimate-bounce-in-downanimate-bounce-in-startanimate-bounce-in-endanimate-bounce-in-upanimate-bounce-outanimate-bounce-out-downanimate-bounce-out-startanimate-bounce-out-endanimate-bounce-out-up

Rotating Entrances/Exits (10)

animate-rotate-inanimate-rotate-in-down-startanimate-rotate-in-down-endanimate-rotate-in-up-startanimate-rotate-in-up-endanimate-rotate-outanimate-rotate-out-down-startanimate-rotate-out-down-endanimate-rotate-out-up-startanimate-rotate-out-up-end

Back Entrances/Exits (8)

animate-back-in-downanimate-back-in-startanimate-back-in-endanimate-back-in-upanimate-back-out-downanimate-back-out-startanimate-back-out-endanimate-back-out-up

Flippers (5)

animate-flipanimate-flip-in-xanimate-flip-in-yanimate-flip-out-xanimate-flip-out-y

Specials (6)

animate-hingeanimate-jack-inanimate-jack-outanimate-roll-inanimate-roll-outanimate-particle

Dashing (4)

animate-dash-in-startanimate-dash-in-endanimate-dash-out-startanimate-dash-out-end

📜 Scroll Animations (NEW in v2.0)

Animate elements based on their scroll position in the viewport.

View Timelines

<!-- Animate when element enters viewport -->
<div class="timeline-view animate-fade-in">...</div>

<!-- Animate on horizontal scroll -->
<div class="timeline-view-x animate-slide-in-start">...</div>

<!-- Animate on vertical scroll -->
<div class="timeline-view-y animate-fade-in-up">...</div>

Animation Ranges

Control when animations play during scroll:

<!-- Play when entering viewport -->
<div class="timeline-view animate-zoom-in animate-range-entry">...</div>

<!-- Play when leaving viewport -->
<div class="timeline-view animate-fade-out animate-range-exit">...</div>

<!-- Play while in viewport -->
<div class="timeline-view animate-rotate-360 animate-range-cover">...</div>

<!-- Preset ranges -->
<div class="timeline-view animate-fade-in animate-range-gradual">...</div>
<!-- gradual (10%-90%) | moderate (20%-80%) | brisk (30%-70%) | rapid (40%-60%) -->

Arbitrary Range Values

<div class="timeline-view animate-fade-in animate-range-[entry_10%_cover_50%]">
  Custom range
</div>

Browser Support for Scroll Animations

Scroll animations require:

  • Chrome/Edge: 115+
  • Safari: 17.4+
  • Firefox: Coming soon (currently in development)

🎛️ Control Utilities

Duration

<div class="animate-fade-in animate-duration-500">Fast fade</div>
<div class="animate-bounce animate-duration-[2s]">Slow bounce</div>

Delay

<div class="animate-fade-in animate-delay-[1s]">Delayed entrance</div>

Iteration Count

<div class="animate-pulse animate-infinite">Never stops</div>
<div class="animate-bounce animate-twice">Bounce twice</div>
<div class="animate-shake-x animate-iteration-5">Shake 5 times</div>

Direction

<div class="animate-spin animate-reverse">Reverse spin</div>
<div class="animate-wiggle animate-alternate animate-infinite">
  Back and forth
</div>

Fill Mode

<div class="animate-fade-in animate-fill-both">Maintains final state</div>

Timing Functions

<div class="animate-bounce animate-ease-in-out">Smooth bounce</div>
<div class="animate-fade-in animate-ease-linear">Linear fade</div>

Play State

<div class="animate-spin animate-pause hover:animate-play">Spin on hover</div>

🎨 CSS Custom Properties

Customize animations globally:

:root {
  --default-animation-duration: 0.5s;
  --default-animation-delay: 0s;
  --default-animation-timing-function: ease-in-out;
}

/* Theme-specific customization */
.dark {
  --default-animation-duration: 0.8s;
}

💡 Advanced Usage

Hover Animations

<button class="hover:animate-wiggle hover:animate-infinite">
  Hover to wiggle
</button>

Responsive Animations

<div class="animate-bounce md:animate-fade-in lg:animate-none">
  Responsive animation
</div>

Combining Utilities

<div
  class="animate-fade-in animate-duration-[2s] animate-delay-500 animate-ease-in-out"
>
  Smooth, delayed fade in
</div>

📚 Documentation

🔄 Migration from @iscodex/tailwindcss-animate

The package was renamed to tw-animations (v4) and tw-animations-plugin (v3). The old scoped package @iscodex/tailwindcss-animate remains on npm but is deprecated.

To migrate:

  • Tailwind v4: Replace @iscodex/tailwindcss-animate with tw-animations in your package.json, then update your CSS import to @import "tw-animations";.
  • Tailwind v3: Replace with tw-animations-plugin and use require("tw-animations-plugin") in your config.

Class names and behavior are the same; only the package name and import path change.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

MIT License - see LICENSE file for details.

🙏 Credits

Created with ❤️ by alckordev

📝 Changelog

See CHANGELOG for version history and changes.


⭐ If you find this useful, please consider giving it a star on GitHub!

About

Extended animation utilities for Tailwind CSS

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages