Extension compatibility matrix
This is the current measured support snapshot for Crest on Mac. Verified means the listed workflow was exercised in the real extension and browser—not that every version, site, or optional feature is guaranteed.
| Extension | Package tested | Status | What is known to work | Current limit |
|---|
| Bitwarden | Chrome 2026.8.0 | Verified end to end | Device verification, login, vault, relaunch unlock, popout window, page injector, and autofill. | No known limit in the tested workflow. |
| LastPass | Chrome 4.155.1 | Verified end to end | Login, vault, relaunch persistence, matching-item popup, in-field integration, and autofill. | No known limit in the tested workflow. |
| Dark Reader | Firefox 4.9.129 | Verified core workflow | Background startup, full action controls, page injection, toggling, and site appearance. | Advanced behavior on every site and theme combination is not exhaustively certified. |
| uBlock Origin | Firefox 1.73.0 | Partial—engine limited | MV2 background page, popup controls and live statistics, cosmetic/page integration, and child-frame request classification. | WebKit reports requests but does not consume blocking webRequest listener responses, so cancellation, redirect, header mutation, and authentication parity are unavailable. |
| uBlock Origin Lite | Chrome 2026.812.1211 | Startup verified | The Declarative Net Request package verifies, installs, and starts cleanly. | Full filter-list and site-by-site behavior has not been certified. |
| SponsorBlock | Chrome 6.1.6 | Startup verified | Package verification, installation, and background startup. | The complete YouTube workflow has not been certified. |
| 1Password | Chrome 8.12.32.33 | Native companion pending | Worker startup, setup UI, account navigation, native-host launch, and browser-authorization handoff. | Pairing and autofill require a Developer ID signed Crest release trusted through 1Password's Add Browser flow. |
| Grammarly | Chrome 14.1320.0 | Partial | The worker loads. | Account-cookie access and an initial tab-creation request still fail. |
| React Developer Tools | Chrome 7.0.1 | Partial | Package installation and startup. | WebKit does not provide the requested isolated execution-world behavior. |
| Tampermonkey | Chrome 5.5.0 | Partial | Package installation and partial background startup. | WebKit rejects its tabs.onUpdated startup registration. |
| iCloud Passwords | Chrome 3.3.0 | Apple entitlement pending | The package and worker start. | Apple's helper requires a managed Web Browser Public Key Credential entitlement that Crest does not currently have. |
Status meanings
- Verified end to end: the important signed-in workflow, page integration, and relaunch behavior were exercised directly.
- Verified core workflow: the extension's central browser behavior works, but its full option and site matrix was not exhaustively tested.
- Startup verified: the package verifies, installs, loads, and starts without a recorded runtime failure; deeper behavior is not certified.
- Partial: useful behavior works, with a known missing API or platform boundary.
- Engine limited: the missing behavior requires WebKit support that Crest cannot supply safely from browser-app code.
Package and process support
| Extension kind | Crest support | Implementation boundary |
|---|
| Chrome Manifest V3 | Supported | Keeps the service worker native. Crest loads a content-addressed compatibility bootstrap before the authored worker while preserving WebKit's runtime, Port, event, and sender identity. |
| Chrome Manifest V2 | Supported | Keeps background pages or scripts in their authored document process and layers compatibility before package code. |
| Firefox WebExtensions | Supported | Mozilla-signed packages retain their published identity and Firefox reference environment while using the shared compatibility routes. |
| Content scripts | Supported | Run in WebKit's isolated world; messaging and sender metadata remain engine-owned. Crest's private native broker is not exposed to webpages. |
| Popups and extension pages | Supported | Use the extension's WebKit configuration and origin. Action popups remain browser surfaces; requested single-page popup windows can open as native Crest auxiliary windows. |
| Safari Web Extensions | Native WebKit path | Run without the Chrome/Firefox preparation layer. Safari app discovery does not make the containing app's native handler portable. |
| Native companion extensions | Conditional | Only verified signed store identities can resolve external native hosts, and only when the extension requested and received nativeMessaging. |
| Unpacked extensions | Development support | Load through the shared compatibility layer, but cannot reach an external native companion. |
| Safari content blockers and legacy Safari App Extensions | Unsupported | These are different extension formats, not portable WebExtensions. |
WebExtension API support
The route describes who owns the result:
- Native keeps WebKit's implementation unchanged.
- Native + patch preserves WebKit object identity while filling or normalizing a specific contract gap.
- Emulated is implemented by Crest, with native broker access scoped to the extension's reviewed permissions.
- Partial is useful but does not match every Chrome or Firefox semantic.
- Unavailable is intentionally absent; Crest does not return false success.
Actions, runtime, and browser UI
| API | Chrome / Firefox | WebKit substrate | Crest route | Current boundary |
|---|
action, browserAction, pageAction | Native | Native | Native + patch | Popup lifecycle and user-settings shape normalization. |
commands | Native | Native | Native + patch | Manifest command normalization. |
contextMenus / menus | Native | Native | Native + patch | Crest registry and native webpage-menu presentation; contexts are normalized across Chrome and Firefox. |
notifications | Native | Partial | Emulated | Native notifications plus create, update, clear, query, click, button, and close events. |
windows | Native | Native | Native + patch | Tabs and primary windows are native adapters; a single-URL popup request can become an auxiliary Crest window. |
offscreen | Chrome native / Firefox unavailable | New, conditional native API | Native | Uses WebKit's document implementation; Crest does not substitute a hidden page. |
sidePanel / sidebarAction | Platform-specific | Partial | Unavailable | Crest has no extension-owned sidebar surface yet. |
omnibox | Native | Unavailable | Unavailable | No extension keyword surface yet. |
Runtime, lifecycle, and state
| API | Chrome / Firefox | WebKit substrate | Crest route | Current boundary |
|---|
runtime | Native | Native | Native + patch | Authored manifest/base URL, update-check shape, and worker boundaries are normalized without replacing native messaging or Port objects. |
extension | Native | Native | Native + patch | View and background-page members are restricted to the processes where reference browsers expose them. |
alarms | Native | Native | Native + patch | MV3 listener and alarm delivery normalization. |
idle | Native | Unavailable | Emulated | macOS session/input state with query, interval, and transition events. |
management | Native | Unavailable | Emulated, partial | getSelf only; no cross-extension discovery or mutation. |
storage | Native | Native | Native + patch | Native local, sync, session, and managed areas with cross-context/event normalization. |
permissions | Native | Native | Native + patch | Internal transport grants are hidden from extension-authored permission queries. Live optional grants for Crest-emulated APIs are not fully supported yet. |
i18n | Native | Native | Native + patch | Message lookup and empty-token normalization. |
Tabs, navigation, and requests
| API | Chrome / Firefox | WebKit substrate | Crest route | Current boundary |
|---|
tabs | Native | Native | Native + patch | Crest tab/window adapters are authoritative; query/get/message results are normalized. |
webNavigation | Native | Partial | Native + patch, partial | Frame queries and core lifecycle are native. Four standard events are presence-only until Crest has engine-backed dispatch. |
webRequest | Native | Observe-only | Native + patch, partial | Request metadata and child-frame type are normalized. Blocking responses and credential-supplying authentication are unavailable. |
declarativeNetRequest | Native | Partial | Native, partial | WebKit translates supported rules into content blocking; the translation is not lossless. |
cookies | Native | Native | Native | Constrained by reviewed host permissions. |
history | Native | Unavailable | Unavailable | Not implemented. |
sessions | Native | Unavailable | Unavailable | Not implemented. |
topSites | Native | Unavailable | Unavailable | Not implemented. |
Page code, data, and platform services
| API | Chrome / Firefox | WebKit substrate | Crest route | Current boundary |
|---|
scripting | Native | Native | Native + patch | Execution-world enum and member normalization; actual injection remains native. |
userScripts | Native | Unavailable | Unavailable | Dynamic user-script registration is not implemented. |
dom | Chrome/WebKit only | Native | Native | Extension-page and content-script surface. |
privacy | Native | Unavailable | Emulated, partial | Complete group shape with conservative values reported as not_controllable; no false claim of changing system policy. |
bookmarks | Native | Unavailable | Unavailable | Not implemented. |
downloads | Native | Unavailable | Unavailable | Extension-initiated downloads and vault export are not implemented. |
identity | Chrome native / Firefox partial | Unavailable | Unavailable | Browser-specific OAuth redirect contract is not implemented. |
devtools | Native | Partial | Native, partial | WebKit's subset only. |
What this coverage means
Crest currently routes 36 namespace contracts through one executable matrix. Twenty-five are available in some form and eleven are intentionally unavailable. The strongest coverage is around the flows used by password managers, page modifiers, and extension popups: runtime messaging, storage, tabs, injection, actions, auxiliary windows, permissions, notifications, menus, and lifecycle.
The remaining gaps cluster around three areas: browser-owned data stores such as bookmarks/history/downloads; browser-chrome surfaces such as side panels and omnibox; and request interception semantics WebKit does not expose. Those gaps are documented instead of being replaced with extension-specific shims or successful no-ops.
For the implementation-level contract and pinned Chromium, Firefox, WebKit, and SDK revisions, see the technical API matrix. For package-specific native limits, continue with Direct build, App Store, and native companions.