~6 min read

The Godot stack and its ecosystem

Godot 4.x versions, GDScript vs C#, render pipelines, and key packages.

Godot versions

Godot has been on the 4.x branch since 2023 (the 4.0 release was March 2023). As of May 2026:

  • Godot 4.6.3 — the current stable (released May 20, 2026). The 4.6 minor branch was released in January 2026, with patches 4.6.1 (Feb), 4.6.2 (Apr), 4.6.3 (May) — stabilizing Jolt physics and editor fixes. The headline features of 4.6: Jolt became the default physics for 3D, IK returned as a node-based system (TwoBoneIK3D, FABRIK3D, plus 5 more solvers), a new editor theme (Modern), unified docking, a rewritten SSR, LibGodot (the engine as an embedded library).
  • Godot 4.7 — in beta since April 2026, with stable expected in summer 2026. HDR output on desktop/iOS, AreaLight3D, VirtualJoystick for mobile, ray-tracing improvements, wasm64 for web export, a built-in Asset Store in the editor.
  • WebGPU backend — in the 4.6 mainline it is absent / remains experimental at the proposal level. There is a community fork, godotwebgpu by David Walter (based on 4.6.2, March 2026), which includes its own WebGPU implementation for the Mobile renderer and compute shaders. This is not a Godot Foundation project. A production mainline WebGPU is expected in 4.7+ or later.
  • Godot 5 — the future. There is no public date; a breaking major release is traditionally “years away”.
  • Godot 3.6 — the last release of the 3.x branch, in LTS mode (bugfixes only). Use it only if you maintain a legacy project; for anything new — 4.x.

Shader Baker (introduced in 4.5, not 4.6) is a separate feature for precompiling shaders on export, reducing the stutter on a scene’s first run by up to 20x on Metal/D3D12. It works transparently — the toggle to enable it is in Project Settings.

Versioning policy is simpler than Unity's

Godot uses semver. LTS applies only to the previous major (currently 3.x). Within 4.x, minor releases move forward; “sitting on 4.4 forever” won’t work — except for cases where you ship and freeze the project’s version.

Languages

GDScript — the native language

Syntactically similar to Python: indentation, def-style functions (but via func), dynamic typing. Key features:

  • Optional static typing: var hp: int = 100, func attack(target: Enemy) -> void. Type-checked at parse time, speeding up code by 28–59% by skipping the Variant dispatcher.
  • Typed arrays / dictionaries: Array[Enemy], Dictionary[String, int] (typed dictionaries appeared in 4.4).
  • Annotations via @: @export, @onready, @tool, @export_range, @export_enum, @export_file, @export_node_path.
  • Lambda functions: var add = func(a, b): return a + b.
  • await instead of yield for asynchrony.
  • class_name MyClass extends Node — global class registration (visible in the editor and from any script).
class_name Enemy extends Node3D

@export_range(1, 100) var max_hp: int = 50
@onready var sprite: Sprite3D = $Sprite3D

signal died(by: Node)

var hp: int

func _ready() -> void:
    hp = max_hp

func take_damage(amount: int, attacker: Node) -> void:
    hp -= amount
    if hp <= 0:
        died.emit(attacker)
        queue_free()

C# — for experienced .NET developers

Supported, but with caveats:

  • You need a separate editor build (“Godot .NET edition”). Downloaded from the website or via Steam as a separate SKU.
  • .NET 8 is required at a minimum (as of Godot 4.4).
  • Does not export to the web target — a long-standing limitation, being worked on via NativeAOT/.NET 10.
  • Supports NativeAOT export for native platforms.
  • A long-term strategy “to move .NET into a plugin” has been announced, but there are no timelines — TODO verify at the time of reading.
using Godot;

public partial class Enemy : Node3D
{
    [Export(PropertyHint.Range, "1,100")]
    public int MaxHp { get; set; } = 50;

    [Signal]
    public delegate void DiedEventHandler(Node by);

    private int _hp;

    public override void _Ready() {
        _hp = MaxHp;
    }

    public void TakeDamage(int amount, Node attacker) {
        _hp -= amount;
        if (_hp <= 0) {
            EmitSignal(SignalName.Died, attacker);
            QueueFree();
        }
    }
}

