mcpbeat Sign in

Auto Animate Skill for Claude

AutoAnimate (@formkit/auto-animate) zero-config animations for React. Use for list transitions, accordions, toasts, or encountering SSR errors, animation libraries complexity.

21k tokens
context cost
the whole folder, loaded on every use
15
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
202
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/secondsky/claude-skills --skill auto-animate

The instruction itself

39 sections, as written by the author

AutoAnimate

Status: Production Ready ✅

Last Updated: 2025-11-07

Dependencies: None (works with any React setup)

Latest Versions: @formkit/[email protected]


Quick Start (2 Minutes)

1. Install AutoAnimate

bun add @formkit/auto-animate

Why this matters:

  • Only 3.28 KB gzipped (vs 22 KB for Motion)
  • Zero dependencies
  • Framework-agnostic (React, Vue, Svelte, vanilla JS)

2. Add to Your Component

import { useAutoAnimate } from "@formkit/auto-animate/react";

export function MyList() {
  const [parent] = useAutoAnimate(); // 1. Get ref

  return (
    <ul ref={parent}> {/* 2. Attach to parent */}
      {items.map(item => (
        <li key={item.id}>{item.text}</li> {/* 3. That's it! */}
      ))}
    </ul>
  );
}

CRITICAL:

  • ✅ Always use unique, stable keys for list items
  • ✅ Parent element must always be rendered (not conditional)
  • ✅ AutoAnimate respects prefers-reduced-motion automatically
  • ✅ Works on add, remove, AND reorder operations

3. Use in Production (SSR-Safe)

For Cloudflare Workers or Next.js:

// Use client-only import to prevent SSR errors
import { useState, useEffect } from "react";

export function useAutoAnimateSafe<T extends HTMLElement>() {
  const [parent, setParent] = useState<T | null>(null);

  useEffect(() => {
    if (typeof window !== "undefined" && parent) {
      import("@formkit/auto-animate").then(({ default: autoAnimate }) => {
        autoAnimate(parent);
      });
    }
  }, [parent]);

  return [parent, setParent] as const;
}

Known Issues Prevention

This skill prevents 10+ documented issues:

Issue #1: SSR/Next.js Import Errors

Error: "Can't import the named export 'useEffect' from non EcmaScript module"

Source: https://github.com/formkit/auto-animate/issues/55

Why It Happens: AutoAnimate uses DOM APIs not available on server

Prevention: Use dynamic imports (see templates/vite-ssr-safe.tsx)

Issue #2: Conditional Parent Rendering

Error: Animations don't work when parent is conditional

Source: https://github.com/formkit/auto-animate/issues/8

Why It Happens: Ref can't attach to non-existent element

Prevention:

// ❌ Wrong
{showList && <ul ref={parent}>...</ul>}

// ✅ Correct
<ul ref={parent}>{showList && items.map(...)}</ul>

Issue #3: Missing Unique Keys

Error: Items don't animate correctly or flash

Source: Official docs

Why It Happens: React can't track which items changed

Prevention: Always use unique, stable keys (key={item.id})

Issue #4: Flexbox Width Issues

Error: Elements snap to width instead of animating smoothly

Source: Official docs

Why It Happens: flex-grow: 1 waits for surrounding content

Prevention: Use explicit width instead of flex-grow for animated elements

Issue #5: Table Row Display Issues

Error: Table structure breaks when removing rows

Source: https://github.com/formkit/auto-animate/issues/7

Why It Happens: Display: table-row conflicts with animations

Prevention: Apply to <tbody> instead of individual rows, or use div-based layouts

Issue #6: Jest Testing Errors

Error: "Cannot find module '@formkit/auto-animate/react'"

Source: https://github.com/formkit/auto-animate/issues/29

Why It Happens: Jest doesn't resolve ESM exports correctly

Prevention: Configure moduleNameMapper in jest.config.js

Issue #7: esbuild Compatibility

Error: "Path '.' not exported by package"

Source: https://github.com/formkit/auto-animate/issues/36

