Thanks for reporting this and for providing the example project. This was a genuine bug.
When an unshown Window went out of scope, Objo released the language-level object but did not close the underlying native window. Repeating this caused native windows (and therefore memory) to accumulate.
This has now been fixed. Discarded windows automatically release their native resources, so explicitly calling Close() should not be necessary.
I retested your original project on macOS. Previously it exceeded 2.4 GB and continued climbing. With the fix, it ran for 47 minutes at roughly 237 MB, with only the main window and occasionally the window currently being constructed remaining in memory.
I also checked for a deeper object-retention problem. Tests confirm that the Objo object, its window state, and the Avalonia window all become collectible after finalisation.
The fix will be included in the next release: https://feedback.objo.dev/bug/933
Thanks again. This was an excellent catch.