Hot Reload Live 1.1.1 Tools 4.7 Community
Submitted by user gutian2000; MIT; 2026-10-25
Save a .cs file — watch it run.
Hot Reload Live is a runtime C# hot reload plugin for Godot 4.7+ (.NET 8). It watches your project's source files, compiles changes into an isolated AssemblyLoadContext, diffs method signatures, and patches the running game via Harmony — all in-process.
No manual reload. No scene reset. No state loss.
FEATURES
- Static methods (void / return / ref / out / overloads)
- Instance methods (cross-ALC DynamicMethod IL stub)
- Generic methods (object covers all ref types + 8 common value types)
- async / Task MoveNext (CoreCLR-safe patch)
- IEnumerable / iterator MoveNext
- Field layout guard — skips patch on structural change
- Restore All — one-click unpatch
- Editor plugin menu (Restart Watcher / Manual Compile / Restore All)
- Isolated ALC — no file locks on the .godot mono temp bin folder
- Old ALC auto-unload (memory leak prevention)
- Self-contained addon — the download contains only addons/GodotHotReload, LICENSE and README
HOW IT WORKS
1. FileSystemWatcher (500 ms debounce)
2. dotnet build -> .hotswap/vN/ (isolated, no .godot lock)
3. AssemblyLoadContext.LoadFromStream (collectible, no file lock)
4. ComputeFieldHash check (skip patch if field layout changed)
5. Method diff (DispatchKey = full name + param types)
6. Harmony patch -> DynamicMethod IL stub
7. The game runs new code on the next frame
INSTANCE METHOD TRICK
A DynamicMethod stub forwards the old-ALC object reference directly as the new-ALC type's this pointer — no castclass, no type check. This bypasses the cross-ALC type-identity barrier that breaks naive MethodInfo.Invoke. Safe because the field-layout guard guarantees identical memory layout.
GENERIC METHOD TRICK
Harmony can't patch open generic definitions. We patch constructed instantiations — object covers all reference types (CoreCLR JIT shares code), plus 8 common value types (int, float, double, bool, long, byte, char, decimal).
INSTALLATION
1. Install from the Asset Library (the self-contained addons/GodotHotReload folder includes both the editor plugin and the game-side runtime), or copy that folder into your project manually.
2. Add this PackageReference to your .csproj: Lib.Harmony version 2.4.2 (it embeds MonoMod/Cecil internally — no other dependencies).
3. Project Settings -> Plugins -> enable Hot Reload Live.
4. Add the runtime node in your bootstrap scene: AddChild(new GodotHotReload.HotReloadRuntime());
5. Press F5. Edit any .cs file, save, watch the console.
REQUIREMENTS
- Godot 4.7+ (.NET / mono build — not GDScript, not Godot 3.x)
- .NET 8 SDK (for dotnet build)
- Lib.Harmony 2.4.2 NuGet package
LIMITATIONS
- Cannot change field layout (add/remove/rename instance fields) — the guard skips the patch; a restart is required
- Cannot add new types or change inheritance
- Generic methods cover object + 8 common value types; uncommon value types run the old version until restart
- async/iterator entry methods are skipped (only MoveNext is patched) — the logic after await/yield still updates
- Godot-generated bridge methods are never patched
CHANGELOG
v1.1.1
- Fixed patching of non-generic methods declared on generic types (per-instantiation constructed types)
- Addon folder is now self-contained for one-click Asset Library install
v1.1.0
- Instance methods — DynamicMethod IL-emit bypasses the cross-ALC type identity wall
- Generic methods — constructed instantiations (object + 8 value types)
- async / Task and iterator MoveNext patched
- Compiler-generated type filter (lambdas, state machines)
v1.0.0
- Static methods, field layout guard, Restore All, 500ms debounce watcher, isolated ALC + auto-unload
LICENSE
MIT. Includes Lib.Harmony 2.4.2 by Andreas Pardeike (MIT).
Source: https://github.com/gutian2000/hot-reload-live-godot
View files Download Submit an issue Recent Edits