GodotDelta is a Godot modding and patching tool for Godot 3.x and Godot 4.x games.
It is built for workflows where you want to:
- build a runtime patch from a Godot project
- distribute either a plain patch
.pckor a protected.gdmod - apply a patch to a base game
- test changes in a sandbox without touching the original game
- rebuild and retest quickly during development
- Base game input:
- standalone
.pck .exewith embedded.pck.exewith a sibling.pckusing the same file name stem
- standalone
- Engine targets:
Godot 3.xGodot 4.x
Plain runtime patch format.
- created with
gddelta make - applied with
gddelta apply - best for testing, debugging, or external loaders such as GodotMods
Protected distribution format.
- created with
gddelta make - applied with
gddelta apply - can require the original base game to recover the payload
- best when you do not want to ship a plain patch
.pck
gddelta make <base.pck|base.exe> <project_dir> <output.gdmod|output.pck>Examples:
gddelta make game.exe my_mod_project mod.gdmod
gddelta make game.exe my_mod_project mod.pckThe output extension decides what is created:
.gdmod-> protected package.pck-> plain patch package
gddelta apply <base.pck|base.exe> <input.pck|input.gdmod> [output]Behavior depends on the input and optional output path:
- no output path:
- patch the base game in place
- input is
.pckand output is a directory:- build a sandbox there
- input is
.gdmodand output is a directory:- recover the patch and build a sandbox there
- input is
.gdmodand output is a.pckpath:- recover a plain patch
.pck
- recover a plain patch
Examples:
gddelta apply game.exe mod.pck
gddelta apply game.exe mod.gdmod
gddelta apply game.exe mod.pck output/dev-runtime
gddelta apply game.exe mod.gdmod output/dev-runtime
gddelta apply game.exe mod.gdmod recovered_patch.pckgddelta dev-build <base.pck|base.exe> <project_dir> <sandbox_dir>Example:
gddelta dev-build game.exe my_mod_project output/live-devThis builds a runnable sandbox from the base game and the current project state.
gddelta watch-dev-build-patch <base.pck|base.exe> <project_dir> <patch.pck> <sandbox_dir> [interval_ms] [--log-file path]Example:
gddelta watch-dev-build-patch game.exe my_mod_project output/live_patch.pck output/live-dev 500This continuously:
- rebuilds a live patch
.pck - refreshes the sandbox output
- keeps a runnable test copy ready
gddelta ui
gddelta bootstrap
gddelta inspect <input.pck|input.exe>
gddelta diff <base_dir> <modified_dir>
gddelta patch <base_dir> <modified_dir> <output.pck>
gddelta compose <base.pck|base.exe> <patch.pck|project_dir> <output.pck|output.exe>Project-directory commands require a .gddeltainclude file in the project root.
That includes commands such as:
makedev-buildwatch-dev-build-patchwatch
If .gddeltainclude is missing, GodotDelta stops with an error instead of scanning the whole project.
pathorglob: include+pathor+glob: force include!pathor!glob: exclude
Both forms are accepted:
UI/**res://UI/**
You can map a project source path to a different pack path with =.
Examples:
project.godot=game.godot
res://misc/epilepsy_warning.tscn=res://edit/epilepsy_warning.tscn
"res://misc/epilepsy_warning.tscn"="res://edit/epilepsy_warning.tscn"
Meaning:
- left side: path to write inside the patch pack
- right side: actual source file to read from the project
!res://.autoconverted/**
+res://fonts/ko_mono.ttf
+res://misc/epilepsy_warning.tscn
project.godot=game.godot
Packaged builds also read the default include file named:
default.gddeltainclude
Some encrypted games need a base encryption key.
Use:
--base-key <64-char-hex>Examples:
gddelta make game.exe my_mod_project mod.gdmod --base-key 0123...
gddelta dev-build game.exe my_mod_project output/live-dev --base-key 0123...The GUI exposes a Base Key field whenever Advanced Features are enabled.
Packaged builds include:
gddelta(.exe)for CLIGodotDelta(.exe/.x86_64)for GUI
You can start the GUI directly or from CLI:
gddelta uiThe GUI supports:
- building
.gdmod - building patch
.pck - applying either format
- building dev sandboxes
- watch mode
Current behavior:
- command execution runs in the background
- logs stream into the window while the command runs
- buttons and inputs are disabled while a command is running
- Advanced Features exposes the
Base Keyfield for encrypted-game workflows
GodotDelta uses GDRETools where accurate Godot package and bytecode handling matters most.
Current use cases include:
- Godot
3.xGDScript bytecode compilation - legacy
3.xpatch application paths - pack inspection / recovery paths where engine-specific behavior matters
GDRETools is prepared lazily:
- it is not downloaded at startup
- it is only prepared when a command actually needs it
applywithout an output path modifies the base game.applywith a sandbox directory leaves the original base untouched.dev-buildand watch workflows are intended for testing and iteration.- for non-embedded
.exeinputs, GodotDelta tries to use a sibling.pckwith the same stem - legacy Godot
3.xpatching can behave differently from Godot4.xbecause of bytecode and remap handling
- Some Godot pack, patching, and bytecode behavior was studied with reference to gdsdecomp.