Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

gsap-performance — Claude skill for faster GSAP animations

An official GSAP performance skill that tells your coding agent which properties to animate and which ones cause jank. Useful when animations stutter.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add greensock/gsap-skills --skill gsap-performance -a claude-code
Open on GitHub

What gsap-performance does

The skill lays out rules that keep GSAP animations smooth. The core one: move elements with transform (x, y, scale, rotation) and opacity instead of width, height, top, left, margin or padding. The first group stays on the compositor; the second triggers layout work and drops frames.

Inside you get guidance plus code samples. will-change: transform in CSS only on elements that actually animate. For properties updated often, like a mouse follower, it points to gsap.quickTo(): one reused tween instead of a new one per event. For lists, stagger beats dozens of separate tweens with manual delays.

There is a ScrollTrigger section too. pin: true promotes the pinned element, a small scrub value cuts work during scroll, and ScrollTrigger.refresh() belongs only where layout really changed. The skill links to related ones: gsap-core, gsap-timeline, gsap-scrolltrigger. Install it if your project already uses GSAP and you see frame drops. For a couple of simple tweens, the rules are easy enough to remember without it.

What it helps with

  • stop stutter in list and card animations
  • switch element movement from left/top to x/y
  • apply will-change only to elements that animate
  • cut ScrollTrigger work on a long scrolling page
  • replace dozens of tweens with stagger and quickTo()

Example prompts for the agent

  • optimize this GSAP animation, FPS drops on low-end devices
  • rewrite the card movement from `left`/`top` to `x`/`y`
  • why does my ScrollTrigger scroll feel janky and how do I fix it

How to install gsap-performance

1Skills CLI (Vercel)

npx skills add greensock/gsap-skills --skill gsap-performance -a claude-code

2Manually: put the files in place

~/.claude/skills/gsap-performance/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/gsap-performance/

From the same set8

The whole set →

Similar

stitch::react-components official google-labs-code Turns Stitch designs into modular Vite and React components. Can also sync existing components with updated Stitch designs. Claude Code CX Codex Cursor +1 50,400installs remotion-upgrade remotion-dev Upgrades Remotion and related dependencies to the latest stable release. It keeps package versions synchronized and updates project skills automatically. Claude Code CX Codex Cursor +1 186,800installs frontend-design official anthropics This skill guides intentional visual design for new interfaces and redesigns. Use it when a generic generated UI is not enough. Claude Code Claude.ai 1,025,790installs design-taste-frontend Leonxlnx This skill directs the design of public pages and work screens, then checks the result in a browser through screenshots. Use it when an interface feels generic or unfinished. Claude Code CX Codex Cursor +1 673,100installs prototype Matt Pocock Creates throwaway prototypes for checking state logic or exploring UI before committing the decision to the main codebase. Claude Code 986,201installs hyperframes heygen-com Instructs coding agents on creating, validating, and rendering HTML-based videos using the HyperFrames framework and CLI. Claude Code CX Codex Cursor +1 1,200,000installs hyperframes-cli heygen-com Controls HyperFrames video workflows from the CLI: audits layouts and contrast, edits timeline clips, captures snapshots, and renders locally or in cloud runtimes. Claude Code CX Codex Cursor +1 1,200,000installs webapp-testing official anthropics This skill tests local web apps with Playwright, helping agents debug UI behavior, capture screenshots, and inspect browser logs. Claude Code Claude.ai 186,758installs

Questions about gsap-performance

How do I install gsap-performance in Claude?

Run npx skills add greensock/gsap-skills --skill gsap-performance -a claude-code. The skill lands at ~/.claude/skills/gsap-performance/SKILL.md.

What does gsap-performance do?

It gives the agent GSAP performance rules: animate transform and opacity, avoid layout properties, batch reads and writes, and clean up off-screen animations.

Which GSAP skills does it work with?

It references gsap-core and gsap-timeline for building animations, and gsap-scrolltrigger for scroll work.

Source text

