Next week is WWDC, so it's a good time for a thread about the 1Password browser extension for Safari, its history, challenges, and the future — both what we're working on and what we'd like to see from Apple, Safari and the web platform at large. 🧵

You might not know that 1Password Safari extension has been through five (!) rewrites over about a decade, with each incarnation adopting the latest supported framework:

2009: Swizzling Safari 😱
2011: Safari Extension
2017: Safari App Extension (SAE)
2020: Safari Web Extension (SWE)
2021: Safari Web Extension for iOS

(If you've never heard of swizzling, picture injecting Objective-C into Safari at runtime to implement autofill by overriding methods. It was as great/terrible as that sounds.)

Safari extensions used to trail far behind other browsers. In fact 1Password did not have anything close to feature parity in Safari until just a few years ago.

Everything changed when Apple adopted the Web Extension API at WWDC 2020 — the same one used by Chrome and Firefox. And a year later, Apple brought extensions to iOS.

We were *ecstatic*. We jumped at the opportunity to bring 1Password to Mobile Safari, redesigning every component in just under three months.

https://blog.1password.com/1password-for-safari/

1Password for Safari is here for iOS 15, and it's life-changing | 1Password

Everything you love about 1Password is now available in Safari on iPhone and iPad. And it’s as incredible as you could possibly imagine.

1Password Blog

Each new Safari extension framework meant better compatibility, stronger security, and more features. But there were also growing pains. The SAE and SWE frameworks had much larger surface areas, more bugs, and new and different restrictions.

These kinds of obstacles crop up with any new API. But the issues in more recent frameworks had especially harsh consequences for a critical aspect of 1Password usability: the ability to be — and stay — unlocked.

1Password faces a unique challenge in the web browser: your data needs to be locked (encrypted) when it's not in use, and your unlock keys need to be kept safe from attackers — never cached or exposed in plain text.

Browser extensions do not have any way to securely manage keys. So if you want to unlock 1Password in a web browser, there's really only one good way to do it, and that's with the help of another app outside of the browser — one that can access the secure enclave/keychain.

When you interact with the 1Password browser extension, it sends a message to a native binary asking it to unlock (using biometry if possible) and to provide it with data. If all goes well, you see a prompt to unlock followed by your autofill suggestions.

But if for any reason the connection with the binary can't be established or isn't working as expected, things start to deteriorate. The extension stalls, or locks itself when it shouldn't, or even stops responding completely.

Keeping up a secure connection between a browser extension and a native app is a perennial challenge. It has to be achieved in unique ways for different browsers and operating systems and has been a major area of focus for our teams over my entire decade+ at 1Password.

But if every environment poses unique challenges, the most challenging of all is Safari on iOS. And the second most challenging is Safari on macOS. :)

The difference between Safari and other browsers comes down to a few fundamental issues:

1) Immature implementation of the Web Extension API
2) Extra indirection and instability in the XPC layer
3) Severe restrictions on extension lifecycles and persistence, especially on iOS.

All of these contribute to an experience in Safari that's just not as fast, reliable, or feature complete when compared to the same browser extensions in Chrome and Firefox.

Safari is the latest browser to use the modern Web Extension spec — something all developers are very grateful for — and Apple has made incredible strides to support extensions, especially on mobile. (Looking at you, Google!)

I love being able to use extensions like 1Password, Noir and Open in Apollo (RIP) on my iPhone and iPad.

But it's not fully there yet. There are still missing and incomplete APIs which must be worked around, and others which simply do not work.

https://getnoir.app

Noir – Dark Mode for Safari

Add a dark mode to every website you visit, automatically. Browse better at night with Noir.

An example of an incomplete API is the `onCommited` event which the 1Password extension relies on to implement one of its newest (and coolest!) features: signing in to sites with SSO/social logins. The event is still missing fundamental properties without which this feature cannot work properly. (Radar: FB10006044.)

https://support.1password.com/sign-in-with-provider/

Use 1Password to sign in to sites with supported providers

Let 1Password save, remember, and fill logins in your browser when you sign in to websites with providers like Google or Facebook.

1Password

As for APIs which simply do not work, people report that tapping "Copy" in the iOS Safari extension often does nothing. This is indeed an awful experience — I'm angry at myself whenever someone mentions it. But the truth is, 1Password is calling the clipboard API exactly as it's supposed to. It just doesn't work half the time.

It might seem like we aren't listening, but at the end of the day the fix really does have to come from upstream. (Radar: FB9924270.)

https://mastodon.social/@caseyliss/112526364550291936

@mitchchn This thread was very interesting, and I'm glad you spent the time.

That said, I stand by my thesis: 1Password has gotten worse and worse for me in the last couple years, in every measurable way. I yearn for the time when 1Password was built for users like me, and not for other corporations.

@caseyliss @mitchchn Nostalgia can be great but things weren’t always perfect.

I remember the time when we had a huge number of complaints about 1Password 4 and how it is a huge step back from rock-solid version 3. The support inbox at 10,000+ unanswered emails. The team is burning out because of all the negative feedback.

All this because Apple made a ton of changes in the new version of macOS and it required complete rewrite of 1Password.

@roustem @mitchchn 100%!

All I know is, 1Password used to be a delight *every time I opened it*.

Now — with 1P8 especially — it's painful nearly every time I open it.

---

I'm sure I'm coming across like a world-class asshole, and I am genuinely sorry for that. But I do this because I love[d] 1Password **so. fucking. much.* and I just want it to make me feel that way again.

@caseyliss @roustem @mitchchn I understand very well how underlying platform bugs can mess up the experience and I know damn well that 1P8 has a lot of improvements under the hood and new functionality. Platform bugs do not explain, however, how users lost local-only features, were faced with a new, bewildering, broken app UI, a new extension which has widgets and popups and distractions everywhere, and a constant load of marketing messaging saying that every feature and customer *except us* was
priority one. Apple didn’t do that to us here. I love a lot of what 1P is doing, but honestly I’d give it up if I could have a password manager with a straightforward app and a plug-in that performed autofill without choking back.

