Description
Changelog
Reviews (2)

Quick Add Menu adds a drop down menu in the scene dock which gives quickly accessible nodes that can be added to your scene, similar to Unreal's Quick Add menu, or Unity's right click options in the scene hierarchy.

It can be expanded to include your own custom nodes as well.

The menu's items depend on the type of node you have selected.

Bugs / Feature requests

If you notice any bugs, or have any feature requests please make a github issue describing it so I can implement the feature or a fix.

Customization

You can customize the Quick Add Menu by adding your own nodes, section headers, and groups.
Customization can be done with different function calls inside and out of the quick_add_menu.gd add_custom_items() function.

This guide is inside of the add_custom_items() function.

Custom Items

Items within the quick menu consist of a String name, an (optional) Texture2D icon, and a Callable for creating the nodes

The callable needs to return an Array[Node] to work.

The first element of the returned array will be the node added to the selected node.

func add_custom_items(): ## Add custom items
    var create_rigidbody:Callable = func(): return [RigidBody3D.new()] as Array[Node]
    var item = Item.new("Rigid Body", get_icon("RigidBody3D"), create_rigidbody)

    node_3d_list.insert(15, item) # inserting at the 15th item to be before the nodes group.

Or one with children:

func create_rigidbody() -> Array[Node]:
    var body:RigidBody3D = RigidBody3D.new()
    var collider:CollisionShape3D = CollisionShape3D.new() # Child of body

    collider.shape = BoxShape3D.new()

    return [body, collider]

func add_custom_items(): ## Add custom items
    var item = Item.new("Rigid Body", get_icon("RigidBody3D"), create_rigidbody)

    node_3d_list.insert(15, item) # inserting at the 15th item to be before the nodes group, you don't need to do this, you can just do either append or insert.

Both pieces of code should end up with this result:

Screenshot 1

Custom Headers

Headers within the quick menu consist of a String name, and an optional Texture2D icon

func add_custom_items(): ## Add custom items
    var header = Item.new_header("This is a cool header!")

    node_3d_list.append(header)

This code should end up with this result:

Screenshot 2

Custom Groups

Groups within the quick menu consist of a String name, and an int ID to identify if an item should be under that group.

Note: The root group of the whole menu has the ID 0, so you cannot use it. And if you want to add an item to the Nodes group, use the ID 1

Here is an example of creating a group in code:

func add_custom_items(): ## Add custom items
    var my_id:int = 12345
    var group = Item.new_group("My Nodes", my_id)

    node_3d_list.append(group)

Here is what it looks like:

Screenshot 3

Adding items to groups

Adding items to a group is as simple as adding the ID into the argument for a new item.

func add_custom_items(): ## Add custom items
    var my_id:int = 12345
    var group = Item.new_group("My Nodes", my_id)

    node_3d_list.append(group)

    var create_rigidbody:Callable = func(): return [RigidBody3D.new()] as Array[Node]
    var item = Item.new("Rigid Body", get_icon("RigidBody3D"), create_rigidbody, my_id) # my_id is parent_item_id argument.

    node_3d_list.append(item)

Here is what it should look like:

Screenshot 4

Adding Headers goes the same way:

func add_custom_items(): ## Add custom items
    var my_id:int = 12345
    var group = Item.new_group("My Nodes", my_id)

    node_3d_list.append(group)

    var header = Item.new_header("This is a cool header!", null, my_id) # The second argument is null because it is a reference to a texture, which we do not have.

    node_3d_list.append(header)

Here is what it should look like:

Screenshot 5

Then finally, sub-groups. Similar to the 2 examples above, adding in a sub-group is as simple as an extra argument

func add_custom_items(): ## Add custom items
    var my_id:int = 12345
    var group = Item.new_group("My Nodes", my_id)

    node_3d_list.append(group)

    var my_second_id:int = 123456
    var group_2 = Item.new_group("My Other Nodes", my_second_id, my_id)

    node_3d_list.append(group_2)

And this is what that should look like:

Screenshot 6

Adding Items / Headers / Sub-groups to sub-groups is the exact same as adding to normal groups except you just pass in the subgroup ID instead of the root group.

Changelog for version v1.1

No changelog provided for this version.

Reviews

Recommended by Lucas Carlos - 06 August 2026

much quicker than openning the full "create new node" dialog

Recommended by hammouda101010 - 30 June 2026

It's pretty ok, and a great qol feature

Login to write a review.

Consider supporting the creators!

If you enjoyed this asset consider supporting its creator. Follow the link below.