{"record":{"id":"520344487d80b87e","repo":"greensock/GSAP","slug":"invalid-property-property-set-to-value-missi","errorCode":null,"errorMessage":"Invalid property ${property} set to ${value} Missing plugin? gsap.registerPlugin()","messagePattern":"Invalid property (.+?) set to (.+?) Missing plugin\\? gsap\\.registerPlugin\\(\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/gsap-core.js","lineNumber":56,"sourceCode":"\t_windowExists = () => typeof(window) !== \"undefined\",\n\t_isFuncOrString = value => _isFunction(value) || _isString(value),\n\t_isTypedArray = (typeof ArrayBuffer === \"function\" && ArrayBuffer.isView) || function() {}, // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\n\t_isArray = Array.isArray,\n\t_randomExp = /random\\([^)]+\\)/g,\n\t_commaDelimExp = /,\\s*/g,\n\t_strictNumExp = /(?:-?\\.?\\d|\\.)+/gi, //only numbers (including negatives and decimals) but NOT relative values.\n\t_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g, //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n\t_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n\t_complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi, //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\n\t_relExp = /[+-]=-?[.\\d]+/,\n\t_delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi, // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\n\t_unitExp = /^[+\\-=e\\s\\d]*\\d+[.\\d]*([a-z]*|%)\\s*$/i,\n\t_globalTimeline, _win, _coreInitted, _doc,\n\t_globals = {},\n\t_installScope = {},\n\t_coreReady,\n\t_install = scope => (_installScope = _merge(scope, _globals)) && gsap,\n\t_missingPlugin = (property, value) => console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\"),\n\t_warn = (message, suppress) => !suppress && console.warn(message),\n\t_addGlobal = (name, obj) => (name && (_globals[name] = obj) && (_installScope && (_installScope[name] = obj))) || _globals,\n\t_emptyFunc = () => 0,\n\t_startAtRevertConfig = {suppressEvents: true, isStart: true, kill: false},\n\t_revertConfigNoKill = {suppressEvents: true, kill: false},\n\t_revertConfig = {suppressEvents: true},\n\t_reservedProps = {},\n\t_lazyTweens = [],\n\t_lazyLookup = {},\n\t_lastRenderedFrame,\n\t_plugins = {},\n\t_effects = {},\n\t_nextGCFrame = 30,\n\t_harnessPlugins = [],\n\t_callbackNames = \"\",\n\t_harness = targets => {\n\t\tlet target = targets[0],\n\t\t\tharnessPlugin, i;","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/greensock/GSAP/blob/13e2b790546426a1a2e0e9b409f3f8dc6d6611f2/src/gsap-core.js#L38-L74","documentation":"_missingPlugin is gsap core's warning when a tween targets a property no registered plugin or default transform handling supports, e.g., gsap.to(el, {drawSVG: ...}) without DrawSVGPlugin. GSAP cannot find a plugin for that property so it warns and skips it.","triggerScenarios":"gsap.to(target, {somePluginProp: value}) where the property is not a CSS property, attribute, or transform, and the corresponding plugin (MorphSVG, DrawSVG, TextPlugin, ScrollToPlugin, etc.) was never registered; also misspelled property names.","commonSituations":"Using premium plugins without registration, typos like 'scollTo' instead of 'scrollTo', animating properties from a plugin loaded on another page, or expecting CSSPlugin to handle SVG-specific properties.","solutions":["Register the plugin that owns the property: gsap.registerPlugin(ScrollToPlugin, ...) ","Check property spelling against the plugin's docs","Import and register the plugin module in the same bundle where the tween runs","If the property is a plain attribute/CSS value, verify CSSPlugin can handle it or use attr: { }"],"exampleFix":"// before\ngsap.to('#path', { drawSVG: '50%' }); // DrawSVGPlugin not registered\n// after\nimport { gsap } from 'gsap';\nimport { DrawSVGPlugin } from 'gsap/DrawSVGPlugin';\ngsap.registerPlugin(DrawSVGPlugin);\ngsap.to('#path', { drawSVG: '50%' });","handlingStrategy":"validation","validationCode":"import { gsap } from 'gsap';\nimport { ScrollToPlugin } from 'gsap/ScrollToPlugin';\n// register every plugin whose properties you animate\ngsap.registerPlugin(ScrollToPlugin);\ngsap.to(window, { scrollTo: 500 });","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Map each animated property to its owning plugin and register it","Double-check property spelling when the warning appears","Keep plugin imports and tweens in the same bundle","Use gsap.core.globals() to verify which plugins are registered"],"tags":["gsap","plugin-registration","invalid-property"],"backgroundTag":"missing-plugin-registration","analyzedSha":"13e2b790546426a1a2e0e9b409f3f8dc6d6611f2","analyzedAt":"2026-08-29T08:34:05.027Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}