Great write up and a great game!
I like your view on dependencies. For my own longer running projects I try to have as few ecosystem deps as possible because I’d prefer to keep up with bevy changes and not wait for the awesome volunteers to find time for updates :) I imagine “one day” this will get easier once bevy stabilises a little and there is less churn for maintainers!
I also hadn’t thought of your approach for hot patching UI in a separate project - I think that might make hot patching viable on Windows for a larger project :D
I agree with using observers and events in general, but one thing I’ve noticed in larger code bases is that it can make following complex logic harder. Its much easier to reason about “this system runs then this system runs afterwards” than it is to think about “async” code scattered across a larger code base. I do agree that its a great API though for passing data + events around for things where sequencing isn’t critical.
Not sure if that would help in your case, but for the missing resource, there is the resource_exists run condition? In a pinch (as an acceptable jam code smell when I can’t be bothered debugging and it doesn’t matter) I’ve sometimes just used Option<Res>…. please don’t judge me.