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
…