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
- Call gsap.registerPlugin(CustomEase) at startup before creating eases
- Ensure gsap core is loaded/imported before CustomEase initialization
- Check window.gsap exists when using script tags
- 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
- Load/import gsap core before CustomEase
- Call registerPlugin(CustomEase) before creating eases
- Check script tag order in HTML
- Single gsap version across the bundle
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
- Please gsap.registerPlugin(CustomEase, CustomBounce)
- 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/bec15f6407e3f900.
Report an issue: GitHub.