<!--
{
  "documentType" : "article",
  "framework" : "SafariServices",
  "identifier" : "/documentation/SafariServices/safari-web-extensions",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Safari web extensions"
}
-->

# Safari web extensions

Create web extensions that work in Safari and other browsers.

## Discussion

A Safari web extension adds custom functionality to Safari using JavaScript APIs and common file formats from extensions for Google Chrome, Mozilla Firefox, and Microsoft Edge browsers. While [Safari app extensions](/documentation/SafariServices/safari-app-extensions) are useful for sharing code between your native macOS app and Safari, you build Safari web extensions primarily on JavaScript, HTML, and CSS, and can repackage them to work in other browsers. You can also use Safari web extensions in [Mac web apps](https://support.apple.com/en-us/104996).

> Important:
> You implement a Safari web extension as a macOS, visionOS, or iOS app extension to provide a safe and secure distribution and usage model. You can distribute a Safari web extension with a Mac app, a visionOS app, an iOS app, or a Mac app created using <doc://com.apple.documentation/documentation/UIKit/mac-catalyst>. Use [Xcode](https://developer.apple.com/xcode/) to package your extension for testing and distribution, and join the [Apple Developer Program](https://developer.apple.com/programs/) to distribute Safari web extensions. For more information, see <doc://com.apple.safariservices/documentation/SafariServices/distributing-your-safari-web-extension>.

To get started with creating a Safari web extension, use one of the following options:

- Package your existing extension into a Safari web extension, so you can use it in Safari in macOS, visionOS, and iOS and distribute it. Xcode includes a command-line tool to simplify this process.
- Build a new Safari web extension in Xcode using the built-in template. You can then repackage the extension files for deployment in other browsers.
- Temporarily install your web extension in Safari for testing without packaging it or setting up an Xcode project. For more information, see [Temporarily install a web extension folder in macOS Safari](/documentation/SafariServices/running-your-safari-web-extension#Temporarily-install-a-web-extension-folder-in-macOS-Safari).

Learn more about the capabilities of web extensions and the APIs you use to build them in Mozilla’s [Browser Extensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions) documentation.

Safari web extensions are available in macOS with Safari 14 and later, visionOS 1 and later, and iOS 15 and later. Safari web extensions are available in Mac web apps in macOS 15 and later.

## Topics

### New extensions

[Creating a Safari web extension](/documentation/SafariServices/creating-a-safari-web-extension)

Build a Safari web extension in Xcode.

[Building and testing a Safari web extension](/documentation/SafariServices/building-and-testing-a-safari-web-extension)

Get started with Safari web extensions by creating one from the ground up, using any code editor.

[Modernizing Safari Web Extensions](/documentation/SafariServices/modernizing-safari-web-extensions)

Learn about enhancements to Safari Web Extensions.

[Developing a Safari Web Extension](/documentation/SafariServices/developing-a-safari-web-extension)

Customize and enhance web pages by building a Safari web extension.

### Extension conversions and packaging

[Packaging a web extension for Safari](/documentation/SafariServices/packaging-a-web-extension-for-safari)

Package your existing extension as a Safari web extension using Xcode’s command-line tool.

[Packaging and distributing Safari Web Extensions with App Store Connect](/documentation/SafariServices/packaging-and-distributing-safari-web-extensions-with-app-store-connect)

Upload and distribute Safari Web Extensions without using a Mac or Xcode.

[Converting a Safari app extension to a Safari web extension](/documentation/SafariServices/converting-a-safari-app-extension-to-a-safari-web-extension)

Unify your web extensions and simplify development by sharing code with a Safari web extension.

### Extension updates

[Updating a Safari web extension](/documentation/SafariServices/updating-a-safari-web-extension)

Add new features and fix bugs in your Safari web extension using Xcode tools.

[Managing Safari web extension permissions](/documentation/SafariServices/managing-safari-web-extension-permissions)

Respect user privacy by setting appropriate permissions for your Safari web extension.

[Previewing Metadata using Open Graph](/documentation/SafariServices/previewing-metadata-using-open-graph)

Build a Safari Extension that displays metadata using Open Graph.

### Checking extension state

[`SFSafariExtensionManager`](/documentation/SafariServices/SFSafariExtensionManager)

A class that your app uses to find out the current state of a Safari extension.

[`SFSafariExtensionState`](/documentation/SafariServices/SFSafariExtensionState)

The state of a Safari extension.

### Messaging

[Messaging between the app and JavaScript in a Safari web extension](/documentation/SafariServices/messaging-between-the-app-and-javascript-in-a-safari-web-extension)

Communicate about events and share data between the containing app and JavaScript by using native messaging and app groups.

[`SFExtensionMessageKey`](/documentation/SafariServices/SFExtensionMessageKey)

A string the system uses as a key in a user info dictionary to identify a message.

[`SFExtensionProfileKey`](/documentation/SafariServices/SFExtensionProfileKey)

A string the system uses as a key in a user info dictionary to identify a profile identifier.

[Messaging a Web Extension’s Native App](/documentation/SafariServices/messaging-a-web-extension-s-native-app)

Communicate between your Safari web extension and its containing app.

[Messaging between a webpage and your Safari web extension](/documentation/SafariServices/messaging-between-a-webpage-and-your-safari-web-extension)

Configure your extension to enable messaging from webpages, and then update your extension to handle messages.

### Blocking content

[Blocking content with your Safari web extension](/documentation/SafariServices/blocking-content-with-your-safari-web-extension)

Build content blocking with declarative net request into your Safari web extension.

[Adopting Declarative Content Blocking in Safari Web Extensions](/documentation/SafariServices/adopting-declarative-content-blocking-in-safari-web-extensions)

Block web content with your web extension using the declarative net request API.

### Adding Web Inspector tools

[Adding a web development tool to Safari Web Inspector](/documentation/SafariServices/adding-a-web-development-tool-to-safari-web-inspector)

Expand the built-in Safari Web Inspector to include your custom tool, augmenting developers’ options for inspecting, testing, and debugging webpages.

[Creating Safari Web Inspector extensions](/documentation/SafariServices/creating-safari-web-inspector-extensions)

Learn how to make custom Safari Web Inspector extensions.

### Extension improvements

[Optimizing your web extension for Safari](/documentation/SafariServices/optimizing-your-web-extension-for-safari)

Support Dark Mode, reduce memory and power usage, and ensure feature compatibility to improve your web extension experience in Safari and web apps.

[Adopting New Safari Web Extension APIs](/documentation/SafariServices/adopting-new-safari-web-extension-apis)

Improve your web extension in Safari with a non-persistent background page and new tab-override customization.

[Syncing Safari web extensions across devices and platforms](/documentation/SafariServices/syncing-safari-web-extensions-across-devices-and-platforms)

Let users install your extension on one device and then use and manage the extension on all their other iOS and macOS devices.

[Assessing your Safari web extension’s browser compatibility](/documentation/SafariServices/assessing-your-safari-web-extension-s-browser-compatibility)

Review your Safari web extension implementation plan, manifest keys, and JavaScript API usage for compatibility with other browsers.

[Troubleshooting your Safari web extension](/documentation/SafariServices/troubleshooting-your-safari-web-extension)

Use developer resources to investigate and resolve common problems with Safari web extensions.

### Installation and distribution

[Running your Safari web extension](/documentation/SafariServices/running-your-safari-web-extension)

Install and update your extension in Safari as you make changes in development.

[Distributing your Safari web extension](/documentation/SafariServices/distributing-your-safari-web-extension)

Get feedback on your extension from beta testers, then share your extension with customers in the App Store.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)