Building for Safari
LightningAddon supports Safari Web Extensions. The architecture is compatible: we use browser/chrome APIs (Safari provides both), Manifest V3, and service workers. No source code changes are required.
Requirements
- macOS – Safari's build tooling requires macOS
- Xcode Command Line Tools –
xcrun safari-web-extension-packageris included
Build
-
Build the Chrome extension (Safari uses the same output):
pnpm build:chrome -
Package for Safari:
pnpm build:safariThis runs
pnpm build:chromethenxcrun safari-web-extension-packager apps/extension/distand produces an Xcode project. Use--no-promptand--no-openfor non-interactive builds.
Local Testing
- Safari 26+: You can load a temporary extension directly from a folder. In Safari: Settings > Developer > Add Temporary Extension… and select
apps/extension/dist. No packaging required for quick testing. - Packaged build: The packager output can be opened in Xcode to build and run a macOS app that includes the Safari extension.
Store Distribution
To distribute via the Mac App Store or Safari Extensions Gallery:
- Apple Developer account – Required for App Store Connect
- Package – Run
pnpm build:safari; the packager creates an Xcode project - Configure – Set bundle ID, signing, and app metadata in Xcode
- Submit – Archive and upload via App Store Connect
For detailed steps, see Apple's Safari Web Extensions documentation.
Caveats
- Safari's MV3 implementation may differ from Chrome in some APIs (e.g.
webRequestlimitations). LightningAddon avoids unsupported APIs. - Store review and approval follow Apple's process and timelines.