~/Library/Application Support/Nook/Extensions/.
Supported formats
You can install extensions in the following formats:- ZIP archives (
.zip) - Standard Chrome extension packages - Unpacked directories - Folders containing
manifest.json - Safari extension bundles (
.appex) - Safari Web Extension bundles - Application bundles (
.app) - Apps containing Safari Web Extension plugins
Installation methods
Install from file
Open the extension installer
Navigate to Settings → Extensions, then click the install button or use the file picker.
Select your extension
Choose a ZIP file, directory,
.appex, or .app bundle containing the extension.Review permissions
Nook displays the permissions the extension requests. Review what the extension can access:
- Site access - Which websites the extension can read and modify
- Browser permissions - APIs like tabs, bookmarks, or history
- Native messaging - Whether it can communicate with native apps
Grant permissions
Click “Add Extension” to grant the requested permissions and install the extension.
All manifest
permissions and host_permissions are granted automatically at install time, matching Chrome’s behavior. Only optional_permissions require runtime approval.Install Safari extensions
Nook can discover and install Safari Web Extensions already installed on your Mac:Discover available extensions
Nook scans
/Applications and ~/Applications for apps containing Safari Web Extension bundles.Installation process
When you install an extension, Nook:- Extracts the extension to a temporary directory
- Validates the manifest - Checks for required fields (
name,version,manifest_version) - Generates an extension ID - Creates a unique identifier for the extension
- Patches for compatibility - Modifies manifest if needed for WKWebExtension compatibility:
- Adds
scriptingpermission for MV2 extensions - Injects bridge scripts for
externally_connectablesupport - Adds iframe message bridges for specific extensions (e.g., Bitwarden)
- Adds
- Moves to final location - Copies files to
~/Library/Application Support/Nook/Extensions/{extension-id}/ - Loads the extension - Registers with WKWebExtensionController
- Starts background worker - Launches the service worker or background page
- Extracts icons - Finds and stores extension icons (128px, 64px, 48px, 32px, 16px)
Manifest validation
Required fields
Nook validates that yourmanifest.json contains:
Manifest V3 requirements
For MV3 extensions, Nook validates:- Service worker exists - If
background.service_workeris specified, the file must exist - Content script worlds - Validates
worldparameter in content scripts - Host permissions - Checks
host_permissionsarray format
Nook automatically patches manifests to improve WebKit compatibility. For example, domain-specific content scripts may be modified to run in the correct execution world.
Localization
Extensions using__MSG_key__ placeholders are automatically localized:
- Nook looks for
_locales/{locale}/messages.jsonfiles - Matches your system locale (e.g.,
en_US,pt_BR,fr) - Falls back to
enif your locale isn’t available - Replaces placeholders in extension name and description
After installation
Once installed, the extension:- Appears in the toolbar (if it declares an
actionorbrowser_action) - Is enabled by default and starts immediately
- Registers content scripts that will inject into matching pages
- Loads its background worker to handle events and messages
- Can be managed in Settings → Extensions
Troubleshooting
Extension won’t install
Invalid manifest error
Invalid manifest error
Ensure your
manifest.json includes manifest_version, name, and version fields. Check that the JSON is valid (no trailing commas, proper quotes).MV3 service worker not found
MV3 service worker not found
If you get “MV3 service worker not found”, verify that the path in
background.service_worker points to an existing file in your extension directory.ZIP extraction failed
ZIP extraction failed
Ensure the ZIP file is not corrupted and contains a
manifest.json at the root level (not inside a subdirectory).Extension installed but not working
Content scripts not injecting
Content scripts not injecting
Check that:
- The extension has the correct
host_permissionsor match patterns - You’ve navigated to a URL matching the content script patterns
- Content script files exist at the paths specified in manifest
Background worker not starting
Background worker not starting
Check Console logs for JavaScript errors in the service worker. Enable Web Inspector for the extension background page in Settings → Extensions.