greensock/GSAP · warning

Please gsap.registerPlugin(CustomEase)

Error message

Please gsap.registerPlugin(CustomEase)

What it means

CustomEase requires a GSAP core instance to register its "_CE" ease parser. _initCore warns when gsap cannot be found (window.gsap missing or registerPlugin unavailable), because without core the ease cannot hook into GSAP.

Source

Thrown at src/CustomEase.js:21

 * 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 */

import { stringToRawPath, rawPathToString, transformRawPath } from "./utils/paths.js";

let gsap, _coreInitted,
	_getGSAP = () => gsap || (typeof(window) !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap),
	_initCore = () => {
		gsap = _getGSAP();
		if (gsap) {
			gsap.registerEase("_CE", CustomEase.create);
			_coreInitted = 1;
		} else {
			console.warn("Please gsap.registerPlugin(CustomEase)");
		}
	},
	_bigNum = 1e20,
	_round = value => ~~(value * 1000 + (value < 0 ? -.5 : .5)) / 1000,
	_bonusValidated = 1, //<name>CustomEase</name>
	_numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/gi, //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.
	_needsParsingExp = /[cLlsSaAhHvVtTqQ]/g,
	_findMinimum = values => {
		let l = values.length,
			min = _bigNum,
			i;
		for (i = 1; i < l; i += 6) {
			+values[i] < min && (min = +values[i]);
		}
		return min;
	},
	//takes all the points and translates/scales them so that the x starts at 0 and ends at 1.
	_normalize = (values, height, originY) => {

View on GitHub (pinned to 13e2b79054)

Solutions

  1. Call gsap.registerPlugin(CustomEase) at startup before creating eases
  2. Ensure gsap core is loaded/imported before CustomEase initialization
  3. Check window.gsap exists when using script tags
  4. Use the same gsap instance everywhere (single package version)

Example fix

// before
import { CustomEase } from 'gsap/all'; // gsap core never imported
// after
import { gsap, CustomEase } from 'gsap/all';
gsap.registerPlugin(CustomEase);
const ease = CustomEase.create('myEase', 'M0,0 C0.1,0 ...');
Defensive patterns

Strategy: validation

Validate before calling

if (typeof gsap === 'undefined' || !gsap.registerPlugin) {
  throw new Error('CustomEase requires gsap core; load gsap first');
}
gsap.registerPlugin(CustomEase);

Type guard

function gsapCoreReady() {
  return typeof gsap !== 'undefined' && typeof gsap.registerPlugin === 'function';
}

Prevention

When it happens

Trigger: Importing CustomEase but never calling gsap.registerPlugin(CustomEase); loading CustomEase before the gsap core script; running in an environment without window (SSR); a custom gsap build without registerPlugin.

Common situations: Script tag order wrong (CustomEase before gsap.js); bundler importing CustomEase from 'gsap/all' but gsap from a different copy; forgetting registration entirely.

Related errors


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