We recently launched the private beta of Kitt, an iPhone browser developed by Salsita with support for Chrome browser extensions. You can find out more about Kitt in the screencast below:
Around the time we were finalizing this screencast, Apple announced that they would be adding support for extensions to iOS 8, including Safari extensions that can access and modify a webpage's DOM. When a large company encroaches on a startup's territory, it is accepted industry practice for the startup to announce that they are delighted to see their target market validated by an established player. This always strikes me as either delusional or disingenuous. As iPhone users we are looking forward to the new extensibility features in iOS 8. Few observers expected Apple to open up their platform in such a decisive way, and it is heartening (and frankly impressive) to see them do so. As developers of an iPhone browser, however, we could have done without the extra competition.
Nevertheless, Kitt has two big advantages compared to the upcoming Safari release. First of all, it has many more of the features that desktop extension developers expect:
- A separate user interface for accessing extension features. In Safari, the only way to access an extension is through the Activity View. Until now this view has been used for sharing content via online services, copy/paste or print. It isn't a particularly natural place to call up a third-party form filler or reading list. Kitt has a browser action bar just like Chrome where extensions can place icons directly into the web browser UI.
- Extensions can inject content scripts that run automatically when a page is loaded. In Safari, extensions need to be triggered manually. So a password manager can prefill form fields and a shopping extension can pop up a notification when the product you are looking at has a better price elsewhere.
- Kitt can intercept and modify web requests. This is a must for ad blockers and other popular extension categories.
- Extensions can add new items to the Action Sheet and Edit Menu. The former is featured prominently in the screencast for previewing links and adding pages to Pocket. The latter lets you select text and perform an action on it. For example, our Translate extension lets you select a block of text and translate it into English:
The second advantage is that Kitt extensions are written using the same Platform APIs used by Google Chrome. This means that Kitt extensions also run in Chrome (although the converse is not always true since we only support a subset of the Chrome APIs). Interested developers can see the source code for the extensions demoed in the screencast on the Kitt Github page.
This means that developers can easily adapt Chrome extensions to run in Kitt. They can also leverage the skills and experience they gained developing Chrome extensions to create new Kitt extensions. As Google's documentation explains, Chrome extensions are "essentially web pages" that are developed using standard web languages and technologies. Contrast this with Safari extensions, which are written mostly in Objective-C using the same APIs as mobile apps. To install an extension for Mobile Safari you need to install an app. This eliminates broad swaths of extensions that are cool additions to the web browser but not full-fledged apps in their own right. Kitt extensions, like their counterparts on Chrome, are loaded directly into the browser just by clicking a link on a webpage.
The primary difference between Safari and Kitt extensions is thus a philosophical one: whether to be part of the web app ecosystem or the iPhone app ecosystem. The latter makes a lot of sense for extensions that serve mainly to send content to an app from inside Safari. I use the Evernote app on my iPhone, so I'll welcome the inevitable Safari extension that lets me quickly dispatch webpages to Evernote (and in fact this seems to be the primary use case Apple had in mind when designing the iOS extensibility features). As a developer, I'm happy to use Apple technologies to integrate my app more deeply into their platform.
On the other hand, if my extension is designed primarily to add features to the web browser then I'd rather be part of the web app ecosystem and use the Chrome Platform APIs. In most cases these extensions are multi-platform and multi-browser, so the differences between browser extension frameworks are just a nuisance. It's already a problem that I have to develop and maintain my extension for Chrome, Firefox and Internet Explorer separately. The new Mobile Safari extensions just add one more platform to the mix. It is therefore a huge advantage for developers that they can use familiar web technologies to write Chrome extensions that also run in Kitt.
Most iPhone users will never install a third-party browser, and they will doubtless be more than satisfied with Safari's extensibility features. The kind of power users who regularly use extensions on desktop will be attracted to the much richer extensibility of Kitt. We encourage both developers and end users interested in trying out Kitt to sign up for our private beta.