Quick answer: Call DisplayServer.window_set_min_size(Vector2i(800, 600), DisplayServer.MAIN_WINDOW_ID) from _ready. Set fallback in Project Settings → Display → Window.
User resizes the window smaller than your UI tolerates. min_size set in _init didn’t stick because the window wasn’t fully realized yet.
The Fix
extends Node
func _ready():
DisplayServer.window_set_min_size(
Vector2i(800, 600),
DisplayServer.MAIN_WINDOW_ID
)
Belt-and-braces: also set in Project Settings so the early window honors the limit.
Verifying
Drag window resize. Cannot shrink below 800×600. Without the fix: shrinks freely.
“_ready timing. window_id explicit. Min holds.”
Related Issues
For canvas layer input, see canvas input. For onready order, see onready order.
_ready. Window id. Min sticks.