The Accidental Browser on Your Wrist
watchOS doesn't have Safari, so developers use an authentication API as a backdoor browser. It works, mostly.
The Accidental Browser on Your Wrist
watchOS doesn't have Safari. No WKWebView. No SFSafariViewController. If you want to display web content on an Apple Watch, Apple's official answer is: don't.
But sometimes you need to show a webpage. And there's a backdoor.
The Authentication Loophole
ASWebAuthenticationSession exists for OAuth flows—the "log in with Google/Apple/GitHub" experience. It presents a lightweight browser view, the user authenticates, and your app receives a callback with the token.
The key insight? "Lightweight browser view" means browser view.
Starting with watchOS 6.2, Apple added ASWebAuthenticationSession support on Apple Watch for standalone app authentication. Developers quickly realized: if you can show any URL for auth purposes, you can show any URL.
let url = URL(string: "https://example.com")!
let session = ASWebAuthenticationSession(
url: url,
callbackURLScheme: ""
) { _, _ in }
session.prefersEphemeralWebBrowserSession = true
session.start()
Pass a URL, set an empty callback scheme, call start(). Browser view appears.
How I Use It
In HackerWatch, my Hacker News client for Apple Watch, I use this to let users read linked articles:
Button {
guard let url = URL(string: story.url) else { return }
let session = ASWebAuthenticationSession(
url: url,
callbackURLScheme: ""
) { _,_ in }
session.prefersEphemeralWebBrowserSession = true
session.start()
} label: {
Text("View Source")
}
Tap "View Source" and you're reading the article on your Watch.
The Ecosystem
Entire apps exist around this technique. Watch Browser (wafari) made Apple's most-downloaded list in 2024. There's also BrowseIt, an open-source implementation documenting the approach.
Why Does This Even Exist?
OAuth needs a browser. Captive Wi-Fi portals (hotel "click to accept" pages) need a browser. Apple had to provide something. watchOS 11 finally added proper captive portal support using the same underlying WebKit view.
The Rough Edges
This isn't a polished experience:
- Sites break. Complex layouts fail. JavaScript-heavy pages time out.
- Reader mode quirks. Sometimes I force reader mode on, then off, just to get pages rendering.
It's fine for reading an article though or checking out some quick web content.
Will It Last?
Apple hasn't blessed this. They haven't killed it either. Who knows?
What I actually want is a real WKWebView for watchOS. Not for general browsing—I get why that's not the vision. But for reading linked content, displaying help pages, rendering formatted text too complex for native SwiftUI.
WebKit runs on the Apple Watch. Apple just hasn't exposed it properly. Until then, we have an authentication API moonlighting as a browser lol.