Correct! That's why I listed them under "other". One seems to be their new SMS 2FA functionality causing high CPU usage, the other seems to be private window APIs causing high GPU usage.
If this comment is to be believed, it's not Apple's fault. It's the apps mucking around with the internals of AppKit.
This example just happens to illustrate two of my least favorite software engineering practices: (1) despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation; (2) a piece of code has different behavior depending on the identity of a function, contrary to the principle of extensionality.
> despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation
That's inherent on the way current computers manage the memory. And I don't know if the gains are enough to pay for the loses of guaranteeing encapsulation.
One could reach for static analysis, but that would imply some restrictions on the machine's assembly. Those are probably worth it.
> a piece of code has different behavior depending on the identity of a function
I have written my quota of "find the latest caller on the stack with property X, verify if it has access", on different languages. Some times a function can't in any way be just a function.
I don’t understand what goes through the developer’s mind. A method is marked as private. It’s documented as not to be used by developers. Further documentation says that using it may break your application in strange ways now or in the future. Despite all this, the developer concludes: “yea, I think it’s a good idea to use this API!” Then, later when something breaks, it’s Shocked Pikachu all around.
> I don’t understand what goes through the developer’s mind.
I'm not defending anyone here, but sometimes it's to work around bugs in public APIs that never get fixed. And sometimes it's because some perceived needed functionality isn't exposed in public APIs.
They figure "It'd be a lot easier to use this private API. We can just fix it if it breaks.", not really realizing the ramifications, for example a lot of apps use older versions of Electron -- some even EOL.
Is the Electron team now going to backport this fix to several versions back? Sounds... involved.
The alternative to using private methods or reflectively mucking about with library/platform internals isn't always "do the same thing but with only public API"; it's sometimes "you can't possibly fix the bug or implement the feature that you want to". It sure does increase maintenance burden though.
So you'd tell customers "No, I'm not fixing that bug because doing so would offend my aesthetic sensibilities. Yes, I know you have a support contract, but I simply refuse to address your problem even though I could"? Or maybe you'd phrase it a little differently in public.
I get it but a lot of the war stories from Raymond Chen's blog https://devblogs.microsoft.com/oldnewthing/ were about helping major corporations unscrew something that had relied on a private Windows API because there hadn't been a good way to do it. I would guess most cases of people choosing to rely on a private method are laziness or lack of knowledge about "the right way" (or call it bad documentation), but not 100%.
Discovering and using private APIs is not a walk in the park. I doubt "laziness" is a common motivation for doing so. Lack of knowledge or bad docs, perhaps. But there's often no officially sanctioned way to do something that people want (and perhaps will pay for) - most private API usage I've seen falls into this third bucket.
Laziness comes in many forms. Arguably, discovering and using private APIs is a form of intellectual laziness — it requires you to refuse acknowledging that the whole system is telling not to do things that way.
If you defer to authority. That is, you accept that the people who made the API have the authority to dictate you what you can or can't do on your hardware (or for other people on their), that privating the parts of the API you need was a conscious decision (and not just laziness on their part) and that in general you listen to commands like that.
Even with just a shroud of hacker thinking that is not something programmers should easily accept.
Oh wow, that is the opposite of Hacker Mentality to me. I may question lots of other people, but if some other coder put in the time to construct a well designed API that includes public and private methods, my first thought is never “I know better”. Took me a couple of decades to stop thinking that though, so what do I know?
> // By overriding this built-in method the corners of the vibrant view (if set) will be smooth.
If you don't override the built-in method, the corners won't be smooth. Jagged corners cause thousands of eye injuries every day.
Using (or overriding) private APIs comes with risks, but sometimes it's the only way to get things done. Of course, it comes with consequences too. Sometimes vendors test their new releases with commonly use applications and reach out when they've changed things and breakage results, but testing releases isn't webscale.
Sometimes you just can't achieve something with public APIs. Especially on Apple OSes, they love making genuinely useful APIs private for no good reason while heavily using them in their own apps.
Of course, if you use a private API, you're on your own if your app breaks because of it. I myself have done my fair share of using private APIs on Android. Ideally, you should test your app on beta versions of every upcoming major OS release to make sure it doesn't break. Even more ideally, there's a public equivalent starting with some OS version and you only use the private one until that version, then nothing will ever break.
And there are people who's default setting is to hate/blame Apple because it's fashionable to do so and they are defending not just the use of but also overriding an API explicitly marked as private.
It's not necessarily "blaming", more a combination of:
- Apple released macOS 26
- This version was in testing for many months
- During this time, Apple has apparently not tested how Slack, VSCode, Discord, work
- Or they have, but haven't bothered to reach out to Electron maintainers
- The overriding of the private API was in order to fix a bug with a public one
Combine all of these and there is some onus on Apple for this. If you don't fix your broken public APIs, don't be surprised when people start using your private ones that do work.
But easily the worst point is that QA apparently is limited to their own applications only. Do they really care about the user if they don't test applications found on nearly every mac setup out there? Don't they use Slack internally?!
How come this only surfaces now? Surely large companies such as Microsoft and Slack apparently tested their products that use Electron with the public betas?
It's very hard to notice and very easy to attribute something else. The main symptom is your laptop heating up which is usually attributed to
(1) You just have a slow MacBook, you should get a new one
(2) During beta, "it's a beta and it's expected to heat up and be slow"
(3) People not caring about temps because they use the laptop in clamshell mode
I believe this falls into the perfect definition of "slipped thru the cracks"
Apple has to take some of the blame from this, MacOS without Electron apps is a much less useful proposition. If they knew they were going to change this API in this release it would have made sense to reach out and offer a public way to Electron.
End of the day the needs of users running Electron apps outweighs whatever opinions the internal Apple team has about their APIs
I disagree I think Apple has a responsibility to not break the biggest software used on their platform. They might not like it but I'm sure they'd dislike that software never being there at all even more.
If breaking encapsulation delivers value under the form of features-making-users-happy for a couple years and the fix when it breaks is a matter of a couple weeks (and, like here, a line of code) then it's definitely the right tradeoff
There's also the good old use case of "am I dealing with a subclass that overrode the superclass's implementation of the method."
How do you distinguish between a superclass that always returns null/noop, vs. a subclass that happened to return null in this specific case?
Sometimes this is useful/vital for setting expectations to the user what functionality the instance is likely to have.
Now, you could refactor everything to have the superclass's implementation either throw a NotImplementedError, or return a sentinel value... but changing every call site might be a gargantuan task. Similarly, adding static metadata to every subclass might not be feasible. But checking whether the function's (pre-bound) identity is different is a very easy hack!
Ironically, this might indeed be exactly what Apple is doing here, and they're doing it in a tight loop.
> That's inherent on the way current computers manage the memory.
You can trivially do that today by telling the linker to discard this symbol. Sure it's still not hardware isolation, but now the caller needs to disassemble the binary and hardcode locations. When its inlined before, then you aren't even able to do this.
Personally, at this point I blame that universal assumption that every piece of code inside a program has the same reliability, trustworthiness and disclosure properties. At some point we'll have to burn down every bit of software infrastructure and build it new with some care about security.
A good argument for allowing and working with minor platform differences instead of trying to micromanage every little aspect to force inter-platform consistency and/or perfect compliance with the mockup.
> (2) a piece of code has different behavior depending on the identity of a function, contrary to the principle of extensionality.
Note that most definitions of extensionality don't consider the number of steps to achieve the result as an observable property, although in practice it is.
> (1) despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation;
That's why its a good idea to strip a symbol or provide a linker script. This way you can also properly version the code.
Abuse of private APIs means that your public API is incomplete. And that people dislike how your system behaves so much, that they're willing to muck with its internals.
No, it means some people are doing it wrong either because:
1. They don't know how to do it the right way
or
2. They can't be bothered to do it the right way
#1 I can understand. We all make mistakes as we learn and grow as developers. #2 is just arrogance / laziness on the part of the developer. Compounding it by blaming the platform owner that clearly and explicitly told you not to go that route is gross.
> It turns out Electron was overriding a private AppKit API (_cornerMask) to apply custom corner masks to vibrant views.
> ...
> By removing the custom _cornerMask override and associated logic, we allow AppKit to handle shadows with its default pipeline. This resolves the GPU spike while retaining shadows as expected.
I'd say that most often usage of private APIs is because:
I'll grant that their documentation isn't the best I've ever seen, but it is still on you if you reach for private APIs. Again, that is consciously choosing a shortcut you've been explicitly told not to use.
Or, as some OS maintainer once said:
WE DO NOT BREAK USERSPACE! Seriously. How hard is this rule to understand? We particularly don't break user space with TOTAL CRAP.
Well yes, if the out-of-tree driver sticks to public stable APIs it shouldn't be broken. And analogously here, if the software in question stuck to public stable APIs and didn't reach into private internals it shouldn't have broken.
With Objective-C's nature as a dynamic language, there's no way to make APIs fully private and unusable to third parties. Despite heavily embracing Swift in recent years, much of AppKit and UIKit are still written in Objective-C.
"Not Apple's fault" is up for debate; even if Electron shouldn't be doing this, Apple arguably shouldn't be pushing out updates that cause issues with wide-swaths of software that users use regardless.
We've had developer betas of macOS Tahoe since June.
Standard practice for any mobile or desktop software is to start testing on the betas as soon as they're available. Unless this was a last-minute change before the final release, it's on the software developers to use the betas to prepare their software for upcoming releases.
Apple’s attitude here is that it’s an inherent risk of using private APIs, because it’s not something they want devs doing. They don’t facilitate it like MS tends to. Don’t touch the stove if you don’t want to get burnt.
The person who's getting burnt is Random Officer Worker Joe, who just wants to run Slack and Spotify and who doesn't know a thing about Electron or private APIs, but knows that ever since upgrading their version of macOS things are running terribly. Apple's position is technically noble, but that doesn't help their users.
The Electron maintainers should've considered that possibility before reaching for a private API. It's on the Electron's team's shoulders and nobody else's.
If I were building a FOSS platform, I wouldn't give a second thought to third parties making use of my platform's private APIs. They're private for a reason, whether that be because they're not yet fully baked or because using them can have unintended consequences, they're not intended for public consumption. I especially wouldn't want somebody else's platform to depend on my private APIs, because I am then effectively locked into keeping that API frozen in time by the numerous others building on this other person's platform.
It's generally poor practice to build upon such brittle things as under-the-hood tinkering anyway.
That one's incomplete migration rather than backwards compatibility. As in, they failed to move everything rather than moving everything but preserving the old way for compatibility with something.
Sounds like Joe will direct his anger towards Slack and Spotify, and as a paying customer he has every right to be upset when his software doesn't work.
I doubt he will - they didn’t change, his OS did, they worked before, post hoc ergo propter hoc. Anyway, they’re from different companies, how could they both be at fault? If he even identifies them as related - he probably had them both running at startup and never quits them.
How much cognition are we assigning to Joe in this hypothetical scenario? You make him out to be barely more capable than a lab chimpanzee dully poking at a screen to get some fruit. Give Joe a little credit, people aren't as dumb as you think.
I think there's a propensity for cynical tech-oriented people to look at non-tech people as if they're dullards. I'm not convinced, I take a more optimistic view of people.
What? Windows made tons of progress while maintaining this principle and became the most popular operating system in the world. Are you trying to tell me that you believe the evolution of Windows from 1.0 all the way to 7 - the entire time trying to operate according to this principle - doesn't constitute meaningful progress?
The recent stagnation of the OS has nothing to do with attempting to maintain backwards compatibility.
It’s true that they’ve made some progress but my work laptop running Windows 11 still has UI elements from Windows 95/NT 4. The file system hasn’t improved since then and the keyboard responsiveness is actually worse. BeOS on 90s hardware absolutely torches Windows 11 on things like UI responsiveness, ability to multitask without degrading UI performance, and the file system (not networking, of course, it wasn’t perfect).
I think it’s fair to question whether the decisions around backwards compatibility have been worth the cost but I’d imagine they’re already doing that. Enterprise IT departments love Windows but nobody else does, and the generation of people who grew up using iOS/Android and macOS/ChromeOS for school aren’t going to jump at the chance to bring that enterprise IT experience into their personal lives.
The file system is a great example of how Windows has evolved, actually. Windows 95 was (initially) still using FAT16! NT4 was using NTFS 1.2, we're now on NTFS 3.1. To the file system itself MS added (per Wikipedia): disk quotas, file-level encryption, sparse files, "reparse points" (dunno), journaling, "distributed link tracking" (also dunno), "the $Extend folder and its files" (ditto), and better MFT recovery. Also, apparently not part of the file system itself: symbolic links, transactions, partition shrinking, and self-healing. And that's just what I gleaned from the History section on Wikipedia's NTFS article; I'm sure there's more.
Apple specifically was much slower catching its file system up with Microsoft, despite their disinterest in backwards compatibility. And if Apple jumped ahead a little with APFS, well, NTFS holds its own just fine against APFS for 99% of users. And for when it doesn't, there's also ReFS, an entirely new next gen file system used on Windows Server, and is now slowly making its way onto the desktop.
Okay, I’ll grant that links and mountpoints were good but NTFS is still missing integrity checks, fast queries, etc. For most users nothing had changed since the Clinton administration.
You can actually tell the old controls from the Win NT by how fast and responsive they are. They also properly follow the best practices by showing keyboard accelerators when you press "alt".
And they also explain themself to the user. The new UI often doesn't tell you at all, what exactly you are modifying here, while the old often has paragraphs of explanation.
You can still find applications written for Windows 3.1 in the latest builds of Windows 11. Something regarding database drivers if I recall correctly.
Now imagine if you could get rid of all that legacy crap to make it work in the first place. Microsoft CAN’T do that, because the entire premise of Windows is backwards compatability.
Apple? They don’t care. Killing 32bit apps? Just make an announcement saying that in 2 major macOS releases, macOS won’t be able to run 32 bit apps. It cuts down bloat, and it cuts down on the potential attack surfaces for malicious actors.
Obviously just about everyone would agree that Windows 1 -> 7 was progress. I don’t think you’ll find too many people who’ll say the same about Windows 7 -> 11.
> Now imagine if you could get rid of all that legacy crap to make it work in the first place.
Yeah, and someone will wake from the dead and rewrite all the programs that run the world, written 20-40 years ago, that are to a large degree perfectly working under these compatibility layers.
You should be eternally grateful to MS for dedicating tons of money and some of its best people to maintaining backwards compatibility.
Apple can only afford it because pretty much nothing critical ever ran on macos.
As a dev, if you use a private method, you've just taken ownership of the problem. I suggested to you in our contract not to do it, and that it would likely not be supported, and you did it anyway. Fix your shit, common software or not.
This is what an Apple engineer could write in the electron's github issue if they refused to fix it.
We're not discussing that, but that they have pushed an update without proper testing. You can see from the other comments that breakage is not limited to people using private methods.
Notes from the Google bug tracker linked by the GitHub issue: applying this command to each Chrome/Chromium app impacting your system will workaround the underlying macOS resource leak (EDIT: which only occurs when Electron mucks with private APIs to fake having native UI):
That command’s equivalent is being patched into Chrome and will have to ripple downward into Electron apps; directing complaints to each electron app impacted with a link to the relevant Google issue workaround will give them sufficient data to mitigate it, if they bother to.
pps. Manually applying this workaround without scheduling its future removal has a slight but non-zero risk of someday breaking OS-linked autofill in your electron apps in weird or unexpected ways.
ppps. I don’t work for anyone, school for another three years minimum.
Too late to edit now, but yep, the launchctl headless workaround works around Electron lagging the system, and the scroll bug works around macOS lagging the system. Thanks!
This affects some of the most widely used applications on the platform, including "productivity" applications such as Slack that Apple uses internally. How did no-one at Apple notice this and do something about it prior to macOS 26 being released?
I stopped using the Slack Electron wrapper as soon as Safari added support for "installing" web apps (File > Add to Dock…). Wouldn't be surprised if people within Apple did similar.
This made me try it out again since the feature was first released. Looks like they added support for Safari extensions and content blockers to PWAs in macOS 15.0.
I know it's a defacto complaint to leverage against Electron apps, but memory usage notwithstanding, I've never run into much lag issue on any major Electron app.
Perhaps this file is just the installer and the actual system files are much larger? Or maybe your 400MB figure comes from a bloated install? Just speculating here.
A compressed download is my guess. The easiest way to predict if an app is using Electron is to see if the download is around 90 to 130 MB. Especially if that size feels unreasonable for the functionality that it offers.
It depends. Numerous times when internet is spotty Slack and Discord both on different occasions have brought my systems to a halt until they can complete whatever task is stuck waiting (or I force close them).
It's really fucking obnoxious that somehow a goddamn web app in a wrapper is managing to cause system wide hangs.
No, they typically do not interfere with performance at the OS level. They may be wasteful with resources that are limited — CPU/GPU/RAM/IO — but for them to interfere with system function at this level is not the usual bloatware problem.
I’ve never noticed anything before, though I’m sure their performance is worse than native apps. I think the M series has so much headroom at this point that you can get away with a lot.
Discord and VSCode work smoothly for me on an M4 MBP -- not sure if it's a compatibility difference or just performance hiding the problem, though.
But Spotlight file search is completely broken, rebuilding the index doesn't help, and web results are the only thing it returns. After 20 years of intense research, Apple finally caught up to Microsoft in race to make search broken and useless.
It's very possible that the hardware performance is hiding the issue. I upgraded from my 2020 intel 13" mbp (16gb of ram, 4-core i5) to 16" M4 Pro for a variety of reasons, but the basic processes of MacOS were making it nearly inoperable periodically throughout the day. I gifted the old one to my gf, and I can hear the fans spin up from across the apartment when nothing else is happening but indexing. I recall regularly being irritated that I'd just have to wait a while for the indexing process to finish before getting anything done. Idk wth is going on, but it puts far more strain on the system than anything else I could throw at it except games and Docker. Even ProTools doesn't seem to produce audible noise unless a bad plugin or a rendering is taking place.
Aside from that, the Settings menu memory leak (or whatever it the problem is) is very much more apparent on the older mac than it is on the new one, but it's still reproducible. Neither computer is running Tahoe yet, these issues were already present, but based on on your comment, they might now be functionally worse in addition to being a performance and user experience joke.
My new Mac is still amazing hardware-wise, and since those issues seem to just be compensated for, perhaps by having efficiency cores that they're able to delegate background processes to, but the sluggishness and in-adequacy of frontline processes and apps must be embarrassing for what I presume to be smarter engineers than myself who probably just don't get to allocate time or energy toward any of the problems, especially with things like Xcode and SwiftUI also having major issues, and the mac being a relatively small market.
I make a habit of turning off spotlight almost entirely. Search never returns what I want anyway, and the juice isn’t worth the squeeze.
Go into preferences, spotlight and you can add folders to exclude from indexing. I add my home directory and most of the system directories and that more or less fixes the issue.
Despite my complaints about performance, I do use Spotlight constantly, but like you say I'm just using it for apps and files, it's nothing but frustrating to see them try to redesign it around a global entity search paradigm.
Yeah. I wish there was a way to turn off full indexing of content. Content search always shows me pages and pages of junk. "Oh, looking for your todo list? That word showed up in this 1gb video file! And all these C header files. And ..."
The last good file search I've ever used was in windows 98. There was no indexing. When you did a search, it looked through all the subdirectories for a filename which matched the search term. It was glorious.
Ironically I use Spotlight constantly, and have always found the results mostly good enough for my uses. There are probably third-party apps that solve that problem more reliably though.
The instructions for fixing a Mac's corrupted spotlight index are amazing. I was planning to do it earlier this year, but the number of manual actions was just too ridiculous. Then, after it was broken for months, it spontaneously started working again.
I’ve rebuilt my spotlight db several times over the years by adding root to the exceptions list and removing. Whatever you found was going way overboard.
True, but looking at Activity Monitor I don't see any CPU or GPU spike when having an Electron app open and scrolling in Chrome (vs scrolling without any Electron apps open)
Apparently the issue has to do with transparencies (shadows and straight up transparency), so could be a question of capabilities not capacity e.g. older gens have less range and some non-default require falling back to software whereas newer gens can keep to hardware.
Watch your power usage. With large windowed VSCode or Cursor, you will see far higher CPU and GPU usage by WindowServer and more system power consumption. It’s easier if you track it with stats.app.
Strangely the WindowServer issue is a constant issue on my personal MacBook Pro, but I've never seen it on my identical work MacBook Pro. It seems like there's some other factor that is necessary to trigger the problem.
Just imagine you are investigating a bug and everyone is trying to express their opnion on whose fault is this. What happened to not having a blaming culture?
I started experiencing massive overheating issue on latest version of Zoom and on macOS 26 and now 26.1 beta as well. Haven't experienced what you're describing, it's really odd.
It seems odd that Apple could release an update that breaks common software, and not go to the trouble of at least contacting the developers of the software and discussing the issue.
Before I left Apple ~10y ago, it was pretty common to drop linked-on-or-after hacks into AppKit and UIKit to keep popular software chugging along. Assuming they're still doing that sort of thing, this was either missed or deemed not high-enough priority to add such a check (or maybe one was added, and the only reason this issue has been noticed is because Electron and Electron apps are now being built against the macOS 26 SDK).
The most inefficient solution (in both space and time complexity) being suggested to build desktop apps is now shown to be causing widespread sluggishness.
So much for interviewing developers for algorithms and data structures. Also Rust won't save you or make Electron faster either.
The most inefficient solution (in both space and time complexity)
Those are not the only qualities / metrics to optimize for. Developer eXperience, cross platform, open standards, easy compatibility with websites, easiness to keep updated etc. can be far more important
Developer experience is never more important than the quality of the end product. The goal is to make good software, not to have the easiest time possible making mediocre to bad software.
For most commercial endeavors, the goal is to make money. If you're lucky, that goal is somewhat aligned with making good software, but in practice there's always a compromise between quality and development cost.
if all you can create are electron apps then you are not a developer.
>cross platform
many programs are cross platform, without the need of Electron.
>open standards
???
>easy compatibility with websites
Electron isn't necessary, e.g. Telegram.
>easiness to keep updated
not Electron exclusive
Electron exists for lazy "programmers" to make their products as fast as possible, without caring for code quality and their customers experience. This is why managers love it, it saves money: you don't need to hire proper software engineers nor allocate an appropriate amount of time to develop and maintain your product.
Electron is part of the enshitification of the web and the IT in general.
Individuals used to make sophisticated native apps as shareware for $10 back in the 1990s and today big teams rely on crap like Electron. The enshittification of everything.
I find Slack and Discord to work fine in browser tabs and never felt the need to install their desktop apps. VSCode/Cursor is the only Electron app I felt actually provided value.
I’m surprised to see so little pushback in press to iOS/macOS 26.
I’ve been part of the public beta and it’s been so weird going from “this sucks but it’s a first beta” through “it really isn’t improving much as time goes by” to “we’re a week from launch, there’s no way they release this after the Apple Intelligence fiasco”.
And yet here we are. Performance issues, ui inconsistencies and garish design everywhere.
I was going to wait for a few bugfixes until I upgraded, but I was forced to update to iOS 26 because the AirPods Pro 3 that I bought required it for some inexplicable reason (which I didn't know until I tried to pair them). The AirPods are just fantastic in every way and a huge leap forward, I don't regret buying them for a second. But sheesh, none of the OS updates were ready for release. I found 3 obvious bugs (non-functional UI elements, invisible labels due to incorrect handling of dark mode, soft locks caused by guided access) not to mention a distinct pause when unlocking the device, GPU issues with Safari. It seems like the pendulum has swung from Apple making mediocre overpriced hardware and reliable software, to making best-in-class hardware and garbage software. I'm hoping that with the end of Intel support we get a "Snow Leopard" style polish and bugfix of the entire stack, but with their recent track record it seems unlikely. It's just inexcusable for a company with Apple's focus on consumer products and market cap. At least Microsoft has the excuse that they have a sprawling empire to oversee.
I'm glad I'm not the only one experiencing this. They absolutely destroyed Guided Access in iOS 26 to the point of borderline non-functionality. I've had the system idle-sleep while in Guided Access and wake to a lock screen that I was unable to interact with in any way, including turning off guided access. Softlocked my device for about 5 minutes until panicked swiping and button mashing managed to snap it out of it. There appears to be a race condition with the lock screen and home screen, if the device idle sleeps in guided access mode then about 50% of the time it wakes to the home screen instead of the app. Sometimes waking it on iOS shows the lock screen for a brief second before the app starts. Also, exiting guided access sometimes doesn't recolor the apps on the home screen so it still appears as if all apps are disabled. Not to mention that they reclassified the pen settings dialog as a "software keyboard" meaning that in order for my kids to draw with the Apple Pencil I also have to allow them to enter text now. None of these were issues on iOS 18.
I used it from iOS 15-18 and it always worked great. We try to limit our kids' iPad use to drawing in Freeform and the occasional edutainment app, and I never had issues with them escaping Guided Access or it causing lockups. The fact that I can barely trust it to work properly on iPadOS 26 is a huge disappointment for me.
I’ve never used it myself (no kids) but I’ve long heard tales of kids being able to get around it, it miscounting time used allowing too much use, etc.
It sounds really nice for the intended purpose, just not reliable for many.
It’s just getting worse with each new iOS release.
For example before iOS 18, screen time requests from kids would come as notifications, now they are coming in as iMessages, polluting history of your actual conversations, so you can’t have functional group chat with your kid & parents.
Now in iOS 26 they messed up calculation of how much screen time is spent, so an app can have limit of 3hrs/day and still lock up after just first 9 minutes of screen time spent in that app in a day.
You are describing every single macOS release. I still remember their permissions disaster which broke the majority of critical apps in people's workflows at launch. It's always best to wait a few months to upgrade.
>Hasn't that been Apple's norm for a few years now?
Not to this degree.
I’ve had 3 memory leaks in native apps, including the calculator. There’s basic alignment errors pretty much everywhere. In many places text can become fully unreadable (black on black, white on white, text over a transparent background with overlapping text below…).
It’s not slightly lowered quality, it’s the kind of inconsistency you expect mixing custom launchers and icon packs.
It's possible that the majority of people are fine with it. I thought it would hate it but I love iOS 26. It adds much needed depth and allowed me to turn off accessibility options.
- Button Shapes: Buttons actually look like buttons.
- Reduce Motion: Animations are a lot more fluid and the parallax effects are more subtle. They don't trigger motion sickness like the previous ones did.
- Larger Text: The worst areas of the UI have better contrast.
- Reduce Transparency: While there's more transparency effects, they're a lot better.
- Increase Contrast: If I do need to turn this back on it is a much better integrated effect than previous version.
The changes in macOS 26 are half-finished. Anything with raised glass looks like plateaus in the middle of a flat desert. Only half the apps have the new rounded corners on window and they do not match the rounded corners in the rest of the interface. They even cut off parts of the interface like the bottom of every scrollbar.
It's disappointing. I loved Windows 7's aero theme.
It's not limited to Electron applications:
https://github.com/neovide/neovide/issues/3225
Other Tahoe issues with non-Electron apps:
https://github.com/zed-industries/zed/issues/33182
https://github.com/wezterm/wezterm/issues/7255
This might be the fix: https://github.com/ghostty-org/ghostty/pull/8625/commits/431...
One-liner for electron developers to fix the issue:
browserwindow.setHasShadow(false)
GPU load bug and Autofill bug are two separate, completely unrelated issues.
Correct! That's why I listed them under "other". One seems to be their new SMS 2FA functionality causing high CPU usage, the other seems to be private window APIs causing high GPU usage.
fixed in: https://github.com/electron/electron/pull/48376
https://github.com/electron/electron/issues/48311#issuecomme...
If this comment is to be believed, it's not Apple's fault. It's the apps mucking around with the internals of AppKit.
This example just happens to illustrate two of my least favorite software engineering practices: (1) despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation; (2) a piece of code has different behavior depending on the identity of a function, contrary to the principle of extensionality.
> despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation
That's inherent on the way current computers manage the memory. And I don't know if the gains are enough to pay for the loses of guaranteeing encapsulation.
One could reach for static analysis, but that would imply some restrictions on the machine's assembly. Those are probably worth it.
> a piece of code has different behavior depending on the identity of a function
I have written my quota of "find the latest caller on the stack with property X, verify if it has access", on different languages. Some times a function can't in any way be just a function.
I don’t understand what goes through the developer’s mind. A method is marked as private. It’s documented as not to be used by developers. Further documentation says that using it may break your application in strange ways now or in the future. Despite all this, the developer concludes: “yea, I think it’s a good idea to use this API!” Then, later when something breaks, it’s Shocked Pikachu all around.
> I don’t understand what goes through the developer’s mind.
I'm not defending anyone here, but sometimes it's to work around bugs in public APIs that never get fixed. And sometimes it's because some perceived needed functionality isn't exposed in public APIs.
They figure "It'd be a lot easier to use this private API. We can just fix it if it breaks.", not really realizing the ramifications, for example a lot of apps use older versions of Electron -- some even EOL.
Is the Electron team now going to backport this fix to several versions back? Sounds... involved.
> to work around bugs in public APIs that never get fixed.
According to the commenter who uncovered the cause of the issue, this is exactly what happened here
The alternative to using private methods or reflectively mucking about with library/platform internals isn't always "do the same thing but with only public API"; it's sometimes "you can't possibly fix the bug or implement the feature that you want to". It sure does increase maintenance burden though.
> it's sometimes "you can't possibly fix the bug or implement the feature that you want to"
Yes. It is, and that is what any responsible person should choose.
So you'd tell customers "No, I'm not fixing that bug because doing so would offend my aesthetic sensibilities. Yes, I know you have a support contract, but I simply refuse to address your problem even though I could"? Or maybe you'd phrase it a little differently in public.
Yes, I have told customers exactly that when there was no supported way to achieve what they wanted. I'm not putting my name on that.
“Poor decisions on your part do not constitute an emergency on mine.”
"Poor decisions on a third party's part do constitute an emergency on mine."
I get it but a lot of the war stories from Raymond Chen's blog https://devblogs.microsoft.com/oldnewthing/ were about helping major corporations unscrew something that had relied on a private Windows API because there hadn't been a good way to do it. I would guess most cases of people choosing to rely on a private method are laziness or lack of knowledge about "the right way" (or call it bad documentation), but not 100%.
Discovering and using private APIs is not a walk in the park. I doubt "laziness" is a common motivation for doing so. Lack of knowledge or bad docs, perhaps. But there's often no officially sanctioned way to do something that people want (and perhaps will pay for) - most private API usage I've seen falls into this third bucket.
Laziness comes in many forms. Arguably, discovering and using private APIs is a form of intellectual laziness — it requires you to refuse acknowledging that the whole system is telling not to do things that way.
If you defer to authority. That is, you accept that the people who made the API have the authority to dictate you what you can or can't do on your hardware (or for other people on their), that privating the parts of the API you need was a conscious decision (and not just laziness on their part) and that in general you listen to commands like that.
Even with just a shroud of hacker thinking that is not something programmers should easily accept.
Oh wow, that is the opposite of Hacker Mentality to me. I may question lots of other people, but if some other coder put in the time to construct a well designed API that includes public and private methods, my first thought is never “I know better”. Took me a couple of decades to stop thinking that though, so what do I know?
Ok, but
> // By overriding this built-in method the corners of the vibrant view (if set) will be smooth.
If you don't override the built-in method, the corners won't be smooth. Jagged corners cause thousands of eye injuries every day.
Using (or overriding) private APIs comes with risks, but sometimes it's the only way to get things done. Of course, it comes with consequences too. Sometimes vendors test their new releases with commonly use applications and reach out when they've changed things and breakage results, but testing releases isn't webscale.
> Sometimes vendors test their new releases with commonly use applications
"common" is an understatement. I'd bet that at least one affected, broken app is on 97%+ of macOS setups
> I don't understand
Well. This is hardly the funniest example then. Check this one out: https://github.com/reactjs/react.dev/issues/3896
Sometimes you just can't achieve something with public APIs. Especially on Apple OSes, they love making genuinely useful APIs private for no good reason while heavily using them in their own apps.
Of course, if you use a private API, you're on your own if your app breaks because of it. I myself have done my fair share of using private APIs on Android. Ideally, you should test your app on beta versions of every upcoming major OS release to make sure it doesn't break. Even more ideally, there's a public equivalent starting with some OS version and you only use the private one until that version, then nothing will ever break.
And there are people who's default setting is to hate/blame Apple because it's fashionable to do so and they are defending not just the use of but also overriding an API explicitly marked as private.
I don't get it.
Apple does also break public APIs, so it goes both ways. I will blame Apple when they are blameworthy and not when they are not.
It's not necessarily "blaming", more a combination of:
- Apple released macOS 26 - This version was in testing for many months - During this time, Apple has apparently not tested how Slack, VSCode, Discord, work - Or they have, but haven't bothered to reach out to Electron maintainers - The overriding of the private API was in order to fix a bug with a public one
Combine all of these and there is some onus on Apple for this. If you don't fix your broken public APIs, don't be surprised when people start using your private ones that do work.
But easily the worst point is that QA apparently is limited to their own applications only. Do they really care about the user if they don't test applications found on nearly every mac setup out there? Don't they use Slack internally?!
How come this only surfaces now? Surely large companies such as Microsoft and Slack apparently tested their products that use Electron with the public betas?
It's very hard to notice and very easy to attribute something else. The main symptom is your laptop heating up which is usually attributed to (1) You just have a slow MacBook, you should get a new one (2) During beta, "it's a beta and it's expected to heat up and be slow" (3) People not caring about temps because they use the laptop in clamshell mode
I believe this falls into the perfect definition of "slipped thru the cracks"
Apple has to take some of the blame from this, MacOS without Electron apps is a much less useful proposition. If they knew they were going to change this API in this release it would have made sense to reach out and offer a public way to Electron.
End of the day the needs of users running Electron apps outweighs whatever opinions the internal Apple team has about their APIs
Absolutely not. Apple has zero responsibility to anybody for changing a private API. That’s the whole point of it being marked private.
I disagree I think Apple has a responsibility to not break the biggest software used on their platform. They might not like it but I'm sure they'd dislike that software never being there at all even more.
If one dude is using a private API, that's him being reckless. If thousands of applications are using a private API, that's poor API design.
The thousands of "apps" wouldn't all be using this private api if they weren't electron junk
In my decade of experience with laravel I've seen ordersof magnitude more public APIs randomly breaking than private ones.
If breaking encapsulation delivers value under the form of features-making-users-happy for a couple years and the fix when it breaks is a matter of a couple weeks (and, like here, a line of code) then it's definitely the right tradeoff
> Then, later when something breaks, it’s Shocked Pikachu all around
This isn't really true. When something breaks it's generally "darn, we knew it would happen eventually".
Yeah, but you HATE how the system behaves because some great spark at Apple thought that corners must always be _this_ rounded.
There's also the good old use case of "am I dealing with a subclass that overrode the superclass's implementation of the method."
How do you distinguish between a superclass that always returns null/noop, vs. a subclass that happened to return null in this specific case?
Sometimes this is useful/vital for setting expectations to the user what functionality the instance is likely to have.
Now, you could refactor everything to have the superclass's implementation either throw a NotImplementedError, or return a sentinel value... but changing every call site might be a gargantuan task. Similarly, adding static metadata to every subclass might not be feasible. But checking whether the function's (pre-bound) identity is different is a very easy hack!
Ironically, this might indeed be exactly what Apple is doing here, and they're doing it in a tight loop.
Couldn't you use isinstance(), which would not be a hack?
isinstance only tells you which subclass, not whether that subclass overrides the superclass implementation!
> That's inherent on the way current computers manage the memory.
You can trivially do that today by telling the linker to discard this symbol. Sure it's still not hardware isolation, but now the caller needs to disassemble the binary and hardcode locations. When its inlined before, then you aren't even able to do this.
I have written my share of "inspect caller and do things" too. I still don't like that.
Personally, at this point I blame that universal assumption that every piece of code inside a program has the same reliability, trustworthiness and disclosure properties. At some point we'll have to burn down every bit of software infrastructure and build it new with some care about security.
A good argument for allowing and working with minor platform differences instead of trying to micromanage every little aspect to force inter-platform consistency and/or perfect compliance with the mockup.
To be fair, AppKit is buggy/undocumented enough that you need to muck with the internals even for trivial things.
> (2) a piece of code has different behavior depending on the identity of a function, contrary to the principle of extensionality.
Note that most definitions of extensionality don't consider the number of steps to achieve the result as an observable property, although in practice it is.
> (1) despite one piece of code making a method private, another piece of code still overrides it/modifies it/calls it, an affront to the idea of encapsulation;
That's why its a good idea to strip a symbol or provide a linker script. This way you can also properly version the code.
Abuse of private APIs means that your public API is incomplete. And that people dislike how your system behaves so much, that they're willing to muck with its internals.
No, it means that people think they know better than to listen to the warning.
People would not use private APIs (which are undocumented and prone to break) if they had documented, stable public APIs
No, it means some people are doing it wrong either because:
1. They don't know how to do it the right way
or
2. They can't be bothered to do it the right way
#1 I can understand. We all make mistakes as we learn and grow as developers. #2 is just arrogance / laziness on the part of the developer. Compounding it by blaming the platform owner that clearly and explicitly told you not to go that route is gross.
[flagged]
From the bug report:
> It turns out Electron was overriding a private AppKit API (_cornerMask) to apply custom corner masks to vibrant views.
> ...
> By removing the custom _cornerMask override and associated logic, we allow AppKit to handle shadows with its default pipeline. This resolves the GPU spike while retaining shadows as expected.
I'd say that most often usage of private APIs is because:
4. it probably shouldn't be done at all
I don't know what the comment you're replying to said, but further down the thread:
> Electron's "_cornerMask" override was a dirty hack that was made in an effort to fix an ancient issue with corner smoothing.
So Electron used this private API to fix an issue that shouldn't have existed at all, as far as I can tell
I'll grant that their documentation isn't the best I've ever seen, but it is still on you if you reach for private APIs. Again, that is consciously choosing a shortcut you've been explicitly told not to use.
Nah, it's Apple's fault. Not regression testing against major apps is pure incompetence.
Also, this in the comment:
> [a user] Please try any way of getting in touch with Apple engineers you can. As a project, we don't have a better connection to Apple than you do.
>
> One approach might be the engineer who replied to the Bluesky post that someone linked to above about the input issue.
Pure incompetence. Major projects have no way to do anything but ping randoms on socials.
This is downvoted, but it's true.
It doesn't matter who's fault it is in some Aristotelean sense, what matters is the user upgraded to YOUR new OS, and now shit don't work.
Raymond Chen and Microsoft got this, years ago. Joel talked about it. You make shit work, even if it's the software being a fuck.
Or, as some OS maintainer once said: WE DO NOT BREAK USERSPACE! Seriously. How hard is this rule to understand? We particularly don't break user space with TOTAL CRAP.
This situation seems to be more analogous to an out-of-tree driver which reaches into kernel internals, which Linux does break all the time.
if the out-of-tree driver does not touch kernel space, it should not be broken.
Well yes, if the out-of-tree driver sticks to public stable APIs it shouldn't be broken. And analogously here, if the software in question stuck to public stable APIs and didn't reach into private internals it shouldn't have broken.
No time to do that when you need to re-do the entire UI of 100 apps for no good reason other than to make an iMac indistinguishable from an iPad.
It's all pretty terrible. For problem (1) why does the language allow it? And why are they doing it this way? Did Apple not provide an official way?
With Objective-C's nature as a dynamic language, there's no way to make APIs fully private and unusable to third parties. Despite heavily embracing Swift in recent years, much of AppKit and UIKit are still written in Objective-C.
"Not Apple's fault" is up for debate; even if Electron shouldn't be doing this, Apple arguably shouldn't be pushing out updates that cause issues with wide-swaths of software that users use regardless.
We've had developer betas of macOS Tahoe since June.
Standard practice for any mobile or desktop software is to start testing on the betas as soon as they're available. Unless this was a last-minute change before the final release, it's on the software developers to use the betas to prepare their software for upcoming releases.
Exactly. Who you blame depends on if it was introduced in beta 1 or RC.
Apple’s attitude here is that it’s an inherent risk of using private APIs, because it’s not something they want devs doing. They don’t facilitate it like MS tends to. Don’t touch the stove if you don’t want to get burnt.
The person who's getting burnt is Random Officer Worker Joe, who just wants to run Slack and Spotify and who doesn't know a thing about Electron or private APIs, but knows that ever since upgrading their version of macOS things are running terribly. Apple's position is technically noble, but that doesn't help their users.
The Electron maintainers should've considered that possibility before reaching for a private API. It's on the Electron's team's shoulders and nobody else's.
If I were building a FOSS platform, I wouldn't give a second thought to third parties making use of my platform's private APIs. They're private for a reason, whether that be because they're not yet fully baked or because using them can have unintended consequences, they're not intended for public consumption. I especially wouldn't want somebody else's platform to depend on my private APIs, because I am then effectively locked into keeping that API frozen in time by the numerous others building on this other person's platform.
It's generally poor practice to build upon such brittle things as under-the-hood tinkering anyway.
> Apple's position is technically noble, but that doesn't help their users.
The alternative doesn’t help either. That’s the approach Microsoft has taken and look what a mess Windows is because of it.
> what a mess Windows is because of it.
Can you point at any part of windows being a mess specifically because of backwards compatibility?
Control panel / settings
That one's incomplete migration rather than backwards compatibility. As in, they failed to move everything rather than moving everything but preserving the old way for compatibility with something.
Sounds like Joe will direct his anger towards Slack and Spotify, and as a paying customer he has every right to be upset when his software doesn't work.
I doubt he will - they didn’t change, his OS did, they worked before, post hoc ergo propter hoc. Anyway, they’re from different companies, how could they both be at fault? If he even identifies them as related - he probably had them both running at startup and never quits them.
How much cognition are we assigning to Joe in this hypothetical scenario? You make him out to be barely more capable than a lab chimpanzee dully poking at a screen to get some fruit. Give Joe a little credit, people aren't as dumb as you think.
non-tech people will think exactly like that
Software A an B works fine before update, after update, both breaks => whatever changed is the problem(in this case, the OS).
I think there's a propensity for cynical tech-oriented people to look at non-tech people as if they're dullards. I'm not convinced, I take a more optimistic view of people.
That’s the principle that prevented Windows from making any meaningful progress for the past three decades.
What? Windows made tons of progress while maintaining this principle and became the most popular operating system in the world. Are you trying to tell me that you believe the evolution of Windows from 1.0 all the way to 7 - the entire time trying to operate according to this principle - doesn't constitute meaningful progress?
The recent stagnation of the OS has nothing to do with attempting to maintain backwards compatibility.
It’s true that they’ve made some progress but my work laptop running Windows 11 still has UI elements from Windows 95/NT 4. The file system hasn’t improved since then and the keyboard responsiveness is actually worse. BeOS on 90s hardware absolutely torches Windows 11 on things like UI responsiveness, ability to multitask without degrading UI performance, and the file system (not networking, of course, it wasn’t perfect).
I think it’s fair to question whether the decisions around backwards compatibility have been worth the cost but I’d imagine they’re already doing that. Enterprise IT departments love Windows but nobody else does, and the generation of people who grew up using iOS/Android and macOS/ChromeOS for school aren’t going to jump at the chance to bring that enterprise IT experience into their personal lives.
> The file system hasn’t improved since then
The file system is a great example of how Windows has evolved, actually. Windows 95 was (initially) still using FAT16! NT4 was using NTFS 1.2, we're now on NTFS 3.1. To the file system itself MS added (per Wikipedia): disk quotas, file-level encryption, sparse files, "reparse points" (dunno), journaling, "distributed link tracking" (also dunno), "the $Extend folder and its files" (ditto), and better MFT recovery. Also, apparently not part of the file system itself: symbolic links, transactions, partition shrinking, and self-healing. And that's just what I gleaned from the History section on Wikipedia's NTFS article; I'm sure there's more.
Apple specifically was much slower catching its file system up with Microsoft, despite their disinterest in backwards compatibility. And if Apple jumped ahead a little with APFS, well, NTFS holds its own just fine against APFS for 99% of users. And for when it doesn't, there's also ReFS, an entirely new next gen file system used on Windows Server, and is now slowly making its way onto the desktop.
Okay, I’ll grant that links and mountpoints were good but NTFS is still missing integrity checks, fast queries, etc. For most users nothing had changed since the Clinton administration.
You can actually tell the old controls from the Win NT by how fast and responsive they are. They also properly follow the best practices by showing keyboard accelerators when you press "alt".
It's the new stuff that is slow and unusable.
And they also explain themself to the user. The new UI often doesn't tell you at all, what exactly you are modifying here, while the old often has paragraphs of explanation.
You can still find applications written for Windows 3.1 in the latest builds of Windows 11. Something regarding database drivers if I recall correctly.
Now imagine if you could get rid of all that legacy crap to make it work in the first place. Microsoft CAN’T do that, because the entire premise of Windows is backwards compatability.
Apple? They don’t care. Killing 32bit apps? Just make an announcement saying that in 2 major macOS releases, macOS won’t be able to run 32 bit apps. It cuts down bloat, and it cuts down on the potential attack surfaces for malicious actors.
Obviously just about everyone would agree that Windows 1 -> 7 was progress. I don’t think you’ll find too many people who’ll say the same about Windows 7 -> 11.
> Now imagine if you could get rid of all that legacy crap to make it work in the first place.
What would be the consequence of this? What harm does this do? Would it be worth Spotify and Slack breaking when I upgrade my OS?
> Now imagine if you could get rid of all that legacy crap to make it work in the first place.
Yeah, and someone will wake from the dead and rewrite all the programs that run the world, written 20-40 years ago, that are to a large degree perfectly working under these compatibility layers.
You should be eternally grateful to MS for dedicating tons of money and some of its best people to maintaining backwards compatibility.
Apple can only afford it because pretty much nothing critical ever ran on macos.
> Now imagine if you could get rid of all that legacy crap to make it work in the first place.
That's easy to imagine: people would have zero reason to use Windows.
I mean macOS Settings were decidedly schizophrenic until quite recently. Audio MIDI Setup last got a version update in 2017.
AirPort Utility? Apple disbanded that team in 2016. There hadn't been a new AirPort since 2013.
So you're blaming because they've changed a private API which electron not only used, but also seemed to have patched?
No, for "pushing out updates that cause issues [with very common software]".
As a dev, if you use a private method, you've just taken ownership of the problem. I suggested to you in our contract not to do it, and that it would likely not be supported, and you did it anyway. Fix your shit, common software or not.
This is what an Apple engineer could write in the electron's github issue if they refused to fix it.
We're not discussing that, but that they have pushed an update without proper testing. You can see from the other comments that breakage is not limited to people using private methods.
Notes from the Google bug tracker linked by the GitHub issue: applying this command to each Chrome/Chromium app impacting your system will workaround the underlying macOS resource leak (EDIT: which only occurs when Electron mucks with private APIs to fake having native UI):
https://issues.chromium.org/issues/446481994#comment17That command’s equivalent is being patched into Chrome and will have to ripple downward into Electron apps; directing complaints to each electron app impacted with a link to the relevant Google issue workaround will give them sufficient data to mitigate it, if they bother to.
Apple is already aware — https://x.com/ian_mcdowell/status/1967326413830472191 (apologies for the Twitter link, but it’s an Apple employee). EDIT: Someone else has traced the issue to Electron messing with internal OS APIs! Courtesy of https://news.ycombinator.com/item?id=45377253 —
> It turns out Electron was overriding a private AppKit API (_cornerMask) to apply custom corner masks to vibrant views.
ps. This issue was discussed a week ago here:
https://news.ycombinator.com/item?id=45292019
pps. Manually applying this workaround without scheduling its future removal has a slight but non-zero risk of someday breaking OS-linked autofill in your electron apps in weird or unexpected ways.
ppps. I don’t work for anyone, school for another three years minimum.
GPU load bug and Autofill bug are two separate, completely unrelated issues.
I’m happy to refer to a better workaround if you have one?
1. workaround for high GPU load by Electron apps (what this HN thread is about) — see the command here: https://github.com/electron/electron/issues/48311#issuecomme...
2. unrelated workaround for scroll bug - defaults write com.google.Chrome NSAutoFillHeuristicControllerEnabled -bool false
Too late to edit now, but yep, the launchctl headless workaround works around Electron lagging the system, and the scroll bug works around macOS lagging the system. Thanks!
>hxxps://x.com/ian_mcdowell/status/1967326413830472191 (apologies for the Twitter link, but it’s an Apple employee)
https://xcancel.com/ian_mcdowell/status/1967326413830472191
FTFY :)
“And yet”, she persisted, “my apology remains necessary.”
This affects some of the most widely used applications on the platform, including "productivity" applications such as Slack that Apple uses internally. How did no-one at Apple notice this and do something about it prior to macOS 26 being released?
I stopped using the Slack Electron wrapper as soon as Safari added support for "installing" web apps (File > Add to Dock…). Wouldn't be surprised if people within Apple did similar.
I'd sorta hope they are testing widely-used applications in the way that typical end users will experience them before releasing a new OS version.
I actually did that as soon as Safari added a pinned tab feature. I remember doing this as early as 2016.
Mind blown, this may actually be freaking useful ...
This made me try it out again since the feature was first released. Looks like they added support for Safari extensions and content blockers to PWAs in macOS 15.0.
This was fixed in Chromium yesterday, credited to @mitchellh
https://xcancel.com/mitchellh/status/1970944369336475713#m
nope, that has nothing to do with electron, completely separate
Don't Electron-based apps cause lag on basically any system?
I know it's a defacto complaint to leverage against Electron apps, but memory usage notwithstanding, I've never run into much lag issue on any major Electron app.
Surely there is a more effective way to write an app than to bundle an entire end-of-life browser and Node.js runtime into a 600MB monstrosity.
Of course there is, but not every decision in computing is (or should be) about raw efficiency.
Electron apps don't have to be 600 MB. VS Code is an entire fully-featured IDE and is a 90 MB download.
VS Code package in my applications folder is 600+ MB.
The Electron Framework.framework it contains is 400+ MB alone. I don't understand where you come up with your 90 MB figure?
The VSCodeUserSetup file from https://code.visualstudio.com/download is in the 90MB range.
Perhaps this file is just the installer and the actual system files are much larger? Or maybe your 400MB figure comes from a bloated install? Just speculating here.
Presumably the setup file is compressed, and the installation on disk isn't
A compressed download is my guess. The easiest way to predict if an app is using Electron is to see if the download is around 90 to 130 MB. Especially if that size feels unreasonable for the functionality that it offers.
My package app is 90mb
It depends. Numerous times when internet is spotty Slack and Discord both on different occasions have brought my systems to a halt until they can complete whatever task is stuck waiting (or I force close them).
It's really fucking obnoxious that somehow a goddamn web app in a wrapper is managing to cause system wide hangs.
True, i'm gonna start limiting electron apps CPU and IO percentage to not halt everything
I think that's probably a recipe to hit the limits more often and end up being more frustrating, depending on your hardware.
Can't you interrupt them (aka SIGSTOP) instead? Then you could resume them, instead of reopening them and potentially using state.
Perhaps, but this specific case appears to be related to (ab)use of a private API on Electron's part.
https://github.com/electron/electron/issues/48311#issuecomme...
It's in the runtime specifications, I think.
"Application should use all cores and all available memory."
In the past few years, the only applications i've seen run amok with memory usage at least were of course Electron based.
However, note that this problem is on Mac OS "users had too much contrast so we ruined it" 26 Tahoe. It's part of the early adopter experience.
No, they typically do not interfere with performance at the OS level. They may be wasteful with resources that are limited — CPU/GPU/RAM/IO — but for them to interfere with system function at this level is not the usual bloatware problem.
I’ve never noticed anything before, though I’m sure their performance is worse than native apps. I think the M series has so much headroom at this point that you can get away with a lot.
Discord and VSCode work smoothly for me on an M4 MBP -- not sure if it's a compatibility difference or just performance hiding the problem, though.
But Spotlight file search is completely broken, rebuilding the index doesn't help, and web results are the only thing it returns. After 20 years of intense research, Apple finally caught up to Microsoft in race to make search broken and useless.
It's very possible that the hardware performance is hiding the issue. I upgraded from my 2020 intel 13" mbp (16gb of ram, 4-core i5) to 16" M4 Pro for a variety of reasons, but the basic processes of MacOS were making it nearly inoperable periodically throughout the day. I gifted the old one to my gf, and I can hear the fans spin up from across the apartment when nothing else is happening but indexing. I recall regularly being irritated that I'd just have to wait a while for the indexing process to finish before getting anything done. Idk wth is going on, but it puts far more strain on the system than anything else I could throw at it except games and Docker. Even ProTools doesn't seem to produce audible noise unless a bad plugin or a rendering is taking place.
Aside from that, the Settings menu memory leak (or whatever it the problem is) is very much more apparent on the older mac than it is on the new one, but it's still reproducible. Neither computer is running Tahoe yet, these issues were already present, but based on on your comment, they might now be functionally worse in addition to being a performance and user experience joke.
My new Mac is still amazing hardware-wise, and since those issues seem to just be compensated for, perhaps by having efficiency cores that they're able to delegate background processes to, but the sluggishness and in-adequacy of frontline processes and apps must be embarrassing for what I presume to be smarter engineers than myself who probably just don't get to allocate time or energy toward any of the problems, especially with things like Xcode and SwiftUI also having major issues, and the mac being a relatively small market.
I make a habit of turning off spotlight almost entirely. Search never returns what I want anyway, and the juice isn’t worth the squeeze.
Go into preferences, spotlight and you can add folders to exclude from indexing. I add my home directory and most of the system directories and that more or less fixes the issue.
That's the way to go. Who the hell searches for reminders or podcasts or anything besides files and apps on Spotlight?
Despite my complaints about performance, I do use Spotlight constantly, but like you say I'm just using it for apps and files, it's nothing but frustrating to see them try to redesign it around a global entity search paradigm.
Yeah. I wish there was a way to turn off full indexing of content. Content search always shows me pages and pages of junk. "Oh, looking for your todo list? That word showed up in this 1gb video file! And all these C header files. And ..."
The last good file search I've ever used was in windows 98. There was no indexing. When you did a search, it looked through all the subdirectories for a filename which matched the search term. It was glorious.
Ironically I use Spotlight constantly, and have always found the results mostly good enough for my uses. There are probably third-party apps that solve that problem more reliably though.
The instructions for fixing a Mac's corrupted spotlight index are amazing. I was planning to do it earlier this year, but the number of manual actions was just too ridiculous. Then, after it was broken for months, it spontaneously started working again.
It's a little heterodox, but not hard at all[1] and it takes literally less than a minute to trigger the rebuilding.
[1] https://support.apple.com/en-us/102321
The ones I was reading involved recovery mode and editing inodes.
I’ve rebuilt my spotlight db several times over the years by adding root to the exceptions list and removing. Whatever you found was going way overboard.
Search works great for me, I’m sorry it broke on your machine but it needs to be broken for everyone to be on Microsoft’s level
Haha fair enough, and now it's fixed on my machine but Windows Search is still asking if you'd like Bing with that.
It's funny, bing literally means disease in Mandarin.
Hahaha always with the bing
> But Spotlight file search is completely broken, rebuilding the index doesn't help, and web results are the only thing it returns.
I had the same issue; killing Spotlight processes fixed it. (A reboot would probably do the job too.)
Hey it worked. Thanks!
(Killing the process, ofc)
M4 works great for me. M1 Max with 64gb of memory consistently has issues.
For what it’s worth, my 2020 M1 normal is chugging along like the champ that it is :).
FWIW haven't experienced this at all on an M4 Max (with Slack and VSCode open).
To be fair, the M4 Max is such a beefy machine that you could do a lot of things wrong and still not notice it.
True, but looking at Activity Monitor I don't see any CPU or GPU spike when having an Electron app open and scrolling in Chrome (vs scrolling without any Electron apps open)
Apparently the issue has to do with transparencies (shadows and straight up transparency), so could be a question of capabilities not capacity e.g. older gens have less range and some non-default require falling back to software whereas newer gens can keep to hardware.
Watch your power usage. With large windowed VSCode or Cursor, you will see far higher CPU and GPU usage by WindowServer and more system power consumption. It’s easier if you track it with stats.app.
Strangely the WindowServer issue is a constant issue on my personal MacBook Pro, but I've never seen it on my identical work MacBook Pro. It seems like there's some other factor that is necessary to trigger the problem.
Just imagine you are investigating a bug and everyone is trying to express their opnion on whose fault is this. What happened to not having a blaming culture?
Would never have imagined the day when using Chrome on my personal M3 Macbook would feel slower than my corporate Windows laptop.
I shouldn't have updated to MacOS Tahoe on my Macbook knowing that it was a .0 release. They need to fix this ASAP.
Anyone ever experience Zoom meeting lag that reproducibly connects with receiving a Mac notification?
I've had this issue on my M1 and now my M4 mac for about a year now, and I can't figure it out. Uninstalling and reinstalling hasn't helped.
Literally, someone can reliably send me a slack notification in a meeting (even when DND is on) and cause my Zoom outbound video to get gummed up.
Edit: I ask because I wonder if it has to do with this.
I started experiencing massive overheating issue on latest version of Zoom and on macOS 26 and now 26.1 beta as well. Haven't experienced what you're describing, it's really odd.
I was just noticing the stuttering and lag but I hadn’t tracked it down to electron yet.
It seems odd that Apple could release an update that breaks common software, and not go to the trouble of at least contacting the developers of the software and discussing the issue.
Before I left Apple ~10y ago, it was pretty common to drop linked-on-or-after hacks into AppKit and UIKit to keep popular software chugging along. Assuming they're still doing that sort of thing, this was either missed or deemed not high-enough priority to add such a check (or maybe one was added, and the only reason this issue has been noticed is because Electron and Electron apps are now being built against the macOS 26 SDK).
If I'm not wrong it affects VS code hence Cursor, Kiro etc.
At least I notice fan going jet speeds with VSCode lately.
Well, that's...Electron for you.
The most inefficient solution (in both space and time complexity) being suggested to build desktop apps is now shown to be causing widespread sluggishness.
So much for interviewing developers for algorithms and data structures. Also Rust won't save you or make Electron faster either.
Developer experience is not necessarily better with JS based stacks.
In fact it can be worse than many, including modern C++.
Of all the points you mention, compatibility with websites is probably the only one that can be considered exclusive to Electron codebases.
Developer experience is never more important than the quality of the end product. The goal is to make good software, not to have the easiest time possible making mediocre to bad software.
For most commercial endeavors, the goal is to make money. If you're lucky, that goal is somewhat aligned with making good software, but in practice there's always a compromise between quality and development cost.
This depends. Sometimes bad software can win. You're probably not a business person
>Developer eXperience
if all you can create are electron apps then you are not a developer.
>cross platform
many programs are cross platform, without the need of Electron.
>open standards
???
>easy compatibility with websites
Electron isn't necessary, e.g. Telegram.
>easiness to keep updated
not Electron exclusive
Electron exists for lazy "programmers" to make their products as fast as possible, without caring for code quality and their customers experience. This is why managers love it, it saves money: you don't need to hire proper software engineers nor allocate an appropriate amount of time to develop and maintain your product.
Electron is part of the enshitification of the web and the IT in general.
1. This is about a specific bug, not about Electron in general.
2. What better cross platform GUI alternative do you suggest?
Avalonia. https://avaloniaui.net/platforms
anything which uses native code
How would that be cross platform?
Plattform independent abstractions
One-liner for electron developers to fix the issue:
`browserwindow.setHasShadow(false)`
Electron haters are going to have a field day over this (obviously it's not an electron issue, but why they care?).
Joke’s on them, turns out that it is an electron issue.
https://news.ycombinator.com/item?id=45377917
It’s not.
Individuals used to make sophisticated native apps as shareware for $10 back in the 1990s and today big teams rely on crap like Electron. The enshittification of everything.
How difficult would it be just to switch to Swift for some of these apps?
You're talking about adding at least $10M to the budget and a 2 year lead time for each of these companies.
Without question worth it for the big CO’s like salesforce (market cap $230B) and MS (market cap $4T)
Another great reason not to have upgraded to macOS 26.
I'm a simple man, I see Electron I don't install.
Awesome if you're a one-man-band.
Not awesome if you're in a large company where you have to communicate with others and don't get to choose the medium.
I find Slack and Discord to work fine in browser tabs and never felt the need to install their desktop apps. VSCode/Cursor is the only Electron app I felt actually provided value.
I’m surprised to see so little pushback in press to iOS/macOS 26.
I’ve been part of the public beta and it’s been so weird going from “this sucks but it’s a first beta” through “it really isn’t improving much as time goes by” to “we’re a week from launch, there’s no way they release this after the Apple Intelligence fiasco”.
And yet here we are. Performance issues, ui inconsistencies and garish design everywhere.
I was going to wait for a few bugfixes until I upgraded, but I was forced to update to iOS 26 because the AirPods Pro 3 that I bought required it for some inexplicable reason (which I didn't know until I tried to pair them). The AirPods are just fantastic in every way and a huge leap forward, I don't regret buying them for a second. But sheesh, none of the OS updates were ready for release. I found 3 obvious bugs (non-functional UI elements, invisible labels due to incorrect handling of dark mode, soft locks caused by guided access) not to mention a distinct pause when unlocking the device, GPU issues with Safari. It seems like the pendulum has swung from Apple making mediocre overpriced hardware and reliable software, to making best-in-class hardware and garbage software. I'm hoping that with the end of Intel support we get a "Snow Leopard" style polish and bugfix of the entire stack, but with their recent track record it seems unlikely. It's just inexcusable for a company with Apple's focus on consumer products and market cap. At least Microsoft has the excuse that they have a sprawling empire to oversee.
I'd hate to suggest this, but I'm concerned that outlets are hesitant to critize Apple for fear of them losing access.
That would make sense for the mainstream outlets, but I’d expect a large number of influencers jumping on the bandwagon of “apple in hot water!!”.
Tahoe is the worst macOS release I've ever experienced in 20 years. I think not even Yosemite was that bad.
[dead]
I upgraded on launch and didn't notice anything too wrong. I like the UI and performance seems fine?
Yeah, screen time for kids is absolutely broken in iOS 26.
I'm glad I'm not the only one experiencing this. They absolutely destroyed Guided Access in iOS 26 to the point of borderline non-functionality. I've had the system idle-sleep while in Guided Access and wake to a lock screen that I was unable to interact with in any way, including turning off guided access. Softlocked my device for about 5 minutes until panicked swiping and button mashing managed to snap it out of it. There appears to be a race condition with the lock screen and home screen, if the device idle sleeps in guided access mode then about 50% of the time it wakes to the home screen instead of the app. Sometimes waking it on iOS shows the lock screen for a brief second before the app starts. Also, exiting guided access sometimes doesn't recolor the apps on the home screen so it still appears as if all apps are disabled. Not to mention that they reclassified the pen settings dialog as a "software keyboard" meaning that in order for my kids to draw with the Apple Pencil I also have to allow them to enter text now. None of these were issues on iOS 18.
I think you mean “since release”.
Hasn’t it always had horrible problems? I’ve never heard a good thing about it in use.
I used it from iOS 15-18 and it always worked great. We try to limit our kids' iPad use to drawing in Freeform and the occasional edutainment app, and I never had issues with them escaping Guided Access or it causing lockups. The fact that I can barely trust it to work properly on iPadOS 26 is a huge disappointment for me.
I’ve never used it myself (no kids) but I’ve long heard tales of kids being able to get around it, it miscounting time used allowing too much use, etc.
It sounds really nice for the intended purpose, just not reliable for many.
It’s just getting worse with each new iOS release. For example before iOS 18, screen time requests from kids would come as notifications, now they are coming in as iMessages, polluting history of your actual conversations, so you can’t have functional group chat with your kid & parents.
Now in iOS 26 they messed up calculation of how much screen time is spent, so an app can have limit of 3hrs/day and still lock up after just first 9 minutes of screen time spent in that app in a day.
It seems like they have zero QA.
You are describing every single macOS release. I still remember their permissions disaster which broke the majority of critical apps in people's workflows at launch. It's always best to wait a few months to upgrade.
> Performance issues, ui inconsistencies and garish design everywhere.
Hasn't that been Apple's norm for a few years now?
Not trying to land a cheap dunk here; I've honestly been running into rough edges and bad design with every major release for a long time.
>Hasn't that been Apple's norm for a few years now?
Not to this degree.
I’ve had 3 memory leaks in native apps, including the calculator. There’s basic alignment errors pretty much everywhere. In many places text can become fully unreadable (black on black, white on white, text over a transparent background with overlapping text below…).
It’s not slightly lowered quality, it’s the kind of inconsistency you expect mixing custom launchers and icon packs.
Yep
I'm doing my job: https://manualdousuario.net/en/liquid-glass-2/
I won’t lie, with today’s apple the implied possibility that the resource hungry style is intentional is believable.
It's possible that the majority of people are fine with it. I thought it would hate it but I love iOS 26. It adds much needed depth and allowed me to turn off accessibility options.
- Button Shapes: Buttons actually look like buttons.
- Reduce Motion: Animations are a lot more fluid and the parallax effects are more subtle. They don't trigger motion sickness like the previous ones did.
- Larger Text: The worst areas of the UI have better contrast.
- Reduce Transparency: While there's more transparency effects, they're a lot better.
- Increase Contrast: If I do need to turn this back on it is a much better integrated effect than previous version.
The changes in macOS 26 are half-finished. Anything with raised glass looks like plateaus in the middle of a flat desert. Only half the apps have the new rounded corners on window and they do not match the rounded corners in the rest of the interface. They even cut off parts of the interface like the bottom of every scrollbar.
It's disappointing. I loved Windows 7's aero theme.