greensock/GSAP · warning
Please gsap.registerPlugin(CustomEase, CustomBounce)
Error message
Please gsap.registerPlugin(CustomEase, CustomBounce)
What it means
CustomBounce builds on CustomEase: _initCore looks for gsap.parseEase("_CE"), which only exists after CustomEase is registered. If CustomEase (or gsap itself) is missing when CustomBounce is created/registered, it warns that both plugins must be registered. `required` gates the warning so passive registration doesn't spam.
Source
Thrown at src/CustomBounce.js:20
* CustomBounce 3.15.0
* https://gsap.com
*
* @license Copyright 2008-2026, GreenSock. All rights reserved.
* Subject to the terms at https://gsap.com/standard-license
* @author: Jack Doyle, jack@greensock.com
*/
/* eslint-disable */
let gsap, _coreInitted, createCustomEase,
_getGSAP = () => gsap || (typeof(window) !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap),
_initCore = required => {
gsap = _getGSAP();
createCustomEase = gsap && gsap.parseEase("_CE");
if (createCustomEase) {
_coreInitted = 1;
gsap.parseEase("bounce").config = vars => typeof(vars) === "object" ? _create("", vars) : _create("bounce(" + vars + ")", {strength:+vars});
} else {
required && console.warn("Please gsap.registerPlugin(CustomEase, CustomBounce)");
}
},
_normalizeX = a => { //scales all the x values in an array [x, y, x, y...] AND rounds them to the closest hundredth (decimal)
let l = a.length,
s = 1 / a[l - 2],
rnd = 1000,
i;
for (i = 2; i < l; i += 2) {
a[i] = ~~(a[i] * s * rnd) / rnd;
}
a[l - 2] = 1; //in case there are any rounding errors. x should always end at 1.
},
_bonusValidated = 1, //<name>CustomBounce</name>
_create = (id, vars) => {
if (!_coreInitted) {
_initCore(1);
}
vars = vars || {};View on GitHub (pinned to 13e2b79054)
Solutions
- Call gsap.registerPlugin(CustomEase, CustomBounce) before using bounce eases
- Import both: `import { gsap, CustomEase, CustomBounce } from 'gsap/all'`
- Confirm the gsap instance is the same one registered (single bundle copy)
- If easing isn't needed yet, the warning is gated by `required` — ensure registration happens before first _create
Example fix
// before
gsap.registerPlugin(CustomBounce);
gsap.to('.el', {ease: CustomBounce.create('bounce', {strength: 0.5})});
// after
gsap.registerPlugin(CustomEase, CustomBounce);
gsap.to('.el', {ease: CustomBounce.create('bounce', {strength: 0.5})}); Defensive patterns
Strategy: validation
Validate before calling
if (!gsap || typeof gsap.parseEase('_CE') !== 'function') {
gsap.registerPlugin(CustomEase, CustomBounce);
} Type guard
function customBounceReady() {
return typeof gsap.parseEase === 'function' && typeof gsap.parseEase('_CE') === 'function';
} Prevention
- Register CustomEase before CustomBounce (hard dependency)
- Import both plugins from one gsap package
- Run registration at module init, before any ease creation
- Tree-shake-proof: import CustomEase explicitly
When it happens
Trigger: Creating a bounce ease (gsap.parseEase("bounce(...)") config or CustomBounce.create) before gsap.registerPlugin(CustomEase, CustomBounce); or CustomEase not imported at all; or gsap not found on window.
Common situations: Registering only CustomBounce and forgetting CustomEase is a hard dependency; tree-shaking removed CustomEase; module import from wrong path so CustomEase never registers.
Related errors
- Please gsap.registerPlugin(CustomEase)
- Please gsap.registerPlugin(CustomEase, CustomWiggle)
- Please gsap.registerPlugin(CSSPlugin, CSSRulePlugin)
- Please gsap.registerPlugin(Draggable)
- Please gsap.registerPlugin(GSDevTools)
AI-assisted analysis of greensock/GSAP@13e2b79054 (2026-08-29).
Data as JSON: /api/errors/884394216b5622cb.
Report an issue: GitHub.