GDExtension — native plugins

An analog of Unity native plugins, but more convenient:

  • A dynamic library (.dll/.so/.dylib) + a .gdextension manifest. Does not require rebuilding the engine.
  • The official C++ bindings — godot-cpp.
  • Mature third-party bindings: godot-rust (gdext) for Rust, godot-python — for Python.
  • Classes from GDExtension are indistinguishable from core nodes in the editor.
VisualScript was removed

There is no equivalent of Unity Bolt in the Godot 4.x core. VisualScript was present in 3.x and was removed in 4.0 as rarely used (moved to a separate, unsupported module). If you need visual logic — there is Visual Shader (for shaders), and for gameplay — community plugins.

Render pipelines

Unlike Unity, where you pick one of three SRPs when creating a project, in Godot three renderers are switched in Project Settings, and you can change them on the fly (though materials may require adaptation).

RendererAPIWhen to choose
Forward+Vulkan / Metal / D3D12Desktop, consoles, high-end. Clustered forward+, SDFGI, volumetric fog, SSR, SSAO.
MobileVulkan / Metal / D3D12Mobile and desktop VR. Single-pass forward, a light-source limit.
CompatibilityOpenGL ES 3 / WebGL 2Weak hardware and the only fully working path for the web.

In 4.3, Compatibility was declared feature-complete for the needs of most projects: lights, shadows, GI (lightmaps), and GPU particles work (with limitations).

The web means Compatibility

If the browser is the target, choose the Compatibility renderer from the very start. Forward+ and Mobile do not fully work in WebGL; the mainline WebGPU backend is still absent (the community fork godotwebgpu is a separate story, see the section above).

Key systems and nodes

The Godot vocabulary you’ll need:

  • Scene tree — the main tree of nodes in a running game.
  • Node — an atomic object, usually with a single script. All nodes share the same lifecycle callbacks (_ready, _process, …).
  • PackedScene (.tscn) — a serialized scene. An analog of a Unity Prefab + Scene in a single file.
  • Resource (.tres / .res) — a data-only asset, refcounted. An analog of ScriptableObject.
  • Signal — a built-in pub-sub, declared on any node.
  • Group — a label for a category of nodes. Replaces Unity tags for tasks like “find all enemies”.
  • NavigationServer3D, PhysicsServer3D, RenderingServer, AudioServer — low-level singletons that high-level nodes rely on.

Tooling and ecosystem

  • The built-in script editor in the Godot editor is decent for GDScript: LSP, autocomplete, multi-cursor, a debugger with a remote scene tree.
  • External editors:
    • VS Code / Cursor via the godot-vscode-plugin extension (LSP + DAP debugging).
    • JetBrains Rider — first-class for C# projects; for GDScript it is configured with the same LSP.
  • Asset Library in the editor (the AssetLib tab) — the old one, effectively deprecated.
  • Asset Library (built into the 4.6 editor — the AssetLib tab) — the old system through which community plugins are installed (Phantom Camera, Dialogic, Terrain3D, etc.). Still relevant in 4.6.
  • Godot Asset Store (announced in 2025, developing in 2026) — a new external portal with accounts, ratings, and planned support for paid assets. Editor integration is planned for 4.7. On 4.6 it is a separate site, not an AssetLib replacement.
  • Version control via .gitignore (Godot generates it itself when enabled in settings). Ignore .godot/, export/, build/. Commit *.tscn, *.tres, *.gd, *.gdshader, *.import, project.godot.
Commit `.import` files, don't ignore them

Every asset in Godot gets a companion .import file with import settings (compression mode for a texture, scale for a model, and so on). It is important to commit these files — otherwise, when cloning the repository on another machine, the settings will be lost.

Top plugins from the Asset Store

In addition to the built-in ones:

  • Phantom Camera — a Cinemachine analog for 2D and 3D: follow, look-at, host-system, triggers. If you need complex camera work — this is your first stop.
  • Dialogic — a dialogue and quest system.
  • Terrain3D — native terrain (the Godot core has no built-in terrain).
  • Beehave or LimboAI — behavior trees / state machines for AI.
  • GUT — unit testing.
  • gd-plug — a plugin manager via plug.gd.

The next chapter is the main material: everything about 3D development in Godot.