Godot 4.5 EditorExportPlugin Custom Export Preset Disappears After Patch Update - How to Fix
Problem: Your team shipped a custom export preset—Itch HTML5 size-budget gate, Steam demo stripped symbols, or similar—through an EditorExportPlugin in addons/. After upgrading from Godot 4.5.0 to a 4.5.x patch, the preset no longer appears in Project → Export → Add… even though the addon folder still exists.
Who is affected now: Indies pinning 4.5.x for 2026 jam and fest pipelines. Early 2026 patch releases tightened EditorExportPlugin registration; plugins that compiled on 4.5.0 often disable themselves on first open until you migrate API signatures and clear stale editor cache.
Fastest safe fix: Open Project → Project Settings → Plugins → resolve the orange needs update warning → update _get_export_options / feature hooks per current docs → delete editor_layout.cfg for this project hash → re-enable plugin → confirm preset in Export dialog → log godot_export_plugin_receipt_v1.json in CI.
Direct answer
The preset did not delete itself—the editor stopped loading your plugin because the patch changed export-plugin callbacks or marked the addon incompatible. Godot hides broken plugins from the export UI instead of showing a half-registered preset. Fix the plugin load state and API match first; only then re-test HTML5 or desktop exports.
Why this issue spikes in 2026
- Godot 4.5.x patch cadence is faster than many teams’
.godot-versionpin discipline. - Custom export gates (WASM size, stripped PCK, fest demo flags) moved from manual checklists into EditorExportPlugin automation.
- A preset can vanish while standard Web / Windows presets remain—teams blame the engine instead of the addon.
- Stale
~/.config/godot/layout cache preserves a broken Export dialog state across reopen.
If the game exports but itch hangs at loader, that is a hosting/MIME lane—see itch.io WASM MIME boot hang, not this article.
Symptoms and search phrases
- Project → Export → Add… missing your custom preset name.
- Plugins tab shows addon disabled or incompatible after patch.
- Output panel: script error in
addons/your_plugin/export_plugin.gdon project load. - Preset existed yesterday on 4.5.0, gone today on 4.5.2 with no intentional addon edits.
.gdignoreaccidentally added underaddons/during cleanup—plugin never loads.
Root causes (check in order)
- Plugin disabled after incompatible script error on load.
_get_export_features/ option hooks signature drift between patches.@toolclass not extendingEditorExportPlugincorrectly after rename in template..gdignoreinaddons/or subfolder blocks Godot from scanning scripts.- Cached
editor_layout.cfghides Export UI state. - Wrong
plugin.cfgversionor missingconfig/featuresfor 4.5. - Duplicate plugin name collision after merge—second plugin fails silently.
Fastest safe fix path
Step 1 — Open Plugins and read the warning
- Project → Project Settings → Plugins.
- Find your export addon row.
- If status is disabled or shows needs update, click Edit or re-enable after fixing scripts.
- Open Output dock—copy the first red error on project load.
Success check: Plugin checkbox enabled with no red errors on reload.
Step 2 — Migrate EditorExportPlugin API for your patch
Compare your script against current EditorExportPlugin documentation.
Common 4.5.x fixes:
| Symptom in Output | Fix |
|---|---|
_get_export_features not found |
Rename to current hook (_get_export_features vs platform feature API—match docs for your exact patch) |
Wrong return type on _get_export_options |
Return Array of Dictionary options per spec |
Missing _export_begin / _export_end |
Add no-op stubs if exporter expects them |
Minimal skeleton (verify against your patch docs):
@tool
extends EditorExportPlugin
func _get_export_options(platform: String) -> Array:
return [{
"option": "custom/itch_size_cap_mb",
"type": TYPE_INT,
"default": 250
}]
func _get_export_features(platform: String, preset_name: String) -> PackedStringArray:
return PackedStringArray()
func _export_begin(features: PackedStringArray, is_debug: bool, path: String, flags: int) -> void:
pass
Success check: Project loads with zero addon script errors.
Step 3 — Clear editor layout cache for this project
Godot stores per-project UI state under the user config dir.
- Close Godot completely.
- Locate project hash folder:
- Windows:
%APPDATA%\Godot\projects\ - macOS:
~/Library/Application Support/Godot/projects/ - Linux:
~/.config/godot/projects/
- Windows:
- Delete
editor_layout.cfginside the folder matching your project (keep backups if unsure). - Reopen project.
Alternative: Create a fresh clone of the repo on a CI machine without old cache—if preset appears, cache was the culprit.
Step 4 — Re-enable plugin and confirm Export dialog
- Project → Export.
- Click Add… — your custom preset should list by
plugin.cfgname. - If missing, verify
plugin.cfg:
[plugin]
name="ItchHtml5SizeGate"
description="Fest HTML5 export size gate"
author="Your Studio"
version="1.1"
script="export_plugin.gd"
- Confirm
res://addons/your_plugin/export_plugin.gdpath matchesscript=.
Success check: Custom preset visible; export dialog opens without errors.
Step 5 — Run one export smoke per platform you ship
| Platform | Smoke |
|---|---|
| Web | Export folder contains index.html + .wasm; run MIME curl check before itch upload |
| Windows | Binary launches from clean path |
| Steam demo | Pair with save-path discipline if also using GDevelop—Godot has separate save maps |
Step 6 — Pin patch in team docs
Add to repo root:
# .godot-version (team convention)
4.5.2-stable
Run patch upgrade smoke in CI: open headless or scripted check that addons/*/export_plugin.gd parses.
godot_export_plugin_receipt_v1.json
{
"schema": "godot_export_plugin_receipt_v1",
"engine_version": "4.5.2-stable",
"plugin_name": "ItchHtml5SizeGate",
"plugin_enabled": true,
"custom_preset_visible_in_export_dialog": true,
"editor_layout_cache_cleared": true,
"web_export_smoke_ok": true,
"captured_at_utc": "2026-05-24T00:00:00Z",
"pass": true
}
Attach to BUILD_RECEIPT when custom gates block promotion.
Prevention
- Pin Godot patch in README and CI image tag.
- Treat addon breakages as release blockers on engine bump.
- Never
.gdignoreentireaddons/unless intentional. - Keep standard Web preset as fallback if custom plugin fails mid-jam.
- Cross-link QA with 15 Free Godot 4.5 Web Export resources.
Troubleshooting
| Symptom | Fix |
|---|---|
| Plugin enables, preset still missing | Step 3 cache + verify plugin.cfg script path |
| Errors only on one OS | Line endings or case-sensitive path in plugin.cfg |
| Preset appears, export fails | Size gate logic—fix _export_begin, not registration |
| Works in Editor, fails in CI | CI uses different Godot patch—align versions |
| Multiple custom presets, one missing | Name collision in plugin.cfg name field |
FAQ
Should we fork Godot’s built-in Web preset?
Prefer EditorExportPlugin that wraps built-in flow—forking core presets breaks on every patch.
Does this affect exported games?
No—only editor export UI. Players are unaffected.
Can we skip plugins and export manually?
Yes for emergencies; you lose automated size/MIME gates tied to fest prep.
Is this related to GDExtension web export?
Separate lane—see web export resources for GDExtension + WASM pruning.
Related links
- itch.io Godot 4.5 WASM MIME Boot Hang Fix
- Godot 4.5 Web Export GDExtension and WASM Pruning Resources
- Godot 4.5 Web Export CI Matrix Guide Chapter
- Godot EditorExportPlugin (official docs)
- Godot Exporting for the Web
Re-open Plugins after every engine patch—the Export dialog will not tell you the addon failed until the preset is already gone.