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

  1. Call gsap.registerPlugin(CustomEase, CustomWiggle) before any wiggle usage
  2. Import both plugins from the same gsap package
  3. Verify CustomEase registration ran (gsap.parseEase("_CE") is a function)
  4. 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

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


AI-assisted analysis of greensock/GSAP@13e2b79054 (2026-08-29). Data as JSON: /api/errors/1163a8fdb6ad313b. Report an issue: GitHub.