Skip to content
Notarize your macOS Electron Apps
Branch: master
Clone or download
Latest commit c6b3d29 May 31, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
src chore: add comment explaining the delay and reuse the delay helper May 31, 2019
.gitignore Initial Commit Oct 23, 2018
.npmignore Initial Commit Oct 23, 2018 Update the readme with more info (#3) May 23, 2019
package.json 0.1.1 May 31, 2019
tsconfig.json chore: target es5 Oct 24, 2018
tslint.json chore: add linting Oct 23, 2018
yarn.lock chore: upgrade dependencies May 23, 2019

Electron Notarize

Notarize your Electron apps seamlessly


# npm
npm i electron-notarize --save-dev

# yarn
yarn add electron-notarize --dev

What is app "notarization"?

From apple's docs, the definition of a "notarized app"

A notarized app is a macOS app that was uploaded to Apple for processing before it was distributed. When you export a notarized app from Xcode, it code signs the app with a Developer ID certificate and staples a ticket from Apple to the app. The ticket confirms that you previously uploaded the app to Apple.

On macOS 10.14 and later, the user can launch notarized apps when Gatekeeper is enabled. When the user first launches a notarized app, Gatekeeper looks for the app’s ticket online. If the user is offline, Gatekeeper looks for the ticket that was stapled to the app.

Basically Apple are going to make this a hard requirement soon, may as well get on the train early.


Method: notarize(opts): Promise<void>

  • options Object
    • appBundleId String - The app bundle identifier your Electron app is using. E.g. com.github.electron
    • appPath String - The absolute path to your .app file
    • appleId String - The username of your apple developer account
    • appleIdPassword String - The password for your apple developer account
    • ascProvider String (optional) - Your Team ID in App Store Connect. This is necessary if you are part of multiple teams


For notarization, you need the following things:

  1. Xcode 10 or later installed on your Mac.
  2. An Apple Developer account.
  3. An app-specific password for your ADC account’s Apple ID.

Safety when using appleIdPassword

  1. Never hard code your password into your packaging scripts, use an environment variable at a minimum.
  2. It is possible to provide a keychain reference instead of your actual password (assuming that you have already logged into the Application Loader from Xcode). For example:
const password = `@keychain:"Application Loader: ${appleId}"`;

Another option is that you can add a new keychain item using either the Keychain Access app or from the command line using the security utility:

security add-generic-password -a "AC_USERNAME" -w <app_specific_password> -s "AC_PASSWORD"

where AC_USERNAME should be replaced with your Apple ID, and then in your code you can use:

const password = `@keychain:AC_PASSWORD`;

Example Usage

import { notarize } from 'electron-notarize';

async function packageTask () {
  // Package your app here, and code side with hardened runtime
  await notarize({
    ascProvider, // This parameter is optional
You can’t perform that action at this time.