Version management
Status: Implemented, except the parts marked (planned). Release asset names verified against GitHub on 2026-10-29 for Godot 4.x (see Sources).
Version identifiers
Section titled “Version identifiers”A version is MAJOR.MINOR[.PATCH] plus an optional channel and a flavor:
| Text | Meaning |
|---|---|
4.7.1 |
Stable 4.7.1, standard build |
4 |
The newest stable release of that major version. Redundant while 4 is the newest major, and it keeps working when a newer one appears |
4.7 |
Latest installed (or latest available, when installing) stable 4.7.x |
4.7.0 |
Exactly 4.7.0. Godot names it 4.7-stable (no patch); gdt shows it as 4.7 |
4.7.1-mono |
The .NET build. The suffix is canonical; --mono on a command means the same |
beta, rc, dev |
The newest published build of that channel (for example 4.8-beta2) |
pre |
The newest pre-release of any channel |
4.8-rc1, 4.8-beta2, 4.8-dev3 |
Pre-releases; never selected by a loose 4.8 while stable exists |
latest |
Latest stable |
Stable is the default channel. Pre-releases must be named explicitly, either exactly (4.8-rc1) or with a channel alias (beta, rc, dev, pre).
Aliases (latest, beta, rc, dev, pre) are resolved when the command runs. gdt use and gdt pin store the concrete version they resolved to, never the alias, so a pinned project stays reproducible.
No Godot build comes with gdt itself. The first gdt install makes its build the global default when none is set.
Sources
Section titled “Sources”All builds come from GitHub releases:
- Stable:
godotengine/godot, tag<version>-stable(for example4.7.2-stable). - Pre-releases:
godotengine/godot-builds, tag<version>-<channel>(for example4.8-beta2,4.8-dev7). That repository also mirrors the stable releases, butgdtreads stable from the main repository.
Asset names (Godot 4.x)
Section titled “Asset names (Godot 4.x)”V is the tag (4.7.2-stable, 4.8-beta2). Verified for 4.7.2-stable; pre-release names follow the same shape.
| Platform | Standard | .NET (mono) |
|---|---|---|
| Windows x86_64 | Godot_vV_win64.exe.zip |
Godot_vV_mono_win64.zip |
| Windows arm64 | Godot_vV_windows_arm64.exe.zip |
Godot_vV_mono_windows_arm64.zip |
| Linux x86_64 | Godot_vV_linux.x86_64.zip |
Godot_vV_mono_linux_x86_64.zip |
| Linux arm64 | Godot_vV_linux.arm64.zip |
Godot_vV_mono_linux_arm64.zip |
| macOS (universal) | Godot_vV_macos.universal.zip |
Godot_vV_mono_macos.universal.zip |
Things the resolver must not assume:
- The separators differ between flavors (
linux.x86_64versusmono_linux_x86_64;.exe.zipversus.zip), so names are built from an explicit table per platform and flavor, not from a pattern. - Each release has many unrelated assets (Android, web, export templates, debug symbols, headless/server variants in 3.x). Only exact names from the table are accepted.
- Godot 3.x uses different names (
x11_64,linux_headless). Godot 3 is out of scope for now. - A pre-release may lack some platforms (a given beta did not list a macOS build in the check made);
gdtreports “no build for your platform in this release” instead of failing obscurely.
Checksums
Section titled “Checksums”Each release publishes one SHA512-SUMS.txt asset with lines of the form <sha512 hex> <asset name> (two spaces). The file is downloaded from the same release and the archive’s SHA-512 must match its line before extraction. A mismatch, or a missing line, aborts with exit code 5 and installs nothing. (The .sha256 file on a release is only for the source tarball and is not used.) Downloads go to a cache and are extracted into a temporary folder, then moved into place so a failed install never leaves a half-installed version.
Note: the checksum file is hosted next to the archive, so it protects against corrupt or tampered downloads but not against a compromised release. Signature verification is not offered by Godot at the time of writing.
Storage
Section titled “Storage”Per ADR 0004, under the per-user data directory (GDT_HOME overrides it):
<data>/gdt/ versions/<id>/ one folder per installed build, e.g. 4.7.1, 4.7.1-mono cache/downloads/ archives, safe to delete bin/ shims and the gdt executable link config.toml user configurationResolution
Section titled “Resolution”Which build to use for a command, first match wins (ADR 0005):
--godot <version>flag.GDT_VERSIONenvironment variable.[godot] versionin the project’sgdt.toml.- The project’s
project.godot:config/featuresholds"MAJOR.MINOR"and"C#"for .NET projects. This resolves to the newest installed matching stable build (and flavor). - The global default (
gdt use).
If the result is not installed: gdt run / gdt open / the shim print the exact gdt install ... command and exit with code 4. An opt-in setting (auto_install = true) that installs it on the spot is (planned).
Finding the project
Section titled “Finding the project”The project root is the nearest ancestor of the working directory containing project.godot or gdt.toml. When the Godot arguments include --path <dir> (or --path=<dir>), or a project.godot path is given to gdt open, that directory is used instead of the working directory. This is what lets godot --path <worktree> -s tools/x.gd work from any folder.
gdt.toml (version part)
Section titled “gdt.toml (version part)”[godot]version = "4.7.1" # or "4.7", "4.8-rc1", "4.7.1-mono" for the .NET buildThere is a single version field; the flavor is the -mono suffix. The project file is gdt.toml only (no JSON variant), so there is never a conflict between two manifests.
Opening and running
Section titled “Opening and running”- On Windows a build has two executables:
Godot_v..._win64.exe(the editor, a GUI program) andGodot_v..._win64_console.exe(keeps a terminal attached). Output only reaches a terminal from the console one, sogdt runand the shim use the console executable andgdt openuses the editor one. Verified on 4.7.2, whose zip holds just these two files at the root; the Linux, macOS and .NET layouts are still to verify. gdt open <path>: resolve for the project, start the editor (--editor --path <project>), detach from the terminal, return immediately. Outside a project, or with--manager, it starts Godot’s project manager with the global default build.gdt run -- <args>: resolve, run in the foreground in the current directory, forward stdin/stdout/stderr and the exit code.gdt run script.gdis the shortcut for--headless -s script.gd(the script must extendSceneTreeorMainLoop).gdt engine info(planned): the executable, the version, the flavor, the editor settings folder (per user, shared by builds of the same major version, to verify), the project’s.godot/folder, and whether the build is self-contained (a_sc_file next to the executable makes Godot keep its data beside it; to verify).
The shim
Section titled “The shim”Two ways to invoke Godot (ADR 0006):
- Explicit:
gdt run -- .... No setup beyondgdtitself. - Shim:
gdt shim installputs agodotin<data>/binand says what to add toPATH(it editsPATHonly with--modify-path, see below). The shim isgdtitself started under the namegodot(ADR 0009): a symbolic link on Unix, a copy on Windows.
In shim mode:
- Every argument goes to Godot untouched, including
-v,-hand--version, which are Godot’s. Nothing is parsed bygdt. - The build is resolved as for
gdt run(project from--pathor the current folder,GDT_VERSION,gdt.toml,project.godot, the default); there is no--godotflag. It never uses the network and never installs anything. - Nothing is printed on success. A failure prints
gdt: <message>on stderr and exits with 4 (build not installed or none selected), 2 (badGDT_VERSION) or 1. - Godot’s exit code is returned unchanged, as a full 32-bit value. On Unix the shim replaces itself with Godot; on Windows it runs the console executable and ignores Ctrl+C, which Godot receives too, so that Godot ends first.
- It refuses to run if the build’s executable turns out to be the shim itself.
gdt shim status prints whether the shim is installed and up to date, whether its folder is on PATH and at which entry, and which godot would run (checking PATHEXT on Windows). A godot earlier on PATH than the shim wins, and on Windows the system Path comes before the user Path, so status is the thing to check. A newer gdt leaves the Windows copy old until gdt shim install is run again; while a Godot started through the shim is open, Windows will not let the file be replaced, and gdt says so.
--modify-path
Section titled “--modify-path”gdt never edits PATH on its own. gdt shim install --modify-path puts gdt’s bin folder first on it, and gdt shim uninstall --modify-path takes it out again. Both are idempotent and only touch gdt’s own entry.
- Windows: the user
Pathin the registry (HKCU\Environment) is read as stored, with its type (REG_EXPAND_SZ) and its unexpanded%VARIABLES%, and written back the same way with the folder first. Every other entry is left exactly as written. The previous value is saved first inpath-backup-<seconds>.txtin gdt’s config folder, and if saving fails nothing is written. Windows is then told the environment changed (through a PowerShell call), but a terminal that is already open keeps its oldPath: Windows Terminal has to be closed completely and opened again. The systemPathis never touched, and agodotthere still comes before the userPath. - Linux and macOS: gdt writes a small
envscript in its data folder that adds the folder toPATHonce, and a block marked# >>> gdt >>>…# <<< gdt <<<in the profile that loads it, asrustupdoes. Only that block is ever added or removed; the rest of the file is left byte for byte. Which profile: zsh uses~/.zshenv(or$ZDOTDIR/.zshenv); bash uses the ones that exist among~/.bashrc,~/.bash_profileand~/.profile, or creates~/.profile; fish gets its own fileconf.d/gdt.fish; any other shell uses~/.profile. Removing it looks in all of them. The shell is read from$SHELL. - A
PATHvalue that is not text, or a failure to save the backup, stops the change with an error.
Why a plain godot --version follows gdt use: only with the shim installed and its folder first on PATH. Without it, gdt run -- --version shows the same.
Independent community project. Not affiliated with, endorsed by or sponsored by the Godot Foundation or the Godot Engine project. “Godot” is a trademark of the Godot Foundation; this site does not use the Godot logo.