How to Load and Debug Safari Extensions in Safari 26 (Without Xcode)

How to Load and Debug Safari Extensions in Safari (Without Xcode)

Last month, I launched all my browser extensions on the Safari web browser, now available in the Apple App Store. Building and testing them in Safari is much easier, as you no longer need to create a Mac app in Xcode. In this beginner developer guide, I will show you how to get started with Safari 26.

macOS 26 with Safari web browser open
macOS 26 with Safari web browser open

Making Extensions Available on All Platforms

One of the first things I do when developing a browser extension is make it available across all platforms. This includes Safari, so users can stay productive in the browser they are most comfortable with. That includes my Turn Off the Lights browser extension.

Stefan Van Damme – Developer of the Turn Off the Lights browser extension

Each friction point can take time to test the real experience in the Safari web browser. Apple now provides a new feature that makes it very easy to load a temporary Safari extension from a folder. This means you no longer need to spend time figuring out the correct structure to load an extension in the Xcode app. With a single command xcrun safari-web-extension-packager /path/to/extension, you can build your ZIP Chrome extension into a macOS and iOS application.

Load a Temporary Safari Extension Folder

Safari 26 introduces a feature similar to Google Chrome’s “Developer Mode”, allowing you to load an extension directly from a folder.

Step-by-step instructions

  1. Open your Safari web browser, and in the Apple menu bar, click on the name “Safari”. Then select “Settings…” from the menu.
Safari web browser on the menu item Settings
Safari web browser on the menu item Settings
  1. Now you will see the Safari Settings window. Click on the “Developer” tab at the top.
Safari Settings window on the Developer tab
Safari Settings window on the Developer tab
  1. Next, click on the gray button labeled “Add Temporary Extension…”.
  2. You will be prompted to enter your Mac password or use your fingerprint to allow this change.
Allow the unsigned extensions to install by confirming with a password or fingerprint
Allow the unsigned extensions to install by confirming with a password or fingerprint
  1. A dialog window will appear, allowing you to choose the location of your Safari extension code. This should be the root folder that contains the manifest.json file. I selected my Turn Off the Lights Safari extension folder.
Browse to the folder of your Safari extension
Browse to the folder of your Safari extension
  1. When you are in that folder, click the blue “Select” button.
Turn Off the Lights Safari extension added to the temporary extension list
Turn Off the Lights Safari extension added to the temporary extension list
  1. Close the window, and you will see the Safari extension icon in the Safari toolbar. For me, this is the blue accent lamp button for Turn Off the Lights.
Safari web browser with the temporary extension installed
Safari web browser with the temporary extension installed

Now, when I click on the lamp button icon in the Safari toolbar, it dims the web page. There is no Mac application or Xcode running in the background.

Dimmed web page in Safari web browser
Dimmed web page in Safari web browser

In Safari 26, you can now load browser extension code just like in Google Chrome’s developer mode. Simply browse to the folder where your manifest is located. You no longer need to create an empty app first and build it; after that, you could see it in Safari’s web browser only when running Xcode in debugging mode.

Important note: when you open that folder location as an extension, you will be asked for your computer password or fingerprint to allow this change. This is for security, to ensure that you are explicitly permitting this Safari extension to run in the Safari web browser. Also, this is temporary, which means that when you close Safari, the extension will no longer be active and is automatically unloaded. This setup is intended for developing, testing, and debugging Safari extensions, and is not meant for everyday use by non-developer users.

Customizing Keyboard Shortcuts

In Safari 26, you can finally customize the keyboard shortcuts you added in the manifest.json file. Reopen the Safari Extensions window, and below the selected extension, you will see a list of shortcut commands. Click inside a text field to change it to a new keyboard combination.

Change the Safari extension Shortcuts
Change the Safari extension Shortcuts

Problem: Safari Extensions Must Live Inside a Mac or iPhone App

If you want to distribute your Safari extension through the Apple App Store, you still need:

  • A Mac app
  • An iPhone or iPad app (if applicable)

Apple does not currently allow uploading a standalone ZIP file of a Safari extension to the App Store.

Troubleshooting

Sound cracking

If you hear a cracking sound on your MacBook Pro after testing a Safari extension using the iPhone 17 Pro Max simulator, run this command in Terminal:

sudo killall coreaudiod

This restarts the macOS audio service.

Background Service Worker Cannot Be Debugged

If your extension uses Manifest V3 with a background script implemented as a service worker, Safari does not allow you to open a debugging window for the background script. Expanding the Developer menu in Safari shows nothing under Service Workers or Web Extension Background Content, which is a bug. In contrast, other browsers such as Google Chrome, Microsoft Edge, Opera, and Firefox handle this correctly.

No Safari Servicer worker process running
No Safari Servicer worker process running
"background": {
"service_worker": "scripts/background.js"
},

If I switch the background script back to non-persistent mode, everything works correctly.

"background": {
"scripts": ["scripts/constants.js","scripts/background.js"]
},

From the Developer menu, under the Web Extension Background Content submenu, I can open the background script debugging window for the Safari extension.

Servicer worker is visible to debug
Servicer worker is visible to debug

When you click on it, a debug window opens, showing the background script of your Safari extension in action.

Safari Background page debug web inspector
Safari Background page debug web inspector

Resource

Conclusion

Safari 26 makes developing Safari web extensions faster and more approachable than ever. You can now load, test, and debug extensions directly from a folder, without Xcode or a Mac app, making Safari development feel much closer to Chrome’s workflow. If you enjoyed this developer guide and want to support my work for the browser extension community, your support truly means a lot. Every donation, big or small, helps me continue creating valuable content.

About The Author

Stefan Van Damme avatar