{"id":14367,"date":"2026-06-08T17:25:41","date_gmt":"2026-06-08T15:25:41","guid":{"rendered":"https:\/\/store.algosyntax.com\/?post_type=asx-lms-tutorial-cpt&#038;p=14367"},"modified":"2026-06-08T18:06:07","modified_gmt":"2026-06-08T16:06:07","slug":"widget-blueprint-could-not-be-loaded-because-it-derives-from-an-invalid-class-fix-unreal-engine","status":"publish","type":"asx-lms-tutorial-cpt","link":"https:\/\/store.algosyntax.com\/tutorials\/unreal-engine\/widget-blueprint-could-not-be-loaded-because-it-derives-from-an-invalid-class-fix-unreal-engine\/","title":{"rendered":"Widget Blueprint could not be loaded because it derives from an invalid class| Fix | Unreal Engine"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14367\" class=\"elementor elementor-14367\" data-elementor-post-type=\"asx-lms-tutorial-cpt\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ce7b35c e-flex e-con-boxed e-con e-parent\" data-id=\"ce7b35c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd95800 elementor-widget elementor-widget-text-editor\" data-id=\"bd95800\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">Unreal Engine may sometimes show this error when opening a Widget Blueprint:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">Widget Blueprint could not be loaded because it derives from an invalid class.\nCheck to make sure the parent class for this blueprint hasn't been removed!<\/code><\/pre><p>This usually means the Blueprint is still trying to inherit from a class that Unreal can no longer find.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d0d2d5f e-flex e-con-boxed e-con e-parent\" data-id=\"d0d2d5f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d863f87 elementor-widget elementor-widget-heading\" data-id=\"d863f87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What causes this error?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-733f25d elementor-widget elementor-widget-text-editor\" data-id=\"733f25d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">The most common cause is renaming a C++ class without adding a Core Redirect.<\/p><p class=\"isSelectedEnd\">However, this is not limited to simple class renames. Moving a class to another module can cause the same issue, because the full Unreal class path changes.<br \/><br \/>This can happen when:<\/p><ol start=\"1\" data-spread=\"false\"><li>A C++ class is renamed.<\/li><li>A class is moved to another module.<\/li><li>A class is moved from project code into a plugin.<\/li><li>A class is moved between plugin modules.<\/li><li>A plugin or module is renamed.<\/li><\/ol><p>For a visual example,\u00a0 watch the video on this page.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-46b2e14 e-flex e-con-boxed e-con e-parent\" data-id=\"46b2e14\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a6be667 elementor-widget elementor-widget-heading\" data-id=\"a6be667\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Symptoms<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37a8a16 elementor-widget elementor-widget-text-editor\" data-id=\"37a8a16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">You may see the popup when opening a Widget Blueprint:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">Widget Blueprint could not be loaded because it derives from an invalid class.\nCheck to make sure the parent class for this blueprint hasn't been removed!<\/code><\/pre><p class=\"isSelectedEnd\">Other symptoms may include:<\/p><ul data-spread=\"false\"><li>The Widget Blueprint will not open.<\/li><li>The parent class shows as invalid.<\/li><li>The Blueprint cannot compile.<\/li><li>Other dependent Blueprints may also fail to load.<\/li><li>Packaging or cooking may fail because Unreal cannot resolve the missing class.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8eaaf82 e-flex e-con-boxed e-con e-parent\" data-id=\"8eaaf82\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4c2284 elementor-widget elementor-widget-heading\" data-id=\"d4c2284\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How to fix it<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2fe4265 elementor-widget elementor-widget-text-editor\" data-id=\"2fe4265\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">To fix the issue, you need to add a Core Redirect.<\/p><p class=\"isSelectedEnd\">A <strong>Core Redirect<\/strong> tells Unreal:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">When something asks for the old class, use the new class instead.<\/code><\/pre><p class=\"isSelectedEnd\">The fix has two parts:<\/p><ol start=\"1\" data-spread=\"false\"><li>Find the old class name.<\/li><li>Redirect it to the new class name.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-443eecb e-flex e-con-boxed e-con e-parent\" data-id=\"443eecb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-464b814 elementor-widget elementor-widget-heading\" data-id=\"464b814\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 1: Identify the old class name<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b1af875 elementor-widget elementor-widget-text-editor\" data-id=\"b1af875\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">Right after the popup appears, open the Output Log.<\/p><p class=\"isSelectedEnd\">In Unreal Engine, go to:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">Window &gt; Output Log<\/code><\/pre><p class=\"isSelectedEnd\">Search for the name of the broken Blueprint.<br \/><br \/>You can follow what happens in the video if it makes it easier for you but<\/p><p>You are looking for a message similar to this:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">CreateExport: Failed to load Class X as Parent<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0adf4d3 elementor-widget elementor-widget-text-editor\" data-id=\"0adf4d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">X here is the class name Unreal is still trying to load from the Blueprint asset.<\/p><p>Watch the video for the exact Output Log search process. It will make it easier.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4002395 e-flex e-con-boxed e-con e-parent\" data-id=\"4002395\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2136562 elementor-widget elementor-widget-heading\" data-id=\"2136562\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 2: Identify the new class name<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56bee91 elementor-widget elementor-widget-text-editor\" data-id=\"56bee91\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">Next, identify the class that should replace the old one.<\/p><p class=\"isSelectedEnd\">Usually, this is the class you renamed or moved the old class into.<\/p><p class=\"isSelectedEnd\">For native C++ classes, the reflected Unreal class path usually looks like this:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">\/Script\/ModuleName.ClassName<\/code><\/pre><p>Do not include the C++ prefix unless it is actually part of the reflected name.<br \/><br \/><\/p><p class=\"isSelectedEnd\">For example, a C++ class named:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">UAxGridChildWidget<\/code><\/pre><p class=\"isSelectedEnd\">is usually referenced by Unreal as:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">AxGridChildWidget<\/code><\/pre><p class=\"isSelectedEnd\">not:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">UAxGridChildWidget<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-175ee63 e-flex e-con-boxed e-con e-parent\" data-id=\"175ee63\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2938e0a elementor-widget elementor-widget-heading\" data-id=\"2938e0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 3: Choose The File To Add Core Redirect in<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ab424a elementor-widget elementor-widget-text-editor\" data-id=\"4ab424a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">The CoreRedirects we&#8217;re talking about are added in Configuration files ending in .ini extension.<br \/>This file is located :<\/p><p class=\"isSelectedEnd\">At the project level, The redirect is added in:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">Config\/DefaultEngine.ini<\/code><\/pre><p class=\"isSelectedEnd\">If the class belongs to a plugin, you can place the redirect in the plugin config file.<\/p><p class=\"isSelectedEnd\">For a plugin, create an <code dir=\"ltr\">.ini<\/code> file that matches the default plugin config name, for example:<\/p><pre dir=\"ltr\"><code dir=\"ltr\">Plugins\/YourPlugin\/Config\/DefaultYourPlugin.ini<\/code><\/pre><p>Then add the following redirect:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ecd936a e-flex e-con-boxed e-con e-parent\" data-id=\"ecd936a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-95e9253 elementor-widget elementor-widget-heading\" data-id=\"95e9253\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 3: Add The redirect in the config file<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-454764b elementor-widget elementor-widget-text-editor\" data-id=\"454764b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">Use this format:<\/p><pre dir=\"ltr\"><code dir=\"ltr\"><span class=\"text-token-text-primary cursor-text rounded-sm\" data-placeholder-token=\"true\">[CoreRedirects]<\/span>\n+ClassRedirects=(OldName=\"OldName\",NewName=\"\/Script\/NewModule.NewName\")<\/code><\/pre><p class=\"isSelectedEnd\">For the Output Log example above, the redirect would look like this:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f0fc7c6 elementor-widget elementor-widget-code-highlight\" data-id=\"f0fc7c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>[CoreRedirects]\n+ClassRedirects=(OldName=\"\/Script\/EnhancedUIGrids.AxLineGridChildWidget\",NewName=\"\/Script\/EnhancedUIGrids.AxGridChildWidget\")<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b9c5c97 e-flex e-con-boxed e-con e-parent\" data-id=\"b9c5c97\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0ed31ad elementor-widget elementor-widget-heading\" data-id=\"0ed31ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Final steps<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a72c22 elementor-widget elementor-widget-text-editor\" data-id=\"5a72c22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u00a0After adding the redirect:<\/p><ol start=\"1\" data-spread=\"false\"><li>Restart Unreal Engine.<\/li><li>Open the broken Blueprint.<\/li><li>Compile it.<\/li><li>Save it.<\/li><li>Check the Output Log again for any additional missing classes.<\/li><\/ol><p>Sometimes one broken Blueprint may reference multiple renamed or moved classes. Fix the first missing class, restart, then repeat the process if another missing class appears.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a5fb38f e-flex e-con-boxed e-con e-parent\" data-id=\"a5fb38f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-091bfce elementor-widget elementor-widget-heading\" data-id=\"091bfce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Related tutorial<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da51b4e elementor-widget elementor-widget-text-editor\" data-id=\"da51b4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">For more information about Core Redirects and moving Unreal Engine content or classes, see this related tutorial:<\/p><p><a href=\"https:\/\/store.algosyntax.com\/tutorials\/unreal-engine\/ue5-moving-content-and-classes-to-another-class\/\">UE5: Core Redirects In Unreal Engine<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"featured_media":0,"template":"","asx-lms-tutorial-categories":[86,142,58,45],"asx-lms-tutorial-tags":[143,46],"class_list":["post-14367","asx-lms-tutorial-cpt","type-asx-lms-tutorial-cpt","status-publish","hentry","asx-lms-tutorial-categories-unreal-api","asx-lms-tutorial-categories-blueprints","asx-lms-tutorial-categories-unreal-c-api","asx-lms-tutorial-categories-unreal-engine","asx-lms-tutorial-tags-blueprints","asx-lms-tutorial-tags-cpp","entry"],"acf":[],"_links":{"self":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/14367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt"}],"about":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/types\/asx-lms-tutorial-cpt"}],"version-history":[{"count":2,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/14367\/revisions"}],"predecessor-version":[{"id":14385,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/14367\/revisions\/14385"}],"wp:attachment":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/media?parent=14367"}],"wp:term":[{"taxonomy":"asx-lms-tutorial-categories","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-categories?post=14367"},{"taxonomy":"asx-lms-tutorial-tags","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-tags?post=14367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}