Quick answer: Godot 4 resource references silently dropped when saving a tree with circular refs? Save format doesn't handle cycles - use weak references (NodePath strings) for back-pointers.

Parent has Child resource; Child references Parent. Save the parent; load it; Child's parent ref is null.

Use NodePath strings

Back-references as path strings. Resolved at load via get_node. Breaks the cycle in serialization.

Or use ResourceUID strings

For Resource-to-Resource refs. UIDs are stable across loads; cycle becomes a data structure rather than serialization risk.

Restructure to tree

Trees serialize cleanly. Cycles need flat storage with explicit lookup.

“Cycles are a data structure choice. Serializers prefer trees.”

If you find yourself fighting cycle bugs, the data model is the issue. Restructure; the cycle bugs disappear.

Related reading