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.
npx skills add greensock/gsap-skills --skill gsap-performance -a claude-codeWhat 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/toptox/y - apply
will-changeonly to elements that animate - cut ScrollTrigger work on a long scrolling page
- replace dozens of tweens with
staggerandquickTo()
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-code2Manually: put the files in place
~/.claude/skills/gsap-performance/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/gsap-performance/
1Skills CLI (Vercel)
npx skills add greensock/gsap-skills --skill gsap-performance -a codex2Manually: put the files in place
.agents/skills/gsap-performance/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add greensock/gsap-skills --skill gsap-performance -a cursor2Manually: put the files in place
.cursor/skills/gsap-performance/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install greensock/gsap-skills gsap-performance2Manually: put the files in place
.github/skills/gsap-performance/SKILL.md1Skills CLI (Vercel)
npx skills add greensock/gsap-skills --skill gsap-performance -a gemini-cli2Platform CLI
gemini skills install https://github.com/greensock/gsap-skills --path skills/gsap-performanceManually: put the files in place
.devin/skills/gsap-performance/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add greensock/gsap-skills --skill gsap-performance -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set8
The whole set →Similar
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