Too many Mac apps are being built with Electron
hyperdiskapp.com
hyperdiskapp.com
I see it as, if not for Electron, this app wouldn't have been made for Mac period or it would not have feature parity or it would be more expensive in terms of subscription or one-time buy price.
Choose 2 out of 3: Low price, feature parity, app performance.
For certain types of apps, consumers have chosen low price and feature parity.
I think it's fine for apps like Spotify, Whatsapp, Discord, Teams, etc to use Electron. They're cross platform apps that also require a web version. Electron provides acceptable performance for them.
VSCode is the prime example of having huge success with Electron. It's free. It supports many platforms. It has feature and plugin parity. It even allows very interesting use cases like spinning up private web instances that have all your local settings.
Obviously there are types of apps such as video editing and rendering that should not be Electron apps - and they aren't.
Spotify uses a significant amount of power/battery while playing music when my laptop is otherwise idle. I can only image that being due to decrypting their drm'd music in javascript. Many people won't notice and therefore not care, but I do think it's quite the drawback. Much more than the ui not looking native or not perfectly integrating into my desktop.
Even running through wine would be preferable to that.
I've not had an issue with Spotify for some time, I generally like the app other than the odd nitpick here and there. I haven't encountered bugs for a long time, not ones that stop me using it.
Apple Music on the other hand... a native app that, being written by Apple themselves, should be the epitome of how to do it in terms of quality and user experience, is terrible! It feels laggy. I just opened it and clicking between sections there's like a noticable tiny lag in the highlight under the list items where spotify feels immediate. AM looks pretty sparse. But far worse than those things, it often breaks and is unusable. "There was a problem accessing your account" restart and it works. When I first signed up to it I had to contact Apple support because the app just wouldn't work. I guess at least they had a support channel where I could chat with someone. The app quality is appalling though.
All that to access a shitty streaming service that is lackluster on so many levels. Starting by the fact they remove much more of the catalog than Spotify does and they even removed access to tracks I bought on the iTunes Store, which is completely bonkers to me.
After 4 years on Apple Music, I just went back to Spotify, because not only are they significant benefits (don't lose everything if you want to cancel sub and works way better in more platforms) but the app itself is just better. It also starts streaming much faster on any connection, and even though I did like the Apple Music discovery playlist, Spotify is better at this game in many ways.
In the end Apple Music perfectly illustrates the questionnable success of today's Apple stuff because they have a cult following buying anything they do even though they are not particularly features nor price competitive.
By the way, the Spotify app lets you use your mobile as a remote for any running instance on your network, inside the same app, with the same playlist/track saving capabilities. But for some reason, Apple, who control the whole technology stack is stuck with a half assed remote app from iTunes vestige that cannot control Apple Music playlisting (only able to browse and play) and their overloaded (extremely busy full of useless crap irrelevant to the user) mobile app cannot do anything useful.
I really don't understand how people can reason about with today's Apple prices, because they are clearly stuck in another era and sell subpar shitty products...
This is my experience on a Mac anyway.
Unfortunately the development stopped, or I'd still use it. https://cancel.fm/ripcord/
There's absolutely nothing preventing a large, funded company from achieving the same on the tech level.
Also, it's not how portable things work. The shell may need some crossplatform work, but the behaviours and core of the app is the same.
This is not a money issue.
I say this as someone who loves the Mac, and goes out of his way to avoid electron apps, but in most cases, it doesn't make sense for a company to produce native Mac apps. Especially if that company is VC funded.
I worked in shops in the late 90s into the 2000s that produced cross-platform Windows/Mac programs. It was a lot of fun in many ways. But even the best-run teams with the best cross-platform stacks suffered from slower development times than they would have if they were targeting a single platform.
Even when like 90% of the code is cross-platform.
There are lots of reasons why. Some of it is due to platform differences. Sometimes the same feature couldn't work the same way across platforms. That meant either correctly doing extra design and planning ahead of time, or figuring out that you messed up and calling emergency meetings to figure it out. It meant extra work producing documentation that called out the differences. It meant training support staff on the differences.
Another issue was keeping all the teams on the same schedule. If you've got "one good person" working on the Mac side of things, and they get sick for a week, then either you ship the Mac update late or you delay every other platform.
Finally, there's always been a lot of churn on the Apple side. APIs getting removed. The platform moving to a completely different programming language. Toolbox. Carbon. AppKit. SwiftUI. Pascal. C. C++. Objective-C. Swift.
So a lot of teams went the route of trying to create their own cross-platform framework in C++, and focused their platform developers on just implementing the framework, so all the app work could be done by the cross-platform devs. The Mac people could thus isolate the app from the technology churn on the platform.
This never worked out. It almost always ended up being faster to write separate apps from the ground up for each platform, because the cross-platform framework would balloon into a monstrosity. You'd spend more time on the framework than any app, and somehow, you'd still lack functionality that the cross-platform devs discover they need for the latest top-priority feature coming down from management.
But typically, on the best teams, it wasn't just one person per platform. Because of the need for so much coordination between platforms, lots of time was spent in meetings, so you'd need at least a few people working on each platform. These are things you don't have to worry about when you're an independent developer working on an app that hits the company's API.
You might be temped to point out that this could all be avoided if you just had a server team write the server software, and one-person platform-specific teams that just wrote native apps that communicated with those servers. Sure, you still have to produce different documentation and support resources, but most companies skimp on those anyway.
You'd also have a bunch of apps with different features, shipping at different times, but they're all great apps, so that doesn't matter, right?
The result is that you'd come up with decently great apps for each platform. The project managers might even be able to recognize that they're cool, great apps.
But you'd still be like a cat bringing them a dead rodent. What are they supposed to do with this?
Admittedly, some of this has to do with how middle-level project managers justify their jobs. They spearhead features and make sure they get delivered into the product, theoretically increasing its value, and therefore the value they delivered to the company.
But it's not all that kind of bullshit. Sometimes it's essential to the company's bottom line, or to an attempt to improve that company's bottom line.
To use Slack as an example, at the start of the COVID lockdowns, Zoom usage shot up tremendously. Slack felt that this was a potential threat to their place in the market, and they introduced huddles. It took like a year, and Slack huddles are still worse than Zoom, but it was still probably good enough to retain some subscribers.
If it took a year with Electron alone, just imagine how much extra time it would have taken to plan and coordinate the feature across multiple platforms. Since it's important to the company, you can't just let the platform teams roll it out on their own schedule, or decide it doesn't fit well with the feature set they've cultivated for their platform. You need it out, you need it fast, and you need it to work the same.
Electron was the first cross-platform solution that worked well enough to make that a reality. It sucks in many ways. It doesn't follow platform conventions. But it's good enough that people can use it. And, bonus, the apps are all written in a language and an API that millions of Web devs are familiar with. No need to worry about the schedule slipping because one employee was sick.
In a fast-pased business, you need fast, universal turnaround on important functionality. It's more impactful to your bottom line than customer experience, even if that functionality is just some dumb BS like Discord super reacts or something.
That argument would hold more power if there wasn't an existing native client for Slack and Discord, made by one person, with all the features I needed, working with absolutely no lag and minimal resource use, working on MacOS, Linux and Windows.
Did this 3rd party app have 100% feature parity with the original Discord/Slack app the moment new features came out? If not, what was the time delta between the two?Why didn't the author continue development? It seems like it was on sale for $20? Surely because people value native app so much that he would have made more than enough money to continue development?
Can't speak to the feature compatibility completely, but testing it over a week or so I've not found anything missing at the time. I think the video calls got added after the development stopped and that never arrived.
Then Discord started banning third party / differently behaving clients, so that part got dangerous.
My guess is no. There weren't enough people who wanted to pay $20 for it. That should tell you how much people actually value native for this category of apps.
As in it doesn't exist because there is no money in it because it doesn't change the company bottom line in any meaningful way that would warrant additional hiring. And it is not even viable for a single person with reduced running cost to make it a viable revenue stream because they would be too few people purchasing it; since as long as the (maybe worse but still largely viable) official electron option would exist there would be no point for a user to spend money.
The development has stopped, because it doesn't make enough money for even a single guy to justify spending time on it. At some point even if it's a passion hobby project, making software is actual work if you are bound to another entity roadmap...
It doesn't make any sense to do that to Discord because it's cross platform by necessity and design.
I’m going to discount/ignore things like browsers.
I think HN users are in the minority of users who seriously care about speed/performance. Electron is good enough for pretty much everyone else, and it's clearly working well for for Discord and Slack. It makes more sense IMO to invest time in improving Electron efficiency rather than telling companies to just avoid it.
Also for many electron apps you're going to write a native component too.
The point of buying software on the Mac is that it is tailored for the specific environment. Someone who doesn't care about any of that wouldn't even be a potential customer, since they wouldn't even use Macs often enough to consider buying anything.
At most it would only be attracting customers who are forced to buy that software because there are no alternatives.
This has not been my experience with Electron apps at all.
> An app that’s under 20MB is very lean. Apps over 100MB better have a good reason for being so big, and apps above 500MB are probably bloated, unless they’re games or legitimate mega-apps like Photoshop or Final Cut Pro.
Smaller is better, surely. But outside of gaming computers and embedded software, how often are most people really scraping together megabytes of disk space to store their 200MB applications? Not very often, is my anecdotal experience.
> While they’re running they also take up RAM (memory,) and use CPU processing power.
Sure, I won't argue at all here. This one hurts a bit sometimes. I suppose it more so hurts people running low end hardware.
This might get filed under my list of "hot takes," but rarely, if ever, is my computer slogging and I open up htop or Task Manager and discover it's some Electron app swallowing my system resources. So I find a lot of the anti-Electron arguments to be a bit exaggerative.
Because there exists tools that make it easier to ship a good software product to the market, and without these tools, there are many software products that would simply not exist because of the much more prohibitive cost of developing bespoke applications for every platform you want to support. And the flipside to that predicament, not supporting everyone in your target market because you only developed one of the apps you need to develop.
There is a trade off. You aren't getting nothing out of the bargain. Maybe you noticed, but this blog post we're commenting on is actually an advertisement for a software product that only supports MacOS. Seem a bit ironic, doesn't it? I wonder if leveraging Electron might make it simpler to add support for Windows or Linux systems.
There really just needs to be a cross platform API that renders with native widgets and is easy to link / build against for OSX+, IOS+, Android+, and Windows+. Make the platform open spec and free to implement and Linux / BSD will probably follow on their own.
The do or die is shipping natively, with the OS, on the popular closed platforms. Web browsers are where engineering dollars are already spent to adapt a common API (web tech) to native platform tech and that's why Electron and similar things see traction.
How is 16 seconds even remotely reasonable?
...which is exactly what I do.
The desktop app is only really useful for reading images with small text or shunting around attachments. As a messaging app it's a mess, and not even remotely a first-class way to use WhatsApp.
P.S. it takes even longer if you haven't used it in a while while it catches up while re-rendering for some reason so it looks like the whole app is in super speed... rather than just do that behind the startup loading bar and save the useless visual updates that look half-broken?
The author mentions the official WhatsApp weighing in at 324 MB. There's an open source WhatsApp clone made in Godot that builds at about 55 MB. Of course with all the media and features of WhatsApp its not a apples to apples, but regardless the results are interesting.
https://github.com/3ddelano/whatsup-godot
Fun fact, Tesla also uses Godot for their mobile app.
Consider Twitter. The healthiest app ecosystem Twitter ever had, on both Mac and iOS, was when there was no official Twitter app. There were a bunch of great third-party native Twitter apps. But then Twitter acquired Tweetie, released an official app, and that was the beginning of the end. In the end, Twitter destroyed its own app ecosystem by trying to control everything.
"Why is [web service] using Electron?" is the wrong question. The right question is, "Why is [web service] writing native apps?" Let web developers be web developers, and let Mac developers be Mac developers. Each can do what they do best, without trying to do everything.
The problem with this is that those apps are kind of boring to make and there’s not much money in them.
Why?
> there’s not much money in them.
Enough money to sustain a big corporation? No. Enough money to sustain an indie developer? Yes.
I just assumed lots of people think like this due to the dearth of nice UIs on top of apis.
"just UX". I think this attitude separates you from a lot of native iOS and Mac developers, whose primary focus is UX. Indeed, one might say that's the foundation of those whole platforms.
> I just assumed lots of people think like this due to the dearth of nice UIs on top of apis.
What dearth? Like I said, Twitter used to have a great third-party app ecosystem before the company intentionally destroyed it.
Of course my interest in UX separates me from other developers. There are lots of people making a living doing UX. And I’m not one. But my point is, it seems like those UX people aren’t creating lots of open source projects, or commercially viable projects, to provide nice UIs on top of apis.
You speak vaguely about "people" making Electron apps, but the big issue is that big companies are making Electron apps for popular web services, and the popularity of these web services is why a lot of people are complaining about the Electron apps.
> it seems like those UX people aren’t creating lots of open source projects, or commercially viable projects, to provide nice UIs on top of apis.
Which APIs are you talking about? It's difficult to make a commercially viable project on top of obscure or unpopular APIs. The point of my original comment is that popular APIs can generate their own native app ecosystems.
1. He's published the article under his native Mac app's blog, which he has every incentive to do and for that reason is biased.
2. Comparing a local text editor to an app that loads tons of rich media content from one of the busiest servers in the world discredits the argument in a major way
"WhatsApp Helper, WhatsApp Helper, WhatsApp Helper (GPU), WhatsApp Helper (Renderer) and WhatsApp Helper (Renderer). A Mac app shouldn't need any of these. They’re probably communicating with each other using sockets or ports, or maybe shared files. This really isn’t how you’re supposed to build a Mac app. This shouldn’t become normalized."
I dislike Electron apps, too, but isn’t one reason for that category of apps to use huge frameworks is that they are all communication apps for people on multiple platforms? Apps for such consumer-facing uses would run into a lot of problems if the details of the interfaces were different for users on different OSs.
Hell, the author even self promotes his own app as a model to follow. Surprise surprise the only supported platform is Mac.
I don't think it's realistic to expect every company, regarless of size, to redevelop their application in native toolkits for every platform. It's much better overall to develop a one-size-fits-all solution, and Electron is obviously one of the more popular tools for doing this.
Now, I definitely support a leaner cross-platform framework, but advocating that companies "use Apple’s own tools and toolkits, and stick closely to them" is fanboyism at it's most extreme.
Fanboyism was more in regards to the "follow the examples of these apps", where most of the apps ONLY target Macs.
I have kick ass extensions filtering ads, giving me adjustable/customizable dark mode, I have a great form auto-saver, I have audio scrobblers, I have pinboard and are.na extensions.
I have a url bar! I have tabs! I have back & forward buttons where I expect. I am afforded so much by the browser chrome. I don't want my user experience to be at the behest of some company building an app; I want the freedom and power to go further. And it feels like PWAs are a step back, to a form of computing that doesn't respect user agency.
And alas, a number of permissions are being created that only work for PWAs! This is the biggest threat I see to the web I want: PWAs forcibly removing me from the situated environment I regularly use/enjoy, the browser.
Firefox pulling the plug on their PWA efforts was pretty frustrating.
On macOS, you get native notifications, a bright red dot on the app icon for notifications, and a separate window from your browser. Lastly, the app might optimize for native macOS APIs strategically.
Damn I miss those glorious months or years when Chrome tabs were just app instances.
It's insane to me that the browser & OS both have their own totally parallel/separate ways of managing multiple windows. That the two don't work together at all. The os has seemingly made such faint progress in helping complex apps manage multidocument setups.
Then the platform developers need to work together and offer a better option. Its as simple as that. I dont think _anyone_ is proud of electron apps, but mostly there simply isn't a better alternative, complaining electron sux doesnt solve the fact all the other options suck more.
Qt, JavaFX etc... give me a break.
For the web as well.
Both the web client and Mac clients freeze or get really slow if people send reactions to messages, it messes up the sync and any messages that I write won't be sent until all reactions are synced.
It is not a machine problem. It's how WhatsApp works nowadays.
- Slack is very reactive, displays a spinner in <2s, takes a few seconds (<10s) to fully load and draw - perfectly acceptable
- Outlook (new experience mode) is a bit slower, takes a few seconds extra to draw, but is still reasonably fast and manageable considering the amount of data it handles - still reasonable, although a bit laggy at times
- New Teams ® (released somewhen Q3-Q4 2023) takes >15s to open or display anything, >15s to draw, >5s to switch across organizations, >1s switching chat tabs in the same org
I'm not spending 3k$ every 2-3 years because "my computer is the problem".
We need to force devs to use and test on non-workstation machines, that don't have 64GB of RAM and the latest CPU/NVMe drive, especially for Electron apps, which open an entire browser copy for each application.
Apple has been absurdly milking its consumer for quite a while now, without much merit in the form of technological advantage.
It's not the fault of software companies if Apple hardware is overpriced, they don't have to care, their hardware are cheap enough...
But to be honest it is quite possible since they still sell overpriced 8GB slow as molasse machine that somehow gets hyped up. Their base Apple Silicon machine barely clears the bar for passable (ignoring price) yet we are supposed to believe they are performance monsters; that hasn't been my experience.
If it really takes 16 sec either the mac truly suck or there is something wrong with his setup...
It would be an argument if Mac native development could be ported to other platforms relatively easily. But that would take Apple to care about anything else than itself so it will never happen. As is, it only makes sense to develop a Mac native app if you are absolutely sure that it is the only platform you want to target. For this reason, there are some successful niche apps, but I believe that it is not a very good idea for the vast majority of projects.
Apple has some good librairies that can speed up the dev process of some specialty apps, but if it becomes a complex long running project, it is most likely going to bite you; because of being tied to the Apple agenda and the fact that they have zero problem in deprecating everything every 5 years or so, creating much unnecessary work and erasing a lot of value creation.
And this is under the assumption that Apple native stuff is inherently better than other native stuff. That used to be true in some cases, but with recent developments I don't think the argument holds up. Native stuff does not bring a lot of advantages while not feeling much faster than alternatives and recently being even more bugged than you would expect. Anything swift is generally just not very good when it's not just plain bad. I think the native Reminder app just got barely usable, after like 3-4 years. At this point I prefer electron stuff...
The argument about ressources and bloat is typical Mac user stuff. It only matters because Apple is a greedy corp charging way too much for way too little. People using Mac have to care, because there is a very real and large cost to overprovisioning your system to guarantee performance. But the reality is that RAM is cheap and storage is even cheaper (especially if you don't need to have the fastest thing around) so it doesn't matter. People who want/need fast system in all conditions just max out their RAM to 32/64GB and their SSD to multiple of terabytes. It cost them less money than it cost upgrading 8GB of RAM at Apple. And while every Apple fanboy is boasting about Apple Silicon battery thanks to its power consumption the reality is that you will find computers that cost half to 2/3 of the price of Apple's cheapest offering that perform at least as well (from a benchmark standpoint) but in practice much better in real-world use (because of many factors, like application technology just like this post says).
Alos, on Windows 11 WhatsApp uses 50-80MB of RAM but that's not surprising considering how bad macOS is with third-party technologies. In general, there is some widely held belief that macOS (and Apple stuff in general) makes better use of the hardware. As someone who runs both systems concurrently (and even ran 2 identical Mac Minis, one on windows, on on macOS) I can say that this is a load of horseshit. I find Windows to be less ressources intensive, especially if you have a dedicated GPUs, then system RAM use is much lower. A major problem the Macs always had was poor GPU specs, but they made it even worse with Apple Silicon, because, surprise, you need to share your overpriced soldered memory just to display stuff too. Isn't it nice? This was an intended consequence and the unnecessary RAM soldering (somehow justifying the absurd price) just a means to an end: make more money, with absurd margins.