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-app
Drop 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
ready
event; 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:
updateInterval
String (optional) - How frequently to check for updates. Defaults to10 minutes
. Minimum allowed interval is5 minutes
. This is a human readable interval supported by thems
modulelogger
Object (optional) - A custom logger object that defines alog
function. Defaults toconsole
. See electron-log, a module that aggregates logs from main and renderer processes into a single file.notifyUser
Boolean (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)- ...
MIT