greensock/GSAP · warning
Please gsap.registerPlugin(CustomEase, CustomWiggle)
Error message
Please gsap.registerPlugin(CustomEase, CustomWiggle)
What it means
CustomWiggle depends on CustomEase: _initCore checks for gsap.parseEase("_CE") (registered by CustomEase) and, if absent, warns that both plugins must be registered when required. Without CustomEase the wiggle ease data-structures cannot be built.
Source
Thrown at src/CustomWiggle.js:31
_eases = {
easeOut: "M0,1,C0.7,1,0.6,0,1,0",
easeInOut: "M0,0,C0.1,0,0.24,1,0.444,1,0.644,1,0.6,0,1,0",
anticipate: "M0,0,C0,0.222,0.024,0.386,0,0.4,0.18,0.455,0.65,0.646,0.7,0.67,0.9,0.76,1,0.846,1,1",
uniform: "M0,0,C0,0.95,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0"
},
_linearEase = p => p,
_initCore = required => {
if (!_coreInitted) {
gsap = _getGSAP();
createCustomEase = gsap && gsap.parseEase("_CE");
if (createCustomEase) {
for (let p in _eases) {
_eases[p] = createCustomEase("", _eases[p]);
}
_coreInitted = 1;
_create("wiggle").config = vars => typeof(vars) === "object" ? _create("", vars) : _create("wiggle(" + vars + ")", {wiggles:+vars});
} else {
required && console.warn("Please gsap.registerPlugin(CustomEase, CustomWiggle)");
}
}
},
_parseEase = (ease, invertNonCustomEases) => {
if (typeof(ease) !== "function") {
ease = gsap.parseEase(ease) || createCustomEase("", ease);
}
return (ease.custom || !invertNonCustomEases) ? ease : p => 1 - ease(p);
},
_bonusValidated = 1, //<name>CustomWiggle</name>
_create = (id, vars) => {
if (!_coreInitted) {
_initCore(1);
}
vars = vars || {};
let wiggles = (vars.wiggles || 10) | 0,
inc = 1 / wiggles,
x = inc / 2,View on GitHub (pinned to 13e2b79054)
Solutions
- Call gsap.registerPlugin(CustomEase, CustomWiggle) before any wiggle usage
- Import both plugins from the same gsap package
- Verify CustomEase registration ran (gsap.parseEase("_CE") is a function)
- If the warning appears despite registration, ensure _initCore ran after gsap was on window
Example fix
// before
gsap.registerPlugin(CustomWiggle);
gsap.to('.el', {ease: 'wiggle(5)'});
// after
gsap.registerPlugin(CustomEase, CustomWiggle);
gsap.to('.el', {ease: 'wiggle(5)'}); Defensive patterns
Strategy: validation
Validate before calling
if (!gsap || typeof gsap.parseEase('_CE') !== 'function') {
gsap.registerPlugin(CustomEase, CustomWiggle);
} Type guard
function customWiggleReady() {
return typeof gsap.parseEase === 'function' && typeof gsap.parseEase('_CE') === 'function';
} Prevention
- Register CustomEase alongside CustomWiggle
- Verify gsap.parseEase('_CE') exists before wiggle eases
- Import from 'gsap/all' consistently
- Avoid duplicate gsap instances
When it happens
Trigger: Calling CustomWiggle.create() or using ease:"wiggle(...)" before gsap.registerPlugin(CustomEase, CustomWiggle); CustomEase not imported; gsap core missing.
Common situations: Registering only CustomWiggle; tree-shaking dropped CustomEase; different gsap copies between bundles so parseEase("_CE") is never defined.
Related errors
- Please gsap.registerPlugin(CustomEase, CustomBounce)
- Please gsap.registerPlugin(CustomEase)
- 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/1163a8fdb6ad313b.
Report an issue: GitHub.