
Gsap Timeline
Sequence and choreograph multi-step GSAP animations with timelines, labels, and position parameters instead of loose chained tweens.
Overview
GSAP Timeline is an agent skill for the Build phase that teaches gsap.timeline(), position parameters, nesting, and playback for sequencing GSAP animations.
Install
npx skills add https://github.com/greensock/gsap-skills --skill gsap-timelineWhat is this skill?
- Create gsap.timeline() and chain .to() steps with default sequential append behavior
- Position parameter: absolute times, +=/-= relative offsets, labels, and < / > placement vs prior tween
- Nest timelines and control playback (play, pause, reverse, timeScale) for staged reveals
- Coordinate parallel and overlapping tweens without manual delay math
- Chains to gsap-core for eases, gsap-scrolltrigger for scroll-driven sequences, gsap-react for React
Adoption & trust: 19.9k installs on skills.sh; 8.5k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have several GSAP tweens with fragile delay chains and no clear way to overlap, label, or rewind the whole sequence.
Who is it for?
Builders creating multi-step UI reveals, onboarding flows, or branded motion systems that need one timeline API instead of ad-hoc delays.
Skip if: One-off single-property tweens with no sequencing (use gsap-core) or teams standardizing on CSS-only @keyframes with no GSAP.
When should I use this skill?
Sequencing animations, choreographing keyframes, or when the user asks about animation sequencing, timelines, or animation order in GSAP.
What do I get? / Deliverables
You define one master timeline with explicit positions and labels, enabling reusable playback control—then attach gsap-scrolltrigger or gsap-react if the scene is scroll- or React-driven.
- gsap.timeline() structure with position parameters
- Label map for scene beats
- Playback control hooks (timeScale, pause, reverse)
Recommended Skills
Journey fit
How it compares
Sequencing orchestration for GSAP, not Framer Motion layout animations or a video keyframe export tool.
Common Questions / FAQ
Who is gsap-timeline for?
Frontend-focused solo builders and agents recommending GSAP who need official guidance on timelines, labels, and tween order.
When should I use gsap-timeline?
During Build frontend work when coordinating multi-step animations, parallel tweens, or keyed choreography in GSAP.
Is gsap-timeline safe to install?
It is instructional SKILL.md content; confirm repo trust via the Security Audits panel on this page before installing skills in your agent environment.
Workflow Chain
Requires first: gsap core
Then invoke: gsap scrolltrigger, gsap react
SKILL.md
READMESKILL.md - Gsap Timeline
# GSAP Timeline ## When to Use This Skill Apply when building multi-step animations, coordinating several tweens in sequence or parallel, or when the user asks about timelines, sequencing, or keyframe-style animation in GSAP. **Related skills:** For single tweens and eases use **gsap-core**; for scroll-driven timelines use **gsap-scrolltrigger**; for React use **gsap-react**. ## Creating a Timeline ```javascript const tl = gsap.timeline(); tl.to(".a", { x: 100, duration: 1 }) .to(".b", { y: 50, duration: 0.5 }) .to(".c", { opacity: 0, duration: 0.3 }); ``` By default, tweens are **appended** one after another. Use the **position parameter** to place tweens at specific times or relative to other tweens. ## Position Parameter Third argument (or position property in vars) controls placement: - **Absolute**: `1` — start at 1 second. - **Relative (default)**: `"+=0.5"` — 0.5s after end; `"-=0.2"` — 0.2s before end. - **Label**: `"labelName"` — at that label; `"labelName+=0.3"` — 0.3s after label. - **Placement**: `"<"` — start when recently-added animation starts; `">"` — start when recently-added animation ends (default); `"<0.2"` — 0.2s after recently-added animation start. Examples: ```javascript tl.to(".a", { x: 100 }, 0); // at 0 tl.to(".b", { y: 50 }, "+=0.5"); // 0.5s after last end tl.to(".c", { opacity: 0 }, "<"); // same start as previous tl.to(".d", { scale: 2 }, "<0.2"); // 0.2s after previous start ``` ## Timeline Defaults Pass defaults into the timeline so all child tweens inherit: ```javascript const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } }); tl.to(".a", { x: 100 }).to(".b", { y: 50 }); // both use 0.5s and power2.out ``` ## Timeline Options (constructor) - **paused: true** — create paused; call `.play()` to start. - **repeat**, **yoyo** — same as tweens; apply to whole timeline. - **onComplete**, **onStart**, **onUpdate** — timeline-level callbacks. - **defaults** — vars merged into every child tween. ## Labels Add and use labels for readable, maintainable sequencing: ```javascript tl.addLabel("intro", 0); tl.to(".a", { x: 100 }, "intro"); tl.addLabel("outro", "+=0.5"); tl.to(".b", { opacity: 0 }, "outro"); tl.play("outro"); // start from "outro" tl.tweenFromTo("intro", "outro"); // pauses the timeline and returns a new Tween that animates the timeline's playhead from intro to outro with no ease. ``` ## Nesting Timelines Timelines can contain other timelines. ```javascript const master = gsap.timeline(); const child = gsap.timeline(); child.to(".a", { x: 100 }).to(".b", { y: 50 }); master.add(child, 0); master.to(".c", { opacity: 0 }, "+=0.2"); ``` ## Controlling Playback - **tl.play()** / **tl.pause()** - **tl.reverse()** / **tl.progress(1)** then **tl.reverse()** - **tl.restart()** — from start. - **tl.time(2)** — seek to 2 seconds. - **tl.progress(0.5)** — seek to 50%. - **tl.kill()** — kill timeline and (by default) its children. ## Official GSAP Best practices - ✅ Prefer timelines for sequencing - ✅ Use the **position parameter** (third argument) to place tweens at specific times or relative to labels. - ✅ Add **labels** with `addLabel()` for readable, maintainable sequencing. - ✅ Pass **defaults** into the timeline constructor so child tweens inherit duration, ease, etc. - ✅ Put ScrollTrigger on the timeline (or top-level tween), not on tweens inside a timeline. ## Do Not - ❌ Chain animations with **delay** when a **timeline** can sequence them; prefer `gsap.timeline()` and the position parameter for multi-step animation. - ❌ Forget to pass **defaults** (e.g. `defaults: { duration: