Native all the way, until you need text

(justsitandgrin.im)

162 points | by dive 2 hours ago ago

105 comments

  • pornel an hour ago

    Usually performance was the reason for using native APIs rather than web views, but this doesn't seem to be true any more.

    Browser rendering engines are pretty mature at this point, with significant GPU acceleration, and over a decade stress-testing by bloated web apps.

    Meanwhile SwiftUI doesn't feel particularly fast. Apple's latest and greatest rewrite of System Preferences has dumbed down the UI to mostly rows of checkboxes, and yet switching between sections can lag worse than loading web pages from us-east-1.

    • embedding-shape 39 minutes ago

      > Browser rendering engines are pretty mature at this point, with significant GPU acceleration, and over a decade stress-testing by bloated web apps.

      Even so, there is a stark difference, even more so on low-powered devices, between native apps and even the lightest of browser apps. I'm traditionally a web developer, but started developing native cross-platform applications the last 6-12 months, and the performance gap is pretty big even for simple stuff, strangely enough.

    • rubymamis 25 minutes ago

      It's SwiftUI that is at fault here[1][2], not native apps in general. I wrote my native app in Qt C++ and QML and showed that it is *significantly* faster and uses significantly less RAM than similar web apps[3]. So, no, web apps, in general, are slower and uses more resources than well-engineered native apps.

      [1] https://notes.alinpanaitiu.com/SwiftUI%20is%20convenient,%20...

      [2] https://x.com/daniel_nguyenx/status/1734495508746702936

      [3] https://rubymamistvalove.com/block-editor#8-performance

      • StilesCrisis 15 minutes ago

        Qt is the opposite of native. It's just reimplementing the look and feel of a native app, but the seams are extremely visible.

        • jeremyjh a minute ago

          If you follow the first link they gave to their blog article, it explains this distinction in significantly more depth.

    • krzyzanowskim 18 minutes ago

      SwiftUI, (but not specifically "SwiftUI", more of paradigm) is not the right tool to incremental changes of large portion of data, and SwiftUI specifically is very bad at it and offer no good API to make incremental changes more optimal. That's one of the reason behind why Apple to this day did not ship usable SwiftUI text view component.

    • titzer 9 minutes ago

      > Browser rendering engines are pretty mature at this point, with significant GPU acceleration, and over a decade stress-testing by bloated web apps.

      They suck on older hardware. Old Chromebooks are a dime a dozen and are decently spec'd light use or purpose-use machines. Browsers run like crap on them.

    • ajross a minute ago

      This is the ActiveX/nacl/wasm/etc... argument recapitulated. For decades, people dithered about how to get fast code into browser environments such that it could be deployed safely.

      Then the V8 team at Google just asked "well, what if we just made Javascript crazy fast instead?", and here we are. There's still room for native code in environments that don't map nicely to scalar scripting languages, but not a lot of room. Basically everyone is best served by ignoring that the problem ever existed.

      It took the rendering side a little longer, but we're here nonetheless. There's still room for specialty apps with real need to exploit the hardware in ways not abstracted by the DOM (not 100% of it is games, but it's close to that). But for general "I need a GUI" problems? Yeah, just use Electron.

    • tom1337 16 minutes ago

      System Preferences also sometimes just render a WebView - most notably in the Apple Account settings

    • iTokio 21 minutes ago

      Well, maybe for simple web apps, but for complex applications there is a noticeable slowdown, I am not even talking about monsters such as jira, but well optimized apps such as vs code, there is a performance ceiling which is lower than for native apps.

      • StilesCrisis 14 minutes ago

        According to the article, native is slower though.

        • CharlesW 2 minutes ago

          TFA actually says the developer couldn't figure out how to do this with native APIs, not that they're slower: "But I still cannot make a simple thing work properly: a chat with Markdown & the ability to select a whole message."

          Electron ultimiately sits on native APIs, and has its own performance costs on top of them.

    • Dwedit 34 minutes ago

      Now RAM use is the main reason to prefer native APIs over web views.

    • latexr 34 minutes ago

      > Meanwhile SwiftUI doesn't feel particularly fast.

      That’s because SwiftUI isn’t particularly good, not because web rendering is as good as native. AppKit still runs circles around both, in performance and resource consumption.

  • Wowfunhappy an hour ago

    If you're on macOS, WebKit is a native OS framework. Using WebKit to render Markdown seems completely appropriate.

    Now, if you're rendering everything with WebKit, that's ridiculous, in the same way rendering everything with PDFKit would be ridiculous. But for a Markdown view, WebKit seems like a logical choice. There's no need to subsequently flip the table and replace everything with a Chromium web app.

    • tantalor 22 minutes ago

      OP thinks "native" = only using Swift/ObjC primitives

      WebKit is cheating I guess? Because it exists on other platforms?

      Might as well use Java

    • the_gipsy 16 minutes ago

      > Using WebKit to render Markdown seems completely appropriate.

      It doesn't? Needs an explanation.

      • throawayonthe 8 minutes ago

        markdown is a markup language 'intended' to be rendered as HTML, WebKit seems appropriate to render HTML

    • stavros an hour ago

      But why would you expect to use WebKit to render rich text? If using an HTML/CSS/JS renderer to render text is "completely appropriate", what isn't appropriate for it? Why would you not render everything with it?

      I don't understand how you go from "rendering text is completely appropriate" but then "rendering everything is ridiculous".

      • Wowfunhappy an hour ago

        I mean, this is why I think PDFKit is a good comparison. Could you render your app's entire UI as a series of PDFs? Absolutely! Should you do that? Uh, probably not. You should use the native controls Apple gives you for buttons and dialogs and input fields and so on.

        But WebKit is the native UI for HTML, and Markdown is intended to be transpiled to HTML.

        • carlosjobim 3 minutes ago

          If think that the MacOS GUI is actually entirely rendered as a series of PDFs, if I have understood things correctly.

        • stavros an hour ago

          It's irrelevant what Markdown was meant to be transpiled to. When people say "Markdown support" these days, they mean "rich text support", since Markdown is actually just ASCII. It is ridiculous to need a Web renderer to render rich text, on any platform. Even terminal emulators can do it.

          • Wowfunhappy an hour ago

            HTML is basically analogous to RTF, no?

      • p-e-w an hour ago

        > But why would you expect to use WebKit to render rich text?

        Because rendering rich text correctly and consistently is one of the hardest problems in software. Bidirectional text, a million glyph shaping complexities, mixed content such as inline images and different text sizes, reflow that should take milliseconds, natural-feeling selection, etc etc.

        No implementation comes even close to browser rendering engines in covering all of these.

      • joenot443 an hour ago

        > what isn't appropriate for it?

        It'd be very silly to render a shader pipeline in WebKit. You could, but with Metal sitting right there, it would be silly.

        • stavros an hour ago

          If we're all agreeing that all the native elements are useless, I can see how the question is "do I use Metal or do I use WebKit", but my question wasn't about WebKit vs metal, it was WebKit vs native elements.

    • dive an hour ago

      Yeah, this is actually my current in-progress solution: render the final Markdown & the streaming through WebKit.

      And yes, I agree: on macOS, WebKit is a native OS framework. In that sense, it is "native". But I think it also supports the broader point I was making: if you want to work with rich text, Markdown, selection, typography, and long-form formatted content properly, web technologies quickly become the only viable option. I am not saying that using WebKit for a Markdown view is wrong. Quite the opposite, it is probably the most reasonable option available. The problem is that the "native" solution here is still effectively a web-rendering solution. There is a cost. Each `WKWebView` brings a WebKit engine with its own performance & memory overhead. So you cannot just sprinkle `WKWebView` everywhere & pretend it is free native macOS component as any other. My frustration is mostly that this is the answer. For this kind of UI, SwiftUI / AppKit / TextKit still do not give you a clean, modern, composable path that feels better than "just use WebKit".

      • Wowfunhappy 17 minutes ago

        > But I think it also supports the broader point I was making: if you want to work with rich text, Markdown, selection, typography, and long-form formatted content properly, web technologies quickly become the only viable option.

        But, like, of course they are. This is what HTML was built for. The other major standard would probably be RTF, but it's a bit less structured, and so less close to Markdown. HTML is the better pick.

        If you subsequently want to style that HTML, so that every second-level heading uses a specific font, and every third-level heading uses some other font, and so on, CSS is the best way to do that.

        So, yes, we're saying the same thing, but to me it's a bit like saying "If you want to find the answer to 2 + 2, addition is the only viable option." Well, yes!

        I think the reason this feels kind of wrong is because that same HTML and CSS renderer you're using for Markdown also comes with an entire 3D graphics pipeline and audio synthesizer. Obviously, we should be able to answer 2 + 2 without opening Mathematica.

        I guess the important technical question is whether simply creating a WKWebView also loads in all that other stuff. I would hope and expect the OS is smarter than that, and you can call WebKit for simple HTML without everything else coming along.

  • skeledrew an hour ago

    > how immature all these “native” things still are when you step outside simple screens

    Well yeah. If people don't invest sufficient effort in a thing why would there be an expectation for that thing to become mature? People are locked into web tech because that's where the greater majority of the effort has been going. Quite literally people look at native, say it isn't developed enough, and go develop for the web even more. Cycle repeats. Hardly anyone wants to put in the effort to improve native when things already "just work" for the browser.

    • DrewADesign an hour ago

      Sure, but those the native UI dev kits are commercial products, right? Isn’t it their job to sell them to people — not people’s job to sell themselves on it? Part of the reason web stuff is so much more mature is the unwillingness of the big commercial OS manufacturers to keep up with the times. Windows UI kits are a hot fucking mess.

  • lenkite an hour ago

    > But I still cannot make a simple thing work properly: a chat with Markdown & the ability to select a whole message.

    Sorry, sounds like bullsh_t. One can leverage mature markdown renderers in SwiftUI. See https://github.com/gonzalezreal/swift-markdown-ui and its next gen replacement https://github.com/gonzalezreal/textual .

    Used these myself and had no issues. And I am a moron who doesn't like Swift or SwiftUI - preferred Objective-C, but still managed to do this, without any LLM help.

    • dive an hour ago

      I tried Textual earlier today with some not-so-good results:

      - Static completed Markdown scrolling fails the new focused probe. Result: p95 18.86 ms vs 16.7 ms budget, max 232.49 ms.

      - Long live Markdown/code update path also fails. Result: p95 59.33 ms vs 16.7 ms, max 75.94 ms. This is a separate but related stress case around large rich text surfaces during updates.

      - Long-history scaling technically passes, but the numbers are not smooth-frame healthy: - 120 turns: total p95 21.35 ms - 500 turns: total p95 23.11 ms - 1000 turns: total p95 36.77 ms

      Technically, it is not bad. However, it is a bit slower than my own solution & has similar performance gaps, mostly related to SwiftUI rather than the Textual implementation.

    • simonw an hour ago

      Can those handle streaming in new text without flickering?

    • SoKamil an hour ago

      The first one is the Claude iOS app uses and it seems to perform okay and has the ability to select text and stream stuff.

  • danielvaughn 2 hours ago

    I remember being a junior engineer in 2015, and being asked to render a clickable link within a paragraph in an iOS app. Swift had just been released so we were still entirely on the ObjC/UIKit stack. It was an absolute nightmare. I _barely_ managed to make it work. I haven't really touched iOS since about 2016, so I assumed the new SwiftUI stuff would have this stuff built in. Obviously. Kind of insane that it wasn't.

    • joenot443 an hour ago

      It's quite literally called Link

      https://developer.apple.com/documentation/swiftui/link

      I'm not sure how much easier they can make it at this point.

      • danielvaughn 43 minutes ago

        When I say "this stuff" I'm not talking about a link, I'm talking about the overall markdown/text capabilities that the post is talking about. I meant that I expected more parity with what you'd encounter on the web.

        • PaulDavisThe1st 15 minutes ago

          You expected highly capable, generic GUI toolkits to show parity with a development environment that has specifically targetted text above all else (though with lots of other stuff and great depth too) for decades?

          Even in an era of PWAs and highly reactive UIs, the web is still fundamentally a document presentation mechanism. No generic GUI toolkit fits that description (even if they can be coerced into being one).

    • nly an hour ago

      Qt made this pretty easy 10 years ago

    • sirwhinesalot an hour ago

      NSLinkAttributeName?

      • Y-bar an hour ago

        My thought exactly. However, Apple’s developer documentation has never been particularly helpful, so I don’t blame very much for missing that.

    • jagged-chisel an hour ago

      I thought attributed text handled this fine since forever. Did it not?

      • ben_w 5 minutes ago

        I vaguely remember doing this with attributed text for iOS 4.

        That said, I also had quite a lot of success on iOS 4 using HTML as the layout engine for the main screen of the app, though the place ran out of money before that went anywhere.

        HTML can be really good, the blockers back then were it not being exactly the same as the Apple UI guidelines unless you put in a huge amount of extra work that nobody wanted to spend. I'm not sure when Apple's own guidelines stopped mattering exactly (iOS 7's invisible buttons necessarily had to be ignored, but there was already a decent level of custom UI before them and it was already essentially irrelevant even before Apple became extra-inconsistent with Liquid Glass), but I think we're now at the point where you only follow those guidelines if you (a) don't have your own UI team, and/or (b) want to try to aim for a shout-out from Apple.

      • dive 32 minutes ago

        Do not know about "forever", at the moment it works okay, I guess. But for a long long time most of the iOS apps were using this https://github.com/TTTAttributedLabel/TTTAttributedLabel to have proper support for links & other basic attributes.

  • rTX5CMRXIfFG 2 hours ago

    Show your code, or show you the door. There are so many native Mac and iOS apps out there right now perfectly capable of rendering Markdown and streaming text. You just gotta wonder what is this guy’s excuse.

    • replygirl an hour ago

      OP says "you want to select a whole Markdown document built from SwiftUI primitives", but who wants that? what sort of product thinking tells us we want that? that sounds like a document editor, which has been hard to build for decades and sounds out of scope for an llm chat ui. everyone has landed on only supporting selection within each contiguous block, with a copy button for the entire message

      • jeroenhd an hour ago

        LLMs are often used to generate Markdown because they're quite good at it and unlike HTML it's very forgiving.

        Rendering text into things like chat bubbles or even just generic output panes as it comes in is a massive pain. Every new word requires redoing layout, detecting LTR versus RTL flows and overrides, figuring out word breaks and line breaks, possibly combined with resizing the containing UI element (which involves measuring the render space, which is often implemented by rendering to a dummy canvas and finding out the limits).

        Document editors have it relatively easy because humans type at a relatively low speed and pasting is a single operation (although pasting large amounts of text does hit the render performance of the UI). They're also often provide relatively limited features on phones.

        If you want to render something like ChatGPT with similar features in native UI, youre going to need to find a fully-fledged document component or build one yourself. And, as it turns out, we have document components that work quite well: web engines.

        If you embed a webview rendering just HTML and CSS, you get better performance, features, and accessibility than any home-grown renderer will provide. And with every major OS coming with a browser built in, it won't even bloat your app.

      • Klonoar 31 minutes ago

        sounds out of scope for an llm chat ui

        What? No. This is like building a Slack clone without the ability to copy a stream of messages. It is entirely reasonable to want to do this.

        • StilesCrisis 10 minutes ago

          Slack also basically fails at this. You end up getting a jumble of timestamps, names and messages.

          • Klonoar 5 minutes ago

            Yeah... people expect that when they copy chat messages. It's correct behavior.

    • rafaelmn an hour ago

      Without web view ? Share the code ?

  • splittydev 2 hours ago

    I've had pretty much the same experience with my AI chat app. Nothing works well. Markdown rendering is slow and laggy, streaming is slow and laggy, everything locks up the UI. I've tried at least 5 of the most popular text editor components for UIKit and SwiftUI on GitHub, and all were broken in one way or another, buggy, and slow as well. It's ridiculous.

  • krzyzanowskim 34 minutes ago

    "skills issue" but also "native" frameworks are lacking polished API. On macOS TextKit2 is unfortunately kinda broken, how do I know? I reimplemented TextView with it https://blog.krzyzanowskim.com/2025/08/14/textkit-2-the-prom...

    • dive 23 minutes ago

      Hey Marcin,

      Skill issue, I guess. I even tried your SSTextView (which is a very nice piece of software, by the way), though it does fit here, but I tried to understand how wrong my TextKit2 implementation is. In my tests, the SSTextView performed a bit worse with p95 on the static markdown scroll test (70.20 ms vs 16.7 ms for per frame rendering). But it is clear from the traces that SSTextView just does too many things I do not need. At least, I had my confirmation that I am not completely wrong about TextKit.

      • krzyzanowskim 15 minutes ago

        totally. the there's a lot complexity that adds up to the overall performance issues. and TextKit 2 IS pretty bad at things. especially public API is pretty bad - that result in my case need to workaround things that I should've not. I agree with the general sentiment et all. I also still believe there is a place without bringing the whole browser machine to render text, and have text under control - but without relying on the "TextKit" level. That's the next thing I'm researching right now.

  • rubymamis an hour ago

    Yep, this is a difficult problem. I wrote extensively how I managed to solve this by creating my block editor from scratch using Qt C++ and QML[1]. I faced similar issues - selection between discrete blocks, showing the underlying Markdown under the cursor, varying delegate sizes, etc.

    I'm using what I learned to create a native LLM client with a streaming Markdown parser[2].

    [1] https://rubymamistvalove.com/block-editor

    [2] https://www.get-vox.com

  • sirwhinesalot an hour ago

    If you need to display HTML content (what Markdown usually translates to) then WKWebView is the control to use! Or use something like litehtml which should be more than enough for Markdown unless you want to support "Animated Gifs" (that are actually H.264 movies these days) or whatever else.

    You can still use native controls for the rest of the UI and have 0 Javascript running. I'm not sure I understand what the problem with NSTextView was though. It's pretty performant as far as I can tell?

  • zhxiaoliang 16 minutes ago

    I understand your pain. That’s why I’ve ported my VMPrint layout engine to Rust. It’s early, but it already shows promising performance improvements over the original TypeScript-based engine, which is already very fast. The Rust version can create fully paginated, publishing-grade layout at around 8,500 pages (or 2,000,000 words) per second on a M4 MacBook. It’s even faster at advanced tasks like mixing texts with irregular exclusion fields. The TS version can do it under 1ms, but I don’t have a measure yet for the Rust version. Unfortunately, people have shown little interest in this kind of components, so I’m no longer inspired to release it in its raw form like I did with VMPrint. My plan is to use it to build a native markdown editor first to test it more fully and just to have fun with it, LOL.

    • lewisjoe 12 minutes ago

      Just checked out VMPrint and it's crazy! Keep up the efforts. If you/someone could get a HTML/CSS input layer in front of VMPrint that would be a killer feature? Or is it possible already?

      • cluckindan 6 minutes ago

        HTML/CSS is notoriously bad for print.

        Basic text styles are ok, but things like authored pagination, page header/footer, mirrored margins, margin notes, footnotes and references are basically unsupported or need to be hacked together.

  • Yokohiii 23 minutes ago

    I am currently experimenting with linux based GUIs. It was always something that felt clunky to me, but now with more insights, it's clunky for a reason. If you need more then a framebuffer, then rendering something sophisticated to the screen is insanely complex. Somehow it's easy to expect that rendering text on a screen should be easy, but when you go down the layers you find yourself with a club and a flint stone trying to build a castle with it.

    Wayland is another product of this hardships, going wayland native seems only feasible when all stars align around it. But then you are stuck in that place.

    That being said, without deeper knowledge about SwiftUI, I find it a bit odd to expect so much from a novel concept. Native desktop dev is already kind of niche, considering the dominance of web dev. Chrome (and it's artifacts) is probably the best funded software in the world and google's incentive to improve it is above all. It's not a miracle that it just works. It's effort and tons of cash.

    • PaulDavisThe1st 18 minutes ago

      > Somehow it's easy to expect that rendering text on a screen should be easy

      This is a common misconception among programmers, and is actually the opposite of the truth. Drawing arbitrary geometric shapes is easy, rendering text correctly is insanely difficult because ... humans.

  • ryandrake 2 hours ago

    I don’t recall ever struggling with NSTextView. I never really got into Swift, but I’ve never found Cocoa / Objective C to have any of the problems the author mentioned.

    Not exactly sure what “streaming” text is, but serial terminal software has been handling incremental text rendering and updating for decades, without performance struggles.

    • dive an hour ago

      `NSTextView` is good. My point is not that `NSTextView` itself is bad. The problem is that once you are working with all the "modern" Apple stack (Swift, SwiftUI, and the direction Apple is clearly pushing developers towards) `NSTextView` does not fit as naturally anymore. Some newer APIs are not even available for AppKit now, so you quickly end up in an awkward middle ground.

      By "streaming" text, I mean a formatted text stream that has to be parsed, formatted, and appended on the fly - basically how every model/AI chat works now. And this is where `NSTextView` becomes tricky. It forces an interesting architectural choice: either go deeper into AppKit with `NSCollectionView`, custom cells, manual layout, etc., or fight the whole SwiftUI model by embedding something like `NSTextView` inside `LazyVStack` / SwiftUI views & then dealing with all the integration problems.

      So I am not saying Cocoa / AppKit was always bad, or that `NSTextView` is useless. I am saying that for modern chat-style UI with incrementally rendered formatted text, it does not compose well with the rest of the modern Apple stack.

  • PaulHoule 2 hours ago

    Yep. Electron is the worst way to make a desktop app… except for all the others!

  • ozgrakkurt 16 minutes ago

    The problem here is that you are not choosing based on knowing how the render pipeline is implemented in these tools and how it would work with your usage of it.

    You can do a couple days to a week of reading to understand the fundamentals once and then you will actually know what you are doing.

    It is not proper to choose things on “battle tested” or other meaningless words

  • StilesCrisis 17 minutes ago

    Everyone loves to complain about the "bloat" in Chrome, but how many have actually taken the time to measure it against a native rewrite? Love this article. We take so much for granted in the modern WebKit/Blink stack. Modern multilingual text processing is a genuinely hard problem.

  • d12bb an hour ago

    Why not use native for UI frame (menu, toolbar, conversation list etc) and WebKit for the actual chat? I think that would combine the best of both worlds.

  • lewisjoe 16 minutes ago

    If you squint enough, you'll see the official Google doc app for Android/iOS is a webview (i.e the editor part)

    Fancy text rendering/editing is hard to implement when you leave the luxury of webviews.

  • cyber_kinetist 2 hours ago

    I just wish there was a native Markdown renderer / editor library in C that I can use cross-platform - in the style of something like IMGUI (where the library outputs a list of primitives for you to render yourself in any graphics API).

    Or well... since we now have Claude I might have a jab at this someday in my free time.

    • nicoburns 2 hours ago

      For just rendering (no editing) you could use https://github.com/litehtml/litehtml (C) or https://github.com/DioxusLabs/blitz (Rust).

      Both are actually lightweight HTML rendering libraries, so you need to compile markdown to HTML to use them. But there are many libraries for that.

      • bobajeff 38 minutes ago

        The link says litehtml is C++. I can't tell if it exposes an FFI (I bet not)

        Of course blitz doesn't expose a FFI either and also if you need anything interactive you have to use the dioxius framework or implement you own APIs for that as well as take care of animation yourself.

      • cyber_kinetist an hour ago

        Does it mix well with text input? What I really want is a native WYSIWYG Markdown editor - in a similar fashion to Typora (Electron) or Milkdown (a JS library).

        • nicoburns an hour ago

          Blitz has good plaintext text input support. But there's no contenteditable (which is what you would need for rich text editing) yet.

          litehtml appears to have no built-in text input support so far as I can see.

  • teddyh 33 minutes ago

    I know nothing about any of these APIs, but the claim of the article seems weird. If naitive APIs are insufficient, or slow, or unsuitable, and implementing your own is too hard, then how does Electron even do what it does? One would assume that Electron has its own library to accomplish the task, in which case this code could either be separated, or re-created once and for all, into its own re-usable library.

    • jeremyjh 14 minutes ago

      > I know nothing about any of these APIs

      Agreed. In Chromium all the content from HTML is rendered inside a single object from the point of view of the host UI; much like a game engine’s UI rendering. Chromium draws everything itself. Host events like mouse and keyboard events are sent to that top level object (although there are some shenanigans involved to make it look more native to accessibility tools).

    • tantalor 19 minutes ago

      Electron is just a thin shell around Chromium

  • titzer 10 minutes ago

    Electron runs like crap on older hardware. It's sad that native UI frameworks never got their shit together, but I think if you want performant text rendering you just gotta reduce your expectations. If you're fine with less fancy fonts and "scripting" your UI in something else than JS, then native can work. But it very quickly reveal that you should avoid everything that uses JSON. JSON is just a disease vector for the JavaScript world to infect everything else.

  • chromadon 2 hours ago

    This is where QT/JUCE can help. Although you are limited to c++.

    • bluGill an hour ago

      It is tricky, but it is not unheard of to write Qt applications as something other than C++.

      • rubymamis 15 minutes ago

        These days you write the logic in C++ and UI in QML which is a very pleasent experience.

  • waynecochran an hour ago

    This explains why so many AI chat tools suck at text selection on MacOS / iOS. They got the streaming and markdown part right … flicker free, but at the cost of text selection.

  • delduca 31 minutes ago

    How bear solves this? It is looks native to me.

  • tantalor 26 minutes ago

    No insight as to why this is happening?

    Where is the profile? Where is the bottleneck?

    Just complaining with nothing to contribute.

  • inatreecrown2 2 hours ago

    Not just text. Try to build a ui where you need non-trivial and non-standard behavior and SwiftUI will fail. AppKit is still better in this regard.

    • CharlesW 34 minutes ago

      > Try to build a ui where you need non-trivial and non-standard behavior and SwiftUI will fail.

      I think this may be a misundertstanding of what SwiftUI is. SwiftUI makes it convenient to create apps that look and behave in a way that align with Apple's HIG using controls like `List`, `Form`, etc., but nothing makes you use any of those. For example, it's straightfoward to build a game engine on SwiftUI. https://blog.jacobstechtavern.com/p/swiftui-game-engine

  • pjmlp an hour ago

    I was using Markdown text editors with WPF back in 2012....

    And yes WPF is a framework native to the Windows platform ecosystem.

  • usernametaken29 2 hours ago

    Kotlin MP is also pretty decent on Mac

  • BillStrong 8 minutes ago

    I think the article misses the actual point?

    The browser is faster because they went native, in particular, GPU.

    Every issue described is text rendering related. Everyone.

    And I would bet most of the SwiftUI issues could be solved with a text render cache.

    Something like Casey Murati's refterm toy that showed what that can do with no other optimizations, or the work for GPU accelerated terminal emulators like alacritty or ghostty.

  • saagarjha an hour ago

    You can just embed a web view in your app, though?

  • BoredPositron an hour ago

    Hu? We just switched from textual to native because native markdown rendering is finally good. If it was written a year or two ago ok... but now is odd.

  • diego_moita an hour ago

    Outside of niche applications (e.g. virtual desktops, gamming, embedded systems) native UIs are dead.

    There are even parts of both Windows and MacOS rendered through HTML. If I remember correctly, at least in Windows 10, File Explorer was rendered through Internet Explorer.

    Web rendering doesn't need to be only through Electron/Node. There are other libraries much more performant and lean (Dioxus, etc).

  • distantsounds 43 minutes ago

    do you miss Hypercard yet?

  • elch 2 hours ago

    How is "performance" defined? Does it take into account the amount of memory required in each case?

    • Filligree 2 hours ago

      The purpose of limiting memory use is so your computer does not become laggy as you run out of memory. We don’t do it for its own sake.

      But then, what’s the point in using an inherently laggy technique to save memory?

      • dive an hour ago

        Was going to answer almost the same.

        This is my pet project, a desktop app for working with xAI models & capabilities, so by "performance" I mostly mean "pleasant to use" (as it goes, simple & opinionated). Technically speaking, something like: stable FPS, no visible lags, and the ability to scroll smoothly while the model is streaming.

        Regarding the parent comment: yes, memory is important, and I absolutely get the point. There should be a red line, for sure. But I will not sacrifice UX, productivity, and simple pleasure from using software just to save a few hundred megabytes of RAM (or even a few gigabytes) especially for an app I spend hours with behind the screen.

        Memory consumption can & should be optimised with proper engineering for sure. As lags & inadequate performance in basic SDK-level primitives are much harder (impossible?) to fix from the outside.

      • desdenova an hour ago

        The purpose of not wasting memory is so we have free memory to use productively.

        What's the point of having 64-128GB of RAM if we're using apps that eat 10GB to do the same things we were doing 20 years ago using a few MB?

      • elch 2 hours ago

        How about running many tasks on the machine at the same time?

        • skeledrew an hour ago

          Apparently devs forget that there are other apps running on the target machines. It's OK to just gobble as much of the resources as possible.

          • elch an hour ago

            I am sure that they use MacBook Neo for development. /s

    • dist-epoch an hour ago

      first you make it correct, than you make it fast

      a fast performant incomplete solution will lose to a slow correct complete one

  • dist-epoch an hour ago

    the only place where native UI is still better is for ultra-complex UIs - image/video/3d/audio editors. and only because it's easier to create custom UI widgets/renderers than on web stack.

    that's it, for everything else native UIs are complete garbage compared to HTML/CSS/reactive frameworks.

  • vasco an hour ago

    I once tried mobile development in semi early days android. At the time I made a free Hackaday reader app because I was a daily reader and loved it.

    I remember spending 4 hours to make a scrollable element that wasn't jumpy or buggy. There were several stackoverflow answers full of gotchas explaining all you had to do. I finished and published the app but never again. Native stuff has terrible developer experience.

  • camgunz an hour ago

    I thought models were so good we could vibecode a text renderer for $50. What's the problem here? /s