On May 17, 2026, Artem Loenko, a macOS and iOS developer with nearly twenty years of experience, published a detailed account of his struggles to build a simple chat app with Markdown support using Apple’s native frameworks. Despite his expertise in SwiftUI, AppKit, and TextKit, Loenko found that native tools introduced performance lags, broken text selection, and months-long development timelines—problems that vanished when he switched to web-based solutions like Electron.

Loenko’s experiment began with SwiftUI, Apple’s modern UI framework. While he acknowledged SwiftUI’s strengths for simple screens, he described its limitations as "almost funny" when handling complex tasks like Markdown rendering. Scrolling became jumpy, and selecting entire Markdown documents built from SwiftUI primitives was impossible "by design." These issues forced him to abandon SwiftUI despite its performance advantages for basic interfaces.

Next, Loenko turned to `NSTextView` and TextKit 2, Apple’s newer text-rendering framework. While TextKit 2 offered improvements, it clashed with SwiftUI, forcing him to discard prior testing and performance optimizations. Streaming text—critical for modern chat apps—caused CPU spikes, and integrating it with SwiftUI proved unworkable. Loenko noted that these challenges were not just technical hurdles but fundamental mismatches between Apple’s tools and the demands of 2026’s app ecosystem.

Frustrated, Loenko reverted to AppKit and `NSCollectionView`, Apple’s older but more mature frameworks. While these tools delivered better performance, they introduced new problems: cells blinked unpredictably, and text interactions remained unreliable. Even after stripping SwiftUI entirely and rebuilding with AppKit, Loenko faced manual workarounds for expanding text chunks. He described the experience as a constant battle, with basic features like context menus and accessibility breaking at every turn.

Loenko’s final native attempt involved TextKit 2 in isolation. Performance improved, but streaming text remained "terrible," and the framework’s incompatibility with modern tools like SwiftUI made it impractical. He concluded that Apple’s native SDKs, while powerful for simple interfaces, were ill-suited for apps requiring rich text rendering, flexible typography, or dynamic content. The realization left him questioning why Apple’s tools lagged behind web-based alternatives for these use cases.

After months of experimentation, Loenko turned to WebKit to render Markdown. The results were immediate: performance stabilized, typography improved, and he regained control over text interactions. However, even WebKit had caveats, and Loenko ultimately generated an Electron project as a last resort. To his surprise, Electron delivered out-of-the-box solutions for text operations, Markdown rendering, and even Git diffs—features that had eluded him in native frameworks. He described the experience as "amazing."

Loenko’s post highlights a broader trend: most new chat-heavy apps, which rely on rich text and dynamic content, are built using web-based tools like Electron or React Native. He argued that this shift is not about convenience but necessity. Native frameworks like SwiftUI, while performant for simple screens, become constraints when developers need advanced text rendering or streaming capabilities. The trade-off, he noted, is no longer between "quick" and "proper" solutions but between viable and unviable ones.

The developer’s frustrations underscore a critical gap in Apple’s ecosystem. While Swift and SwiftUI excel in performance-critical tasks, they lack the flexibility and maturity needed for modern app patterns like long-form chats or collaborative text editing. Loenko’s experience suggests that even seasoned developers struggle to achieve feature parity with native tools, let alone match the speed and reliability of web-based frameworks. His post sparked discussions on Hacker News, where other developers echoed similar challenges.

Editorial standards. Reported and edited at Startupniti's news desk from the sources listed in the right rail. Every fact traces to a citation. If something looks wrong, write to corrections.