Why It Happens: ESM/CommonJS condition mismatch

Prevention: Configure esbuild to handle ESM modules properly

Issue #8: CSS Position Side Effects

Error: Layout breaks after adding AutoAnimate

Source: Official docs

Why It Happens: Parent automatically gets position: relative

Prevention: Account for position change in CSS or set explicitly

Issue #9: Vue/Nuxt Registration Errors

Error: "Failed to resolve directive: auto-animate"

Source: https://github.com/formkit/auto-animate/issues/43

Why It Happens: Plugin not registered correctly

Prevention: Proper plugin setup in Vue/Nuxt config (see references/)

Issue #10: Angular ESM Issues

Error: Build fails with "ESM-only package"

Source: https://github.com/formkit/auto-animate/issues/72

Why It Happens: CommonJS build environment

Prevention: Configure ng-packagr for Angular Package Format


When to Use AutoAnimate vs Motion

Use AutoAnimate When:

  • ✅ Simple list transitions (add/remove/sort)
  • ✅ Accordion expand/collapse
  • ✅ Toast notifications fade in/out
  • ✅ Form validation messages appear/disappear
  • ✅ Zero configuration preferred
  • ✅ Small bundle size critical (3.28 KB)
  • ✅ Applying to existing/3rd-party code
  • ✅ "Good enough" animations acceptable

Use Motion When:

  • ✅ Complex choreographed animations
  • ✅ Gesture controls (drag, swipe, hover)
  • ✅ Scroll-based animations
  • ✅ Spring physics animations
  • ✅ SVG path animations
  • ✅ Keyframe control needed
  • ✅ Animation variants/orchestration
  • ✅ Custom easing curves

Rule of Thumb: Use AutoAnimate for 90% of cases, Motion for hero/interactive animations.


Critical Rules

Always Do

Use unique, stable keys - key={item.id} not key={index}

Keep parent in DOM - Parent ref element always rendered

Client-only for SSR - Dynamic import for server environments

Respect accessibility - Keep disrespectUserMotionPreference: false

Test with motion disabled - Verify UI works without animations

Use explicit width - Avoid flex-grow on animated elements

Apply to tbody for tables - Not individual rows

Never Do

Conditional parent - {show && <ul ref={parent}>}

Index as key - key={index} breaks animations

Ignore SSR - Will break in Cloudflare Workers/Next.js

Force animations - disrespectUserMotionPreference: true breaks accessibility

Animate tables directly - Use tbody or div-based layout

Skip unique keys - Required for proper animation

Complex animations - Use Motion instead


Configuration

AutoAnimate is zero-config by default. Optional customization:

import { useAutoAnimate } from "@formkit/auto-animate/react";

const [parent] = useAutoAnimate({
  duration: 250, // milliseconds (default: 250)
  easing: "ease-in-out", // CSS easing (default: "ease-in-out")
  // disrespectUserMotionPreference: false, // Keep false!
});

Recommendation: Use defaults unless you have specific design requirements.


Using Bundled Resources

Templates (templates/)

Copy-paste ready examples:

  • react-basic.tsx - Simple list with add/remove/shuffle
  • react-typescript.tsx - Typed setup with custom config
  • filter-sort-list.tsx - Animated filtering and sorting
  • accordion.tsx - Expandable sections
  • toast-notifications.tsx - Fade in/out messages
  • form-validation.tsx - Error messages animation
  • vite-ssr-safe.tsx - Cloudflare Workers/SSR pattern

References (references/)

  • auto-animate-vs-motion.md - Decision guide for which to use
  • css-conflicts.md - Flexbox, table, and position gotchas
  • ssr-patterns.md - Next.js, Nuxt, Workers workarounds

Scripts (scripts/)

  • init-auto-animate.sh - Automated setup script

Cloudflare Workers Compatibility

AutoAnimate works perfectly with Cloudflare Workers Static Assets:

Client-side only - Runs in browser, not Worker runtime

No Node.js deps - Pure browser code

