Skip to content

tweens.gd

... now what if tweening were fun?

  • C# (beta) · Godot 4.7.2 .NET
  • GDScript (beta) · Godot 4.7.2

tweens.gd is a fully free and libre open source tweening system for the Godot game engine.
This addon aims for concise and consistent syntax, and more flexible easing options than most.

tweens.gd respects your time and your keycaps.

Section titled “tweens.gd respects your time and your keycaps.”
Godot's Tween
var tween = sprite.CreateTween();
tween.TweenProperty(sprite, "position", new Vector2(400, 180), 0.6)
.SetTrans(Tween.TransitionType.Cubic)
.SetEase(Tween.EaseType.Out);
await ToSignal(tween, Tween.SignalName.Finished);
GD.Print("Arrived");
tweens.gd
await sprite.TweenPosition((400, 180), 0.6, Out.Cubic).End;
GD.Print("Arrived");
Godot's Tween
var tween := sprite.create_tween()
tween.set_trans(Tween.TRANS_CUBIC)
tween.set_ease(Tween.EASE_OUT)
tween.tween_property(sprite, "position", Vector2(400, 180), 0.6)
await tween.finished
print("Arrived")
tweens.gd
var arrive := Tweens.position_2d([400, 180], 0.6, Out.CUBIC)
await Tweens.play(sprite, arrive).end
print("Arrived")
Godot's Tween
var tween1 = sprite1.CreateTween();
tween1.TweenProperty(sprite1, "position", new Vector2(400, 180), 0.6)
.SetTrans(Tween.TransitionType.Cubic)
.SetEase(Tween.EaseType.Out);
var tween2 = sprite2.CreateTween();
tween2.TweenProperty(sprite2, "position", new Vector2(400, 180), 0.8)
.SetTrans(Tween.TransitionType.Cubic)
.SetEase(Tween.EaseType.Out);
var tween3 = sprite3.CreateTween();
tween3.TweenProperty(sprite3, "position", new Vector2(400, 180), 1.0)
.SetTrans(Tween.TransitionType.Cubic)
.SetEase(Tween.EaseType.Out);
await ToSignal(tween3, Tween.SignalName.Finished);
GD.Print("Arrived");
tweens.gd
var arrive = new Tweens.Position2D((400, 180), 0.6, Out.Cubic);
sprite1.Tween(arrive);
sprite2.Tween(arrive with { Duration = 0.8 });
await sprite3.Tween(arrive with { Duration = 1.0 }).End;
GD.Print("Arrived");
Godot's Tween
var tween1 := sprite1.create_tween()
tween1.set_trans(Tween.TRANS_CUBIC)
tween1.set_ease(Tween.EASE_OUT)
tween1.tween_property(sprite1, "position", Vector2(400, 180), 0.6)
var tween2 := sprite2.create_tween()
tween2.set_trans(Tween.TRANS_CUBIC)
tween2.set_ease(Tween.EASE_OUT)
tween2.tween_property(sprite2, "position", Vector2(400, 180), 0.8)
var tween3 := sprite3.create_tween()
tween3.set_trans(Tween.TRANS_CUBIC)
tween3.set_ease(Tween.EASE_OUT)
tween3.tween_property(sprite3, "position", Vector2(400, 180), 1.0)
await tween3.finished
print("Arrived")
tweens.gd
var arrive := Tweens.position_2d([400, 180], 0.6, Out.CUBIC)
Tweens.play(sprite1, arrive)
Tweens.play(sprite2, arrive.with_duration(0.8))
await Tweens.play(sprite3, arrive.with_duration(1.0)).end
print("Arrived")

… may your ferrets be long, and your code always short!

Section titled “… may your ferrets be long, and your code always short!”

tweens.gd is made with math & ferrets, copyright © 2026 its contributors.

Godot logo by Andrea Calabró, licensed under CC BY 4.0.

"Easy, the Ferret" illustrations drawn by foxy_maria.

tweens.gd is released under the MIT License.

Godot is licensed under the MIT License.
tweens.gd is not affiliated with or endorsed by the Godot Foundation.