I know it’s all harder than that and the trade-offs exist and I do give Agilebits a lot of credit (and get pissed at Casey for complaining so much sometimes), but my feelings are hurt by the product state and product direction.

@joshrivers @caseyliss @roustem I know that you and Casey have other criticisms and I'm not dismissing them. But the past three times I've found myself in a thread of people so frustrated on mastodon, it originated with an issue in Safari.

There's little upside in blaming a platform. I'd much prefer to focus on your feedback about things I/we can address directly. When it comes to Safari, I'll share what I know, call attention to longstanding Radars which will help, and offer suggestions.

@mitchchn @joshrivers @roustem My question is: When people like @caseyliss say that they "used to love 1P and now don't": **Do you understand why?**

Like, I get that you might stand by your choices, and would make them again (for technical and/or economical reasons) - but do you _get_ it? Or do you just think he's wrong, and is looking at the past with rose tinted glasses?

@havn @mitchchn @joshrivers @roustem while you weren’t asking me, let me just assure you that the responses I’ve gotten since 1P8 launched are:

• You fool our software sucked in the past too!

Or

• But you don’t get it! This helps us bring you new features [that you don’t want and at the cost of usability/reliability]!

Or

• Well, it’s all Apple’s fault anyway

The response I wished for is

• Holy shit help me get how we burned that good will!

Or

• What would make you evangelize 1P again‽

@caseyliss @havn @mitchchn @joshrivers @roustem

While I understand you're frustrated, Casey, you've also gotten a lot of other responses as well...

@firebeyer @havn @mitchchn @joshrivers @roustem hahahaha, I have immense respect you dug all that up.

@caseyliss @havn @mitchchn @joshrivers @roustem

I want to emphasize that real people create the products that you so bluntly call "garbage". Your words hold significant weight, and your criticism extends way beyond just 1Password. I feel ashamed when I hear you criticize apps and companies in a bullying manner. And I'm really concerned that your current approach may one day lead to a developer leaving our field (or worse) due to something you say in disdain.

@firebeyer @havn @mitchchn @joshrivers @roustem for better and for worse, I think 1Password gets “special treatment”. I dont think I pick on anything else near as much, because there is no other software I can think of that was so close to perfect. Nor that has fallen off is much.

Even Apple software I hold (/held) in extremely high regard does not reach the peaks that 1Password used to.

I am upset because I REALLY REALLY care.

@caseyliss @havn @mitchchn @joshrivers @roustem

I understand your frustration and empathize with your passion. However, I believe you underestimate the level of toxicity you are introducing. We should work together in tech to set an example for other industries on how to collaborate and provide constructive feedback. Yet, I've often listened to ATP and thought, "I'm glad I'm not on the Apple Music team" after hearing you harshly criticize their work.
@caseyliss @havn @mitchchn @joshrivers @roustem

Don't get me wrong, I can take the feedback, and privately I might say the same or worse. However, a first-year developer, possibly from a marginalized group, working hard may not feel the same way. As someone who is now a prominent commentator in our community and a developer who has likely made as many mistakes as the rest of us, I hope you can understand that just because you're upset doesn't mean you have to be mean.
@firebeyer @mitchchn @roustem If @caseyliss used the strong language against tiny indie developers, I would agree more with your criticism. But Apple is a behemoth, and 1Password has taken more than half a billion in VC funding (https://blog.1password.com/future-of-1password/). And in the 1P case, I don’t think it’s hard to see the lovestration (love + frustration - I just made a word! 🙌🏻) coming from Casey! And I think his criticism is fair. (1/3)
Bringing human-centric security to everyone | 1Password

As our online lives become subject to new and evolving threats, we’re doubling down on protecting the digital privacy and peace of mind of everyday people – at home and at work.

1Password Blog
I don’t think any singular developer thinks his criticism is directed at _them_ - but sees that it’s directed at the leadership. In Apple’s case, it’s about the amount of resources they allocate to their own apps (like Apple Music), and in 1P’s case, how their choices has lead to small customers like us have a lower priority now than we had previously. (2/3)
I do agree that everyone, especially those with a large-ish audience, should be mindful of tone and how they use their voice! But you can look at it from another angle: If _I_ were to speak up, as an Apple and 1Password customer, no one would listen. But when Casey speaks up, more people listen. So instead of viewing it as that he’s “punching down on developers”, you could view it as he’s standing up for himself + customers who don’t have his reach. (3/3)
@mitchchn @roustem @caseyliss @havn I can say with 100% certainty that some developers feel Casey's criticism targets them personally, although I don't share this perception. I'm also not a target of it. However, knowing this and being a Casey fan is why I'm speaking up. I'm not joining the debate on the decisions that were made; I simply wanted to let someone I respect know they are coming across as a bully (in my opinion), which we already have plenty of in tech. (1/3)
Leadership tend to be people too. 😉 So I'm not sure if the intended target makes a difference. My concern is not the criticism itself, but the manner in which it is conveyed. While an edgy tone might seem entertaining, it's counterproductive and often overshadows the essence of the feedback with negativity. I'm speaking broadly about the increasing negativity I've observed over the last couple of years, but my perspective may be skewed by listening to the unedited versions of ATP. (2/3)
I completely agree that Casey's criticism has the ability to attract more attention than you or I could, but wouldn't you want it to be considered based on its merit and not disregarded due to negativity? @siracusa is a perfect example of being able to deliver some of the most incredibly insightful feedback I've heard without being mean, whether it's about an indie app or something put out by a larger company. (3/3)