Edge-friendly - 3.28 KB gzipped

SSR-safe - Use dynamic imports (see templates/)

Vite Config:

export default defineConfig({
  plugins: [react(), cloudflare()],
  ssr: {
    external: ["@formkit/auto-animate"],
  },
});

Accessibility

AutoAnimate respects prefers-reduced-motion automatically:

/* User's system preference */
@media (prefers-reduced-motion: reduce) {
  /* AutoAnimate disables animations automatically */
}

Critical: Never set disrespectUserMotionPreference: true - this breaks accessibility.


Official Documentation

  • Official Site: https://auto-animate.formkit.com
  • GitHub: https://github.com/formkit/auto-animate
  • npm: https://www.npmjs.com/package/@formkit/auto-animate
  • React Docs: https://auto-animate.formkit.com/react
  • Video Tutorial: Laracasts video (see README)

Package Versions (Verified 2025-11-07)

{
  "dependencies": {
    "@formkit/auto-animate": "^0.9.0"
  },
  "devDependencies": {
    "react": "^19.2.0",
    "vite": "^6.0.0"
  }
}

Production Example

This skill is based on production testing:

  • Bundle Size: 3.28 KB gzipped
  • Setup Time: 2 minutes (vs 15 min with Motion)
  • Errors: 0 (all 10 known issues prevented)
  • Validation: ✅ Works with Vite, Tailwind v4, Cloudflare Workers, React 19

Tested Scenarios:

  • ✅ Filter/sort lists
  • ✅ Accordion components
  • ✅ Toast notifications
  • ✅ Form validation messages
  • ✅ SSR/Cloudflare Workers
  • ✅ Accessibility (prefers-reduced-motion)

Troubleshooting

Problem: Animations not working

Solution: Check these common issues:

  • Is parent element always in DOM? (not conditional)
  • Do items have unique, stable keys?
  • Is ref attached to immediate parent of animated children?

Problem: SSR/Next.js errors

Solution: Use dynamic import:

useEffect(() => {
  if (typeof window !== "undefined") {
    import("@formkit/auto-animate").then(({ default: autoAnimate }) => {
      autoAnimate(parent);
    });
  }
}, [parent]);

Problem: Items flash instead of animating

Solution: Add unique keys: key={item.id} not key={index}

Problem: Flexbox width issues

Solution: Use explicit width instead of flex-grow: 1

Problem: Table rows don't animate

Solution: Apply ref to <tbody>, not individual <tr> elements


Complete Setup Checklist

  • [ ] Installed @formkit/[email protected]
  • [ ] Using React 19+ (or Vue/Svelte)
  • [ ] Added ref to parent element
  • [ ] Parent element always rendered (not conditional)
  • [ ] List items have unique, stable keys
  • [ ] Tested with prefers-reduced-motion
  • [ ] SSR-safe if using Cloudflare Workers/Next.js
  • [ ] No flexbox width issues
  • [ ] Dev server runs without errors
  • [ ] Production build succeeds

Questions? Issues?

  • Check templates/ for working examples
  • Check references/auto-animate-vs-motion.md for library comparison
  • Check references/ssr-patterns.md for SSR workarounds
  • Check official docs: https://auto-animate.formkit.com
  • Check GitHub issues: https://github.com/formkit/auto-animate/issues

Production Ready? ✅ Yes - 13.6k stars, actively maintained, zero dependencies.

Other skills for the same job

different authors, same section of the catalogue
MCP Builder
by anthropics
vendor ×13

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

30k tokens scripts
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
MCP Builder
by JayZeeDesign
×7

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

37k tokens scripts
Vercel React Native Skills
by vercel-labs
vendor ×6

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

39k tokens
Vercel React Best Practices
by ratacat
×5

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

34k tokens
Next Best Practices
by vercel-labs
vendor ×4

Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

20k tokens
Using Git Worktrees
by ZhanlinCui
×4

Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification

1k tokens

How to use it

Copy the folder

Take secondsky/auto-animate from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.