Extended animation utilities for Tailwind CSS v4 and v3. 85+ animations, scroll timelines, and view animations with zero configuration.
Website β’ Configurator β’ GitHub
- 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
This monorepo contains two packages:
| Package | Version | Description |
|---|---|---|
tw-animations |
For Tailwind CSS v4 (CSS-only) | |
tw-animations-plugin |
For Tailwind CSS v3 (Plugin) |
npm install tw-animationsAdd the import to your CSS file:
@import "tailwindcss";
@import "tw-animations";npm install tw-animations-pluginAdd the plugin to your Tailwind configuration:
// tailwind.config.js
module.exports = {
plugins: [require("tw-animations-plugin")],
};<div class="animate-fade-in">Hello World!</div><button class="animate-bounce animate-infinite animate-duration-[2s]">
Click me
</button><div class="timeline-view animate-fade-in-up animate-range-entry">
Appears when entering viewport
</div>animate-flash β’ animate-head-shake β’ animate-heart-beat β’ animate-jelly β’ animate-rubber-band β’ animate-shake-x β’ animate-shake-y β’ animate-swing β’ animate-tada β’ animate-wiggle β’ animate-wobble β’ animate-float β’ animate-spin β’ animate-ping β’ animate-pulse β’ animate-bounce
animate-blurred-fade-in β’ animate-blink β’ animate-dancing β’ animate-jiggle β’ animate-pop β’ animate-rotate-360 β’ animate-rotate-180 β’ animate-rotate-90 β’ animate-expand-horizontally β’ animate-expand-vertically β’ animate-bounce-fade-in β’ animate-pulse-fade-in
animate-fade-in β’ animate-fade-in-down β’ animate-fade-in-start β’ animate-fade-in-end β’ animate-fade-in-up
animate-fade-out β’ animate-fade-out-down β’ animate-fade-out-start β’ animate-fade-out-end β’ animate-fade-out-up
animate-slide-in-down β’ animate-slide-in-start β’ animate-slide-in-end β’ animate-slide-in-up β’ animate-slide-out-down β’ animate-slide-out-start β’ animate-slide-out-end β’ animate-slide-out-up
animate-zoom-in β’ animate-zoom-in-down β’ animate-zoom-in-start β’ animate-zoom-in-end β’ animate-zoom-in-up β’ animate-zoom-out β’ animate-zoom-out-down β’ animate-zoom-out-start β’ animate-zoom-out-end β’ animate-zoom-out-up
animate-bounce-in β’ animate-bounce-in-down β’ animate-bounce-in-start β’ animate-bounce-in-end β’ animate-bounce-in-up β’ animate-bounce-out β’ animate-bounce-out-down β’ animate-bounce-out-start β’ animate-bounce-out-end β’ animate-bounce-out-up
animate-rotate-in β’ animate-rotate-in-down-start β’ animate-rotate-in-down-end β’ animate-rotate-in-up-start β’ animate-rotate-in-up-end β’ animate-rotate-out β’ animate-rotate-out-down-start β’ animate-rotate-out-down-end β’ animate-rotate-out-up-start β’ animate-rotate-out-up-end
animate-back-in-down β’ animate-back-in-start β’ animate-back-in-end β’ animate-back-in-up β’ animate-back-out-down β’ animate-back-out-start β’ animate-back-out-end β’ animate-back-out-up
animate-flip β’ animate-flip-in-x β’ animate-flip-in-y β’ animate-flip-out-x β’ animate-flip-out-y
animate-hinge β’ animate-jack-in β’ animate-jack-out β’ animate-roll-in β’ animate-roll-out β’ animate-particle
animate-dash-in-start β’ animate-dash-in-end β’ animate-dash-out-start β’ animate-dash-out-end
Animate elements based on their scroll position in the viewport.
<!-- 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>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%) --><div class="timeline-view animate-fade-in animate-range-[entry_10%_cover_50%]">
Custom range
</div>Scroll animations require:
- Chrome/Edge: 115+
- Safari: 17.4+
- Firefox: Coming soon (currently in development)
<div class="animate-fade-in animate-duration-500">Fast fade</div>
<div class="animate-bounce animate-duration-[2s]">Slow bounce</div><div class="animate-fade-in animate-delay-[1s]">Delayed entrance</div><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><div class="animate-spin animate-reverse">Reverse spin</div>
<div class="animate-wiggle animate-alternate animate-infinite">
Back and forth
</div><div class="animate-fade-in animate-fill-both">Maintains final state</div><div class="animate-bounce animate-ease-in-out">Smooth bounce</div>
<div class="animate-fade-in animate-ease-linear">Linear fade</div><div class="animate-spin animate-pause hover:animate-play">Spin on hover</div>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;
}<button class="hover:animate-wiggle hover:animate-infinite">
Hover to wiggle
</button><div class="animate-bounce md:animate-fade-in lg:animate-none">
Responsive animation
</div><div
class="animate-fade-in animate-duration-[2s] animate-delay-500 animate-ease-in-out"
>
Smooth, delayed fade in
</div>- Website & Interactive Demos
- Animation Configurator
- GitHub Repository
- npm Package (v4)
- npm Package (v3)
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-animatewithtw-animationsin yourpackage.json, then update your CSS import to@import "tw-animations";. - Tailwind v3: Replace with
tw-animations-pluginand userequire("tw-animations-plugin")in your config.
Class names and behavior are the same; only the package name and import path change.
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details.
Created with β€οΈ by alckordev
See CHANGELOG for version history and changes.
β If you find this useful, please consider giving it a star on GitHub!
