Description
Changelog
Reviews (0)

Checks your node groups — add_to_group, is_in_group, get_nodes_in_group and the Node panel's Groups tab — for the one failure mode nothing else in Godot can ever catch: a typo'd group name.

The problem

A node group is a plain string, everywhere, with no exceptions. There is no enum, no autocomplete that spans files, and critically, no warning of any kind when the two sides disagree:

# enemy.gd add_to_group("enemy")
# spawner.gd for e in get_tree().get_nodes_in_group("enemies"): # typo — silently empty, forever e.queue_free()

Both lines are completely legal GDScript. Run the project and nothing prints, nothing turns red in the editor, nothing shows up in the debugger — get_nodes_in_group("enemies") just always returns an empty array, every frame, until someone notices the enemies never actually get cleared and spends an hour stepping through the wrong function before checking the group name. is_in_group() does the same silent-false thing, and so does the Node dock's own Groups tab: it will happily let you type a brand new group name that nothing else in the project has ever heard of, with zero indication you just created an orphan.

What it does

  • Scans every .gd file for add_to_group(...) calls and every .tscn for the groups=[...] property the editor's own Node > Groups panel writes — together, these are every way a node actually joins a group.
  • Scans every .gd file for is_in_group(...), get_nodes_in_group(...), get_first_node_in_group(...), get_tree().call_group(...) and remove_from_group(...) — every way a group name gets referenced.
  • Flags a reference to a group that nothing in the project ever joins. If an existing group name is a close text match (one added, missing or swapped character — the classic singular/plural slip or fat-fingered letter), the result names it directly: "did you mean 'enemy'?"
  • Flags a group that nodes join but that nothing in the project ever queries — a heuristic "possibly unused group," always Low confidence, since a group can legitimately be meant for a tool script or a future feature.
  • Double-click a result to see the exact file, line and reasoning.
  • "Export Markdown" writes group_audit_report.md for a PR or issue.

Every regex is anchored to the exact argument syntax Godot 4.x actually accepts (plain string, &"StringName" literal, or a bare identifier), and a commented-out line is never counted as a real join or a real reference.

A quick example

add_to_group("checkpoint") ... get_tree().call_group("checkpiont", "activate") # flagged: did you mean "checkpoint"?

Works with

Godot 4.2 and later (tested on 4.7). Pure GDScript text scan — no project settings are changed, no files are modified except the optional Markdown export you trigger yourself.

Installing it

Drop addons/group_reference_auditor into your project's addons/ folder, then enable Group Reference Auditor under Project > Project Settings > Plugins. A new dock tab appears on the left. Click Scan Project.

License

MIT. See LICENSE.

Changelog for version v1.1.0

2026-11-03 23:39:31

No changelog provided for this version.

Reviews

Group Reference Auditor has no reviews yet.

Login to write a review.

Consider supporting the creators!

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