SKILL.md · MIT
---
name: gsap-performance
description: Official GSAP skill for performance — prefer transforms, avoid layout thrashing, will-change, batching. Use when optimizing GSAP animations, reducing jank, or when the user asks about animation performance, FPS, or smooth 60fps.
license: MIT
---

# GSAP Performance

## When to Use This Skill

Apply when optimizing GSAP animations for smooth 60fps, reducing layout/paint cost, or when the user asks about performance, jank, or best practices for fast animations.

**Related skills:** Build animations with **gsap-core** (transforms, autoAlpha) and **gsap-timeline**; for ScrollTrigger performance see **gsap-scrolltrigger**.

## Prefer Transform and Opacity

Animating **transform** (`x`, `y`, `scaleX`, `scaleY`, `rotation`, `rotationX`, `rotationY`, `skewX`, `skewY`) and **opacity** keeps work on the compositor and avoids layout and most paint. Avoid animating layout-heavy properties when a transform can achieve the same effect.

- ✅ Prefer: **x**, **y**, **scale**, **rotation**, **opacity**.
- ❌ Avoid when possible: **width**, **height**, **top**, **left**, **margin**, **padding** (they trigger layout and can cause jank).

GSAP’s **x** and **y** use transforms (translate) by default; use them instead of **left**/**top** for movement.

## will-change

Use **will-change** in CSS on elements that will animate. It hints the browser to promote the layer.

```css
will-change: transform;
```

## Batch Reads and Writes

GSAP batches updates internally. When mixing GSAP with direct DOM reads/writes or layout-dependent code, avoid interleaving reads and writes in a way that causes repeated layout thrashing. Prefer doing all reads first, then all writes (or let GSAP handle the writes in one go).

## Many Elements (Stagger, Lists)

- Use **stagger** instead of many separate tweens with manual delays when the animation is the same; it’s more efficient.
- For long lists, consider **virtualization** or animating only visible items; avoid creating hundreds of simultaneous tweens if it causes jank.
- Reuse timelines where possible; avoid creating new timelines every frame.

## Frequently updated properties (e.g. mouse followers)

Prefer **gsap.quickTo()** for properties that are updated often (e.g. mouse-follower x/y). It reuses a single tween instead of creating new tweens on each update. 

```javascript
let xTo = gsap.quickTo("#id", "x", { duration: 0.4, ease: "power3" }),
    yTo = gsap.quickTo("#id", "y", { duration: 0.4, ease: "power3" });

document.querySelector("#container").addEventListener("mousemove", (e) => {
  xTo(e.pageX);
  yTo(e.pageY);
});
```

## ScrollTrigger and Performance

- **pin: true** promotes the pinned element; pin only what’s needed.
- **scrub** with a small value (e.g. `scrub: 1`) can reduce work during scroll; test on low-end devices.
- Call **ScrollTrigger.refresh()** only when layout actually changes (e.g. after content load), not on every resize; debounce when possible.

## Reduce Simultaneous Work

- Pause or kill off-screen or inactive animations when they’re not visible (e.g. when the user navigates away).
- Avoid animating huge numbers of properties on many elements at once; simplify or sequence if needed.

## Best practices

- ✅ Animate **transform** and **opacity**; use **will-change** in CSS only on elements that animate.
- ✅ Use **stagger** instead of many separate tweens with manual delays when the animation is the same.
- ✅ Use **gsap.quickTo()** for frequently updated properties (e.g. mouse followers).
- ✅ Clean up or kill off-screen animations; call **ScrollTrigger.refresh()** when layout changes, debounced when possible.

## Do Not

- ❌ Animate **width**/ **height**/ **top**/ **left** for movement when **x**/ **y**/ **scale** can achieve the same look.
- ❌ Set **will-change** or **force3D** on every element “just in case”; use for elements that are actually animating.
- ❌ Create hundreds of overlapping tweens or ScrollTriggers without testing on low-end devices.
- ❌ Ignore cleanup; stray tweens and ScrollTriggers keep running and can hurt performance and correctness.

© greensock · MIT · greensock/gsap-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor