Back to Skills

browserenginekit

Build alternative browser engines using BrowserEngineKit. Use when developing a non-WebKit browser engine for iOS/iPadOS in supported regions, managing web content/rendering/networking extension processes, configuring GPU and networking process capabilities, checking alternative-engine device eligibility, or reviewing BrowserEngineKit entitlements and Info.plist setup.

867stars43forksUpdated 7/11/2026

Security Assessment

Low Risk(85/100)

Detected risks:

Secret Exposure([references/browserenginekit-patterns.md] token =)
Security Score85/100

About browserenginekit

BrowserEngineKit is Apple's framework for building web browsers that ship their own non-WebKit rendering engine on iOS and iPadOS, and this skill covers the full setup: eligibility, entitlements, process architecture, capabilities, and system integration. Alternative engines are gated to supported regions and Apple-approved entitlement profiles: the EU on iOS 17.4+/iPadOS 18+, and Japan starting iOS 26.2 with additional Pointer Authentication Code and Memory Integrity Enforcement requirements, while development and testing can happen anywhere. Device eligibility is checked at runtime with BEAvailability.isEligible(for: .webBrowser) from the companion BrowserKit framework rather than hard-coded region logic. A browser is split across four processes: a host app for UI and coordination, plus web content, networking, and rendering extensions that communicate over XPC. The host launches and manages every extension, brokers anonymous XPC endpoints between them during a defined bootstrap sequence, and follows least privilege so the web content extension handles untrusted data without direct OS access. Host process classes WebContentProcess, NetworkingProcess, and RenderingProcess expose async initializers with interruption handlers, makeLibXPCConnection() for messaging, and invalidate() to stop. The skill enumerates the required host entitlements (com.apple.developer.web-browser and web-browser-engine.host), per-extension entitlements for web content, networking, and rendering, and optional ones for JIT compilation, extended virtual addressing, and memory attribution transfer. It also documents the separate model for non-browser apps that embed an engine for in-app browsing, which uses embedded-web-browser-engine entitlements, arm64 only, and cannot use JIT or browser extensions. Availability anchors are called out throughout: process APIs at 17.4+, BEDownloadMonitor at 18.2+, the .revision2 restricted sandbox at 26+, and CoreML rendering at 26.2+. Examples target Swift 6.3 and current Apple SDKs, rounded out with a review checklist and common-mistakes guidance.

FAQ

Where can alternative browser engines actually run?

In supported regions only: the EU on iOS 17.4+/iPadOS 18+, and Japan starting iOS 26.2 (with added PAC and Memory Integrity Enforcement requirements). Development and testing can happen anywhere.

How do I check whether a device is eligible?

Call BEAvailability.isEligible(for: .webBrowser) from the BrowserKit framework (available on iOS/iPadOS 18.4+) instead of hard-coding region checks.

What entitlements does the host browser app need?

com.apple.developer.web-browser for default-browser candidacy and com.apple.developer.web-browser-engine.host for alternative engine extensions; both must be requested from Apple.

How is the browser structured across processes?

A host app coordinates three XPC extensions (web content, networking, and rendering), each in its own process. The host launches and manages all extensions, and extensions cannot launch other extensions.

How do non-browser apps embed an engine?

They use com.apple.developer.embedded-web-browser-engine (plus engine-association from 26.2) rather than the host entitlements, run arm64 only, and cannot include browser extensions or use JIT.

All Files

3 files
references/browserenginekit-patterns.md20.5 KB
View
evals/evals.json4.1 KB
View
SKILL.md17.0 KB
View

Install browserenginekit

Download and extract the skill files to your .claude/skills/ directory.

Quick Setup:

  1. Copy the skill folder to .claude/skills/
  2. Claude will automatically detect and use the skill