{"id":47508,"date":"2025-04-25T13:49:18","date_gmt":"2025-04-25T17:49:18","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=47508"},"modified":"2025-06-05T13:45:44","modified_gmt":"2025-06-05T17:45:44","slug":"is-electron-really-that-bad","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/04\/25\/is-electron-really-that-bad\/","title":{"rendered":"Is Electron Really That Bad?"},"content":{"rendered":"<p><a href=\"https:\/\/www.macstories.net\/linked\/is-electron-really-that-bad\/\">Federico Viticci<\/a> (<a href=\"https:\/\/mastodon.macstories.net\/@viticci\/114155927701232018\">Mastodon<\/a>):<\/p>\n<blockquote cite=\"https:\/\/www.macstories.net\/linked\/is-electron-really-that-bad\/\"><p>I&rsquo;ve been thinking about <a href=\"https:\/\/www.youtube.com\/watch?v=WdmfFmwsGDo\">this video by Theo Browne<\/a> for the past few days, especially in the aftermath of <a href=\"https:\/\/www.macstories.net\/stories\/the-ipads-sweet-solution\/\">my story about working on the iPad<\/a> and realizing its best apps are actually web apps.<\/p><p>I think Theo did a great job contextualizing the history of <a href=\"https:\/\/www.electronjs.org\/\">Electron<\/a> and how we got to this point where the majority of desktop apps are built with it. There are two sections of the video that stood out to me and I want to highlight here. First, this observation &#x2013; which I strongly agree with &#x2013; regarding the desktop apps we ended up having <em>thanks<\/em> to Electron and why we often consider them &ldquo;buggy&rdquo;[&#8230;]<\/p>\n<p>[&#8230;]<\/p>\n<p>As documented in the thread from late 2023, this is a common issue for the majority of AI clients built with SwiftUI, which is often less efficient than Electron when it comes to rendering real-time chat messages. Ironic.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@isaiah\/114280637960567233\">Isaiah Carew<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@isaiah\/114280637960567233\"><p>i think the weirdest part of this article is hearing that chromium is more efficient than SwiftUI.<\/p><p>is that just for specific things or is it across the board?<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@arroz\/114280798311025641\">Miguel Arroz<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@arroz\/114280798311025641\"><p>[It] seems they&rsquo;re talking about text rendering. SwiftUI is really bad at that, this is why I&rsquo;m using UIKit for the document editor in PaperVault.<\/p><\/blockquote>\n\n<p>It&rsquo;s not really surprising that Chromium is super optimized for rendering Web text. On the other hand, that&rsquo;s a common thing that apps need to do, so it would be good to have a better native story.<\/p>\n\n<p><a href=\"https:\/\/mastodon.social\/@film_girl\/114156171441210648\">Christina Warren<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@film_girl\/114156171441210648\"><p>For years, I&rsquo;ve wanted to write a post called &ldquo;The web won&rdquo; which is very similar to what @viticci wrote here -- my aim was desktop more than mobile, but this is also especially true on the iPad and to @isaiah&rsquo;s point, what makes this worse on mobile\/iPad is the state of PWAs in Safari\/WebKit.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/x.com\/steipete\/status\/1909886247964680233\">Peter Steinberger<\/a>:<\/p>\n<blockquote cite=\"https:\/\/x.com\/steipete\/status\/1909886247964680233\"><p>Man I&rsquo;m so happy I am in JavaScript land. Debugging just works and compile times are instant.<\/p><\/blockquote>\n\n<p>When I started writing apps, the availability and quality of developer tools was considered to be an advantage for native development vs. the Web. These days, I still think native APIs usually lead to better apps&mdash;though there are some awful <a href=\"https:\/\/iosdev.space\/@marcpalmer\/114363921559120326\">Catalyst<\/a> and SwiftUI apps that would have been better as Electron&mdash;but the Web tooling has <em>really<\/em> improved. I think many would now consider it a strong <em>advantage<\/em>.<\/p>\n\n<p>JavaScript got 25+ years of work from many different parties. Mac developers <a href=\"https:\/\/x.com\/krzyzanowskim\/status\/1914750299559862696\">got<\/a> <a href=\"https:\/\/x.com\/pointfreeco\/status\/1914747389631488440\">Swift<\/a>, which I generally like and much prefer to JavaScript. But, while JavaScript is gaining many of the benefits of other systems, while retaining its dynamism, Apple is <a href=\"https:\/\/x.com\/_saagarjha\/status\/1913979701649174705\">forfeiting<\/a> former strengths. Swift made <a href=\"https:\/\/x.com\/steipete\/status\/1914442303223083506\">compilation<\/a> much slower. Debugging is still slow and arguably worse than before. There are more compiler and linking bugs. There&rsquo;s no more Fix and Continue. <a href=\"https:\/\/x.com\/mronge\/status\/1912516817366433981\">SwiftUI<\/a> is more <a href=\"https:\/\/mastodon.social\/@tonyarnold\/114436333607647291\">opaque<\/a> than Cocoa.<\/p>\n\n<p>Web technologies also seem to provide a more stable development target&mdash;do you hear about Web developers planning their year around <a href=\"https:\/\/mastodon.social\/@lapcatsoftware\/114359913409408171\">seasonal<\/a> beta testing and <a href=\"https:\/\/mastodon.social\/@xjki\/114395004162462636\">breakage<\/a>?&mdash;and better documentation. An integrated development stack would seem to offer potential advantages, but offsetting that on the Web side are open source, cross-platform, distribution outside the <a href=\"https:\/\/mastodon.tz.is\/@khaost\/114396539990748668\">App Store<\/a>, and legions of developers and companies, now getting <a href=\"https:\/\/x.com\/steipete\/status\/1914388031135424660\">multiplied by AI<\/a>.<\/p>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/04\/25\/the-subjective-charms-of-objective-c\/\">The Subjective Charms of Objective-C<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/04\/14\/claude-for-mac\/\">Claude for Mac<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/04\/01\/xcode-16-3\/\">Xcode 16.3<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/03\/24\/tim-dont-kill-my-vibe\/\">Tim, Don&rsquo;t Kill My Vibe<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/03\/12\/whither-swift-assist\/\">Whither Swift Assist?<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2023\/06\/26\/elegy-for-the-native-mac-app\/\">Elegy for the Native Mac App<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/10\/04\/spark-switches-to-electron-and-subscriptions\/\">Spark Switches to Electron and Subscriptions<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/07\/14\/performance-of-microsoft-teams\/\">Performance of Microsoft Teams<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/03\/07\/mac-software-stagnation\/\">Mac Software Stagnation<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/01\/12\/catching-native-apps\/\">Catching Native Apps<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2021\/09\/06\/the-persistent-gravity-of-cross-platform\/\">The Persistent Gravity of Cross Platform<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2020\/10\/07\/the-era-of-visual-studio-code\/\">The Era of Visual Studio Code<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2020\/06\/02\/rebuilding-slack-on-the-desktop\/\">Rebuilding Slack on the Desktop<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2018\/12\/07\/electron-and-the-decline-of-native-apps\/\">Electron and the Decline of Native Apps<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2014\/08\/18\/its-a-coup\/\">&ldquo;It&rsquo;s a Coup&rdquo;<\/a><\/li>\n<\/ul>\n\n<p id=\"is-electron-really-that-bad-update-2025-04-29\">Update (<a href=\"#is-electron-really-that-bad-update-2025-04-29\">2025-04-29<\/a>): See also: <a href=\"https:\/\/news.ycombinator.com\/item?id=43796816\">Hacker News<\/a>.<\/p>\n\n<p><a href=\"https:\/\/mastodon.social\/@thaddeus\/114401448219358197\">Thaddeus Ternes<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@thaddeus\/114401448219358197\">\n<p>As usual, the commentary from @mjtsai is so spot on... The developer experience with Swift is so terrible. The language has brought many modern features to developers on Apple platforms, but at the significant cost of productivity and efficiency.<\/p>\n<p>If you spend any time on other platforms, the differences smack you in the face almost immediately.<\/p>\n<\/blockquote>\n\n<p id=\"is-electron-really-that-bad-update-2025-05-16\">Update (<a href=\"#is-electron-really-that-bad-update-2025-05-16\">2025-05-16<\/a>): <a href=\"https:\/\/royalicing.com\/2025\/apple-app-commodification\">Patrick Smith<\/a>:<\/p>\n<blockquote cite=\"https:\/\/royalicing.com\/2025\/apple-app-commodification\"><p>This previous graphics advantage has become a commodity: instead you can use Google&rsquo;s open source Skia with WebGL2 to make something just as good that works on <em>all<\/em> platforms.<\/p><p>[&#8230;]<\/p><p>Frameworks like Electron and React Native abstract away the underlying platform into an approximation. An Electron app on the Mac will largely act the same as it running on Windows or Linux.<\/p><p>[&#8230;]<\/p><p>SwiftUI is trying to homogenize the Apple platforms, which gives you a decent app for less effort, especially if it&rsquo;s cross-Apple-platform. But making something tailored for iPad or especially Mac feels like you are trying to drive a rental hatchback off-road. <\/p><p>[&#8230;]<\/p><p>Apple used to differentiate itself with software. It had differentiated first-party software built on differentiated frameworks that allow third-parties to build differentiated apps with best-of-class developer tools. <\/p><\/blockquote>\n\n<p>There&rsquo;s a spectrum between homogenization and differentiation. Electron lets you support the most platforms. AppKit and UIKit require separate implementations but potentially give better results. SwiftUI is either in the sweet spot or no man&rsquo;s land, depending on your situation and perspective.<\/p>\n\n<p id=\"is-electron-really-that-bad-update-2025-06-03\">Update (<a href=\"#is-electron-really-that-bad-update-2025-06-03\">2025-06-03<\/a>): <a href=\"https:\/\/mastodon.social\/@isaiah\/114616445425164766\">Isaiah Carew<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@isaiah\/114616445425164766\"><p>i wanted to see how Apple Mac apps deal with window resizing.<\/p><p>Xcode: nominal. pinned to top. resize looks great even when content needs to re-wrap.<\/p><p>Notes: woah! sometime content disappears off the top. sometimes doesn&rsquo;t refresh until you release the mouse. 128K Macintosh throwback.<\/p><p>Messages: oh the humanity. everything is squishy. drawing is slow. and OMG, the traffic light window buttons sometimes scroll off the top of the window. &#x1FAE3;<\/p><p>[&#8230;]<\/p><p>native doesn&rsquo;t mean what it used to.<\/p><\/blockquote>\n\n<p id=\"is-electron-really-that-bad-update-2025-06-05\">Update (<a href=\"#is-electron-really-that-bad-update-2025-06-05\">2025-06-05<\/a>): <a href=\"https:\/\/x.com\/steipete\/status\/1930650602914152692\">Peter Steinberger<\/a>:<\/p>\n<blockquote cite=\"https:\/\/x.com\/steipete\/status\/1930650602914152692\">\n<p>Native is dying, and agents will accelerate this 10x<\/p>\n<p>[&#8230;]<\/p>\n<p>One of my fav apps is made in Flutter and it feels faster than most native apps, esp the SwiftUI ones.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Federico Viticci (Mastodon): I&rsquo;ve been thinking about this video by Theo Browne for the past few days, especially in the aftermath of my story about working on the iPad and realizing its best apps are actually web apps.I think Theo did a great job contextualizing the history of Electron and how we got to this [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-04-25T17:49:21Z","apple_news_api_id":"6433c036-c6f9-420d-9a00-d8714a75d19d","apple_news_api_modified_at":"2025-06-05T17:45:47Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAABg==","apple_news_api_share_url":"https:\/\/apple.news\/AZDPANsb5Qg2aANhxSnXRnQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[1621,412,1627,1814,2597,346,30,2598,901,1812],"class_list":["post-47508","post","type-post","status-publish","format-standard","hentry","category-technology","tag-marzipan","tag-chromium","tag-electron","tag-ipados","tag-ipados-18","tag-javascript","tag-mac","tag-macos-15-sequoia","tag-swift-programming-language","tag-swiftui"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/47508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=47508"}],"version-history":[{"count":8,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/47508\/revisions"}],"predecessor-version":[{"id":47970,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/47508\/revisions\/47970"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=47508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=47508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=47508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}