So I was discussing 1Password’s recent decision to switch to Electron, and I want to elaborate a little more on why I hate Electron so much.
You might not know what Electron is, but there’s a good chance you’ve got one running on your computer right now. Slack and Discord both use Electron, as does Facebook Messenger for desktop and several other popular apps. If you’re perfectly happy with these apps, I apologize in advance for the annoyances I’ll share with you that you no longer be able to un-see.
Your first clue that Electron is bad will come when you visit their home page and they proudly show a list of “Apps users love, built with Electron,” and Microsoft Teams is right there in that list:
Nobody loves Microsoft Teams except maybe some people at Microsoft.
Electron Apps make their way onto my Mac, acting like they’re regular old Mac apps, but then as soon as you start using them, you realize they are web applications in disguise. Developers love using Electron because developers are lazy and software companies are often cheapskates, and it’s less work to build an app using web technologies you already know.
They are using Chromium as their backend, so they hog a lot of memory, which some people care about. I bought an overpriced Mac Pro and loaded it up with enough memory that I don’t have to care about that. But I still manage to find other things to be annoyed about.
You look at Electron apps and you realize pretty quickly that they often don’t really look like an app for your Mac (or whatever platform you’re on). And that’s true! Unless the developer goes to painstaking lengths to make every UI element look platform-specific, the app just kind of has its own design language, independent from the rest of your computer. That kind of sucks. I bought a Mac because the apps on the Mac feel like Mac apps. If I’m going to load up with a bunch of platform-agnostic apps that don’t bother to fit in, what’s the point?
Electron apps occasionally will support multiple windows, but most don’t bother. They instead implement their own version of “window management” which will usually amount to a singleton window that is a bunch of tabs. Got two monitors and you want to have documents from the same Electron app open in both of them? Tough shit. Want to rearrange the inspectors? Nope! You’re stuck with them as side panes. Want to actually take advantage of your OS’s cool window management features like Expose? Well, you can’t, because the app is just one window.
Apps like Slack will nominally support drag and drop. I can drag a file into Slack and it will pick it up. But heaven help me if I want to drag an image from Chrome into Slack; it won’t do it. I can’t even drag images from the Photos app into Slack; Electron doesn’t support the intents that the Photos app provides. To work around these Electron apps that suck at drag and drop, I actually have installed an additional app on my Mac called Yoink. I will now drag and drop things in two steps: first I’ll drag and drop an item into Yoink, and then I can drag and drop from Yoink into Slack.
Oh, and copy and paste doesn’t quite work either; I can’t paste a gif into Slack; it will just paste a still image from the gif instead.
And of course, this week 1Password came along with their newly redesigned 1Password 8 and stealthily bragged about how all 1Password apps now share a unified Rust backend, while really quietly saying that they are using “web technologies” for their apps. In other words, Electron.
This is really disappointing because recently 1Password was bragging about their continued love of native apps (and I believed them because they even went to the effort of making their Linux app a GTK app).
When you look at 1Password 8 screenshots, they do indeed look pretty good. But being a good Mac app isn’t just about how you look, it’s about how you feel and how you work, and within a couple minutes of launching the new 1Password it’s obvious that no amount of care can work around the crappiness Electron causes your apps to have.
Scrolling lists kind of suck. AppKit apps have beautiful, buttery scrolling, and the scrolling acceleration feels consistent and just right, always. Scroll through a big list view in an Electron app and it’s… not quite right. Scrub through the list of logins in 1Password 8 by dragging the scrollbar and content just doesn’t render while you scroll. And of great annoyance: you scroll and hit the top of a list in an Electron app, and instead of getting that fun little “rubber band” bounce at the end, it just hits flat.
Here, I’ll show you. Here’s how it looks to scroll to the top of a list in a native AppKit app on macOS:
CleanShot 2021–08–13 at 11.52.04.gif
And this is what happens when you scroll to the top in an Electron app (in this case, VS Code):
CleanShot 2021–08–13 at 11.53.30.gif
“Aaron, you’re really getting nitpicky here!”
You’re goddamn right I’m getting nitpicky! This is my computer. You come into my house, and you want me to use your software on my Mac that I paid a premium for, you fucking play by the rules!
The Mac platform is full of hundreds of little tiny behaviors that make the Mac a Mac, and you tend to get them for free when you develop with AppKit, and it’s difficult staying on top of these behaviors. Now that I’ve seen 1Password try and fail to build a truly Mac-like Electron app, I don’t think it can be done.
It’s funny, too. Most of my favorite Mac apps are made by these really small software companies that care about the Mac. They tend to make only Mac apps, and they stay smaller because of that. But year in and year out, they keep making great Mac apps because that’s their focus.
That’s what 1Password used to be doing. They did branch out over the years, making a Windows app, then a Linux app, but for the most part they’ve been focused on gradual, organic growth. But then they took VC money, and now, despite being richer than they ever were before, they now are in this strange situation where they can’t afford to give these individual platforms the attention, so instead they are coalescing around Electron and offering a compromised experience across the board.