A drop-in module that adds autoUpdating capabilities to Electron apps
Supports multiple update sources:
- The free and open-source update.electronjs.org service.
- Static file storage E.g. S3, Google Cloud Storage, etc.
Before using this module, make sure your Electron app meets these criteria:
- Your app runs on macOS or Windows
- Your builds are code signed (macOS only)
- If using
update.electronjs.org- Your app has a public GitHub repository
- Your builds are published to GitHub Releases
- If using static file storage
- Your builds are published to S3 or other similar static file host using a tool like
@electron-forge/publisher-s3
- Your builds are published to S3 or other similar static file host using a tool like
npm i update-electron-appDrop this anywhere in your main process:
const { updateElectronApp } = require('update-electron-app')
updateElectronApp()By default your repository URL is found in your app's package.json file.
You can also specify custom options:
const { updateElectronApp, UpdateSourceType } = require('update-electron-app')
updateElectronApp({
updateSource: {
type: UpdateSourceType.ElectronPublicUpdateService,
repo: 'github-user/repo'
},
updateInterval: '1 hour',
logger: require('electron-log')
})const { updateElectronApp, UpdateSourceType } = require('update-electron-app')
updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-bucket.s3.amazonaws.com/my-app-updates/${process.platform}/${process.arch}`
}
})Once you've called updateElectronApp as documented above, that's it! Here's what happens by default:
- Your app will check for updates at startup, then every ten minutes. This interval is configurable.
- No need to wait for your app's
readyevent; the module figures that out. - If an update is found, it will automatically be downloaded in the background.
- When an update is finished downloading, a dialog is displayed allowing the user to restart the app now or later.
Additional Options:
updateIntervalString (optional) - How frequently to check for updates. Defaults to10 minutes. Minimum allowed interval is5 minutes. This is a human readable interval supported by themsmoduleloggerObject (optional) - A custom logger object that defines alogfunction. Defaults toconsole. See electron-log, a module that aggregates logs from main and renderer processes into a single file.notifyUserBoolean (optional) - Defaults totrue. When enabled the user will be prompted to apply the update immediately after download.
For macOS, you'll need to build a .zip file.
Use electron-forge or electron-installer-zip to package your app as a zip.
For Windows, you'll need to build a .exe and .nupkg files with electron-forge or electron-winstaller.
Windows apps have an update process that requires multiple application restarts. You can use the electron-squirrel-startup module to improve this behavior.
Yes :)
If you publish your builds manually ensure the file structure is:
**/{platform}/{arch}/{artifact}
For example that means that these files should exist:
**/win32/x64/RELEASES**/darwin/arm64/RELEASES.json**/darwin/arm64/My App v1.0.0.zip(or something similar)- ...
If using the public update service, the https://update.electronjs.org server handles release fetching logic. Only releases that have valid SemVer tags and are not marked as draft or pre-release will be collected by the update service.
The latest release returned by the repos/{owner}/{repo}/releases
GitHub API containing all requisite binaries will be the update target.
MIT
