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

  1. Call gsap.registerPlugin(CustomEase, CustomBounce) before using bounce eases
  2. Import both: `import { gsap, CustomEase, CustomBounce } from 'gsap/all'`
  3. Confirm the gsap instance is the same one registered (single bundle copy)
  4. 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

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


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