Appendices

Syntax cheat sheet, keywords, built-in types reference, global functions reference, annotations reference, version history, learning resources and suggested study plan (12 weeks).

Appendices

45.1 Syntax cheat sheet var, const, func, static, class, class_name, extends, signal, enum

if, elif, else, for, while, match, when (4.3+), break, continue, pass, return and, or, not, in, is, as self, super

await (yield is reserved, unused in 4.x) preload, assert, breakpoint true, false, null, void PI, TAU, INF, NAN 45.3 Built-in types reference

null, bool, int, float, String, StringName, NodePath

Vector2, Vector2i, Rect2, Rect2i, Transform2D Vector3, Vector3i, Vector4, Vector4i, Basis, Quaternion, Transform3D, Plane, AABB, Projection

Color, RID, Object, Callable, Signal Array / Array[T], Dictionary / Dictionary[K, V] (4.4+)

PackedByteArray, PackedInt32Array, PackedInt64Array, PackedFloat32Array, PackedFloat64Array, PackedStringArray, PackedVector2Array, PackedVector3Array, PackedVector4Array (4.3+), PackedColorArray 45.4 Global functions reference

print, prints, printt, printerr, printraw, print_rich, print_debug, push_error, push_warning

abs, absf, absi, sign, floor, ceil, round, snapped, min, max, clamp, clampf, clampi, lerp, lerpf, lerp_angle, inverse_lerp, remap, smoothstep, move_toward, wrap, wrapf, wrapi, pingpong, fmod, fposmod, posmod, pow, sqrt, exp, log, sin, cos, tan, atan2, deg_to_rad, rad_to_deg, is_equal_approx, is_zero_approx, ease, angle_difference

randf, randi, randf_range, randi_range, randfn, randomize, seed

typeof, type_string, str, int, float, bool, var_to_str, str_to_var, var_to_bytes, bytes_to_var, type_convert

is_instance_valid, instance_from_id, is_instance_id_valid, weakref

preload, load, range, len, assert, char, ord, get_stack, inst_to_dict, dict_to_inst, type_exists, Color8 45.5 Annotations reference Run in the editor @abstract (4.5+)

Allow unloading scripts with static variables Initialize before _ready() @export_range(min, max, step,...)

Numeric range slider; extras: "or_greater", "or_less", "exp", "suffix:unit", "radians_as_degrees" Dropdown of named values

@export_flags(...), @export_flags_2d_physics, @export_flags_3d_physics, @export_flags_2d_render, @export_flags_2d_navigation

@export_file(filter), @export_dir, @export_global_file, @export_global_dir

@export_multiline, @export_placeholder(text) Color without alpha NodePath restricted by type Easing curve editor

@export_category(name), @export_group(name, prefix), @export_subgroup(name, prefix) @export_storage (4.3+) Serialized, hidden

@export_custom(hint, hint_string, usage) (4.3+) @export_tool_button(text, icon) (4.4+) Variable (Callable) @rpc(mode, sync, transfer, channel)

@warning_ignore_start / @warning_ignore_restore (4.4+) Suppress warnings in a region 45.6 Version history GDScript / engine highlights First open-source stable release

Editor overhaul, scene inheritance improvements Asset Library, new profiler

PBR renderer, C#, GDNative, VisualScript Optional static typing in GDScript AR/VR, improved C#, many 2D/3D features Stability, web improvements

Physics interpolation, navigation server backport Final 3.x feature release (LTS maintenance)

GDScript 2.0: annotations, await, lambdas, typed arrays, first-class Callable/Signal, super; Vulkan; GDExtension

Static variables, @static_unload, is_node_ready() Typed for loop variables, AnimationMixer, many fixes

TileMapLayer, when guards in match, @export_storage, @export_custom, Parallax2D, 2D physics interpolation, interactive music

Typed dictionaries, @export_tool_button, .uid files, Jolt physics option, embedded Game view, 3D physics interpolation

Variadic functions, @abstract, script backtraces in release builds 45.7 Learning resources

Godot Docs (docs.godotengine.org) — "Getting Started" (Your first 2D game, Your first 3D game), GDScript reference, style guide, class reference

Official demo projects (github.com/godotengine/godot-demo-projects)

Godot Asset Library and the Godot blog (release notes for every version) Tutorials & courses:

GDQuest (gdquest.com) — free and paid courses, "Learn GDScript From Zero" interactive app KidsCanCode — Godot recipes

HeartBeast, Brackeys, Clear Code, DevWorm, Godotneers, and Kenney (free assets) on YouTube

*Godot 4 Game Development Projects* (2nd ed.) — Chris Bradfield

*Learning GDScript by Developing a Game with Godot 4* — Sander Vanhove

*Godot 4 Game Development Cookbook* — Jeff Johnson *Game Programming Patterns* — Robert Nystrom (free online; patterns apply directly to Godot)

Community: forum.godotengine.org, r/godot, the official Godot Discord/community servers, Godot Wild Jam and GMTK game jams, the Godot Foundation's social channels 45.8 Suggested study plan (12 weeks)

Install, editor tour, scenes and nodes, first script Variables, typing, built-in types, collections

Operators, control flow, functions and lambdas — Part I exercises

Classes, properties, annotations, lifecycle Signals, await, input — Project 1

2D movement, physics, animation, tilemaps, cameras UI, audio, resources, saving, autoloads and communication — Part II exercises, Project 2

3D, navigation, state machines and AI — Project 3 or 4 Shaders and multiplayer — Project 6 (start)

Threads, editor tools, debugging and testing Performance, GDExtension/C#, exporting — Part III exercises

Structure, style, migration, best practices — finish a capstone (5, 7, or 8) 🎓 Final Words

You've traveled from your first rotating sprite to typed, signal-driven architectures, state machines, navigation, shaders, multiplayer, threads, and editor plugins. GDScript's power lies in how tightly it fits the engine: small scenes, clear signals, data in Resources, and fast iteration. Keep your code typed, your scenes small, and your nodes loosely coupled. Read the built-in docs (F1 is your best friend), study the demo projects, join a game jam, and — most importantly — finish and ship small games. Every finished project teaches more than ten unfinished ones. Happy game making! 🎮

@tool                                   # optional: run in editor
class_name MyClass                      # optional: global type name
extends Node2D                          # base class

signal something_happened(value: int)   # signal with typed argument
enum State { IDLE, RUN }                # named enum
const SPEED := 200.0                    # constant
static var instances := 0               # class-level variable (4.1+)

@export var health := 100               # Inspector property
@export_range(0, 10) var level := 1
@onready var sprite: Sprite2D = $Sprite2D

var items: Array[String] = []           # typed array
var table: Dictionary[String, int] = {} # typed dictionary (4.4+)
var hp := 10:                           # property with setter/getter
	set(v): hp = clampi(v, 0, 10)
	get: return hp

func _ready() -> void:
	something_happened.connect(_on_something)          # connect signal
	something_happened.emit(5)                          # emit
	var sq := func(x: int) -> int: return x * x        # lambda
	print(sq.call(4))
	await get_tree().create_timer(1.0).timeout          # coroutine
	for i in range(3): print(i)
	match State.IDLE:
		State.IDLE: print("idle")
		_: pass
	var n
…