Quick answer: Use set_parallel(true) after creating the tween, or call .parallel() on each tweener you want to run alongside the previous one.

A UI element should scale and fade in simultaneously. The tween scales first, then fades — they run one after another instead of together.

Default Is Sequential

var t = create_tween()
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.tween_property(node, "modulate:a", 1.0, 0.3)   # runs AFTER scale

Each tween_property is a step; steps run in sequence by default.

Fix: set_parallel

var t = create_tween().set_parallel(true)
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.tween_property(node, "modulate:a", 1.0, 0.3)   # runs WITH scale

All tweeners run together.

Fix: Per-Tweener parallel()

var t = create_tween()
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.parallel().tween_property(node, "modulate:a", 1.0, 0.3)

parallel() makes the next tweener run alongside the previous. Mix sequential and parallel in one tween.

Chained Sequences

t.tween_property(...)           # step 1
t.parallel().tween_property(...) # with step 1
t.tween_property(...)           # step 2 (after both)

parallel() only affects the immediately following tweener. Next plain call resumes sequential.

Verifying

UI element scales and fades together in 0.3s, not 0.6s total. Timeline feels snappy.

“Tweens are sequential by default. set_parallel for all, parallel() for one.”

For complex UI choreography, sketch the timeline on paper first — which steps overlap, which follow. Then translate to parallel()/sequential calls.