This repository accompanies the article "UIKit Is Not Dead: Why We Still Use It for Navigation" and contains two internal SwiftUI navigation experiments.
This prototype tries to bridge imperative coordinator flows into SwiftUI by introducing custom glue layers (NavigationStackWrapper and CoordinatedViewAdapter).
It worked as a proof of concept, but the architecture became fragile: tight coupling between wrapper components, PassthroughSubject-driven routing, and timing-sensitive updates that sometimes required async delay workarounds. In practice, it added significant maintenance overhead to reproduce behavior that UINavigationController gives natively.
This prototype keeps the coordinator style but exposes an API that mirrors UIKit semantics (push/pop, present/dismiss, reference-based controllers).
The result was predictable and easier to reason about than Solution1, but it also made one thing clear: we effectively rebuilt UIKit concepts on top of SwiftUI. At that point, the SwiftUI navigation layer provided little practical benefit over using UIKit navigation directly.
Both experiments reinforced the same outcome from the article: SwiftUI is excellent for building screens, while UIKit remains the more reliable choice for complex app navigation.