2015-08-19 16:55:11 +00:00
# autoUpdater
2013-08-14 22:43:35 +00:00
2016-04-22 18:42:54 +00:00
> Enable apps to automatically update themselves.
2016-04-21 22:35:29 +00:00
2016-11-23 19:20:56 +00:00
Process: [Main ](../glossary.md#main-process )
2016-11-03 17:26:00 +00:00
2018-03-10 14:04:07 +00:00
**See also: [A detailed guide about how to implement updates in your application ](../tutorial/updates.md ).**
2016-03-22 23:35:03 +00:00
2019-07-22 15:20:43 +00:00
`autoUpdater` is an [EventEmitter][event-emitter].
2017-08-11 23:30:29 +00:00
## Platform Notices
2014-05-05 02:07:15 +00:00
2017-08-11 23:30:29 +00:00
Currently, only macOS and Windows are supported. There is no built-in support
for auto-updater on Linux, so it is recommended to use the
distribution's package manager to update your app.
In addition, there are some subtle differences on each platform:
2014-05-05 02:07:15 +00:00
2016-06-18 13:26:26 +00:00
### macOS
2014-07-25 16:14:49 +00:00
2016-06-18 13:26:26 +00:00
On macOS, the `autoUpdater` module is built upon [Squirrel.Mac][squirrel-mac],
2015-11-03 07:30:54 +00:00
meaning you don't need any special setup to make it work. For server-side
2024-05-28 18:15:18 +00:00
requirements, you can read [Server Support][server-support]. Note that
[App Transport Security ](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW35 )
(ATS) applies to all requests made as part of the
2016-11-10 18:35:56 +00:00
update process. Apps that need to disable ATS can add the
`NSAllowsArbitraryLoads` key to their app's plist.
2014-05-05 02:07:15 +00:00
2016-06-18 13:26:26 +00:00
**Note:** Your application must be signed for automatic updates on macOS.
2016-04-07 00:40:07 +00:00
This is a requirement of `Squirrel.Mac` .
2015-10-23 12:11:59 +00:00
### Windows
2014-05-05 02:07:15 +00:00
2015-11-03 07:30:54 +00:00
On Windows, you have to install your app into a user's machine before you can
2024-09-23 18:02:28 +00:00
use the `autoUpdater` , so it is recommended that you use
[electron-winstaller][installer-lib] or [Electron Forge's Squirrel.Windows maker][electron-forge-lib] to generate a Windows installer.
Apps built with Squirrel.Windows will trigger [custom launch events ](https://github.com/Squirrel/Squirrel.Windows/blob/51f5e2cb01add79280a53d51e8d0cfa20f8c9f9f/docs/using/custom-squirrel-events-non-cs.md#application-startup-commands )
that must be handled by your Electron application to ensure proper setup and teardown.
Squirrel.Windows apps will launch with the `--squirrel-firstrun` argument immediately
after installation. During this time, Squirrel.Windows will obtain a file lock on
your app, and `autoUpdater` requests will fail until the lock is released. In practice,
this means that you won't be able to check for updates on first launch for the first
few seconds. You can work around this by not checking for updates when `process.argv`
contains the `--squirrel-firstrun` flag or by setting a 10-second timeout on your
update checks (see [electron/electron#7155 ](https://github.com/electron/electron/issues/7155 )
for more information).
The installer generated with Squirrel.Windows will create a shortcut icon with an
2015-11-03 07:30:54 +00:00
[Application User Model ID][app-user-model-id] in the format of
`com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE` , examples are
`com.squirrel.slack.Slack` and `com.squirrel.code.Code` . You have to use the
same ID for your app with `app.setAppUserModelId` API, otherwise Windows will
not be able to pin your app properly in task bar.
2014-05-05 02:07:15 +00:00
2015-08-19 16:55:11 +00:00
## Events
The `autoUpdater` object emits the following events:
### Event: 'error'
Returns:
2015-04-07 16:21:29 +00:00
2015-10-23 06:36:36 +00:00
* `error` Error
2015-04-07 16:21:29 +00:00
2015-07-23 16:57:42 +00:00
Emitted when there is an error while updating.
2015-04-07 16:21:29 +00:00
2015-08-19 16:55:11 +00:00
### Event: 'checking-for-update'
2013-08-14 22:43:35 +00:00
2015-07-28 15:51:41 +00:00
Emitted when checking if an update has started.
2013-08-14 22:43:35 +00:00
2015-08-19 16:55:11 +00:00
### Event: 'update-available'
2014-02-02 12:37:46 +00:00
2015-07-23 16:57:42 +00:00
Emitted when there is an available update. The update is downloaded
2014-02-02 12:37:46 +00:00
automatically.
2015-08-19 16:55:11 +00:00
### Event: 'update-not-available'
2013-08-14 22:43:35 +00:00
2014-02-02 12:37:46 +00:00
Emitted when there is no available update.
2013-08-14 22:43:35 +00:00
2015-08-19 16:55:11 +00:00
### Event: 'update-downloaded'
Returns:
2013-08-14 22:43:35 +00:00
* `event` Event
2021-11-16 04:13:18 +00:00
* `releaseNotes` string
* `releaseName` string
2014-02-02 12:37:46 +00:00
* `releaseDate` Date
2021-11-16 04:13:18 +00:00
* `updateURL` string
2013-08-14 22:43:35 +00:00
2015-10-23 07:50:55 +00:00
Emitted when an update has been downloaded.
2013-08-14 22:43:35 +00:00
2015-10-23 12:11:59 +00:00
On Windows only `releaseName` is available.
2019-03-20 20:12:47 +00:00
**Note:** It is not strictly necessary to handle this event. A successfully
2018-07-24 22:33:53 +00:00
downloaded update will still be applied the next time the application starts.
2018-04-15 01:29:36 +00:00
### Event: 'before-quit-for-update'
2018-04-16 12:13:04 +00:00
This event is emitted after a user calls `quitAndInstall()` .
When this API is called, the `before-quit` event is not emitted before all windows are closed. As a result you should listen to this event if you wish to perform actions before the windows are closed while a process is quitting, as well as listening to `before-quit` .
2018-04-15 01:29:36 +00:00
2015-08-19 16:55:11 +00:00
## Methods
The `autoUpdater` object has the following methods:
2018-02-15 02:58:59 +00:00
### `autoUpdater.setFeedURL(options)`
2013-08-14 22:43:35 +00:00
2018-02-15 02:58:59 +00:00
* `options` Object
2021-11-16 04:13:18 +00:00
* `url` string
2024-03-25 10:19:44 +00:00
* `headers` Record\<string, string\> (optional) _macOS_ - HTTP request headers.
2021-11-16 04:13:18 +00:00
* `serverType` string (optional) _macOS_ - Can be `json` or `default` , see the [Squirrel.Mac][squirrel-mac]
2018-02-15 02:58:59 +00:00
README for more information.
2013-08-14 22:43:35 +00:00
2016-06-10 13:55:42 +00:00
Sets the `url` and initialize the auto updater.
2013-08-14 22:43:35 +00:00
2016-07-14 12:07:17 +00:00
### `autoUpdater.getFeedURL()`
2021-11-16 04:13:18 +00:00
Returns `string` - The current update feed URL.
2016-07-14 12:07:17 +00:00
2015-08-19 16:55:11 +00:00
### `autoUpdater.checkForUpdates()`
2013-08-14 22:43:35 +00:00
2015-11-13 08:03:40 +00:00
Asks the server whether there is an update. You must call `setFeedURL` before
2014-02-02 12:37:46 +00:00
using this API.
2015-10-23 07:50:55 +00:00
2021-03-08 01:03:34 +00:00
**Note:** If an update is available it will be downloaded automatically.
Calling `autoUpdater.checkForUpdates()` twice will download the update two times.
2015-10-30 11:17:30 +00:00
### `autoUpdater.quitAndInstall()`
2015-10-23 07:50:55 +00:00
2015-11-03 07:30:54 +00:00
Restarts the app and installs the update after it has been downloaded. It
should only be called after `update-downloaded` has been emitted.
2015-10-23 12:11:59 +00:00
2017-12-19 06:39:57 +00:00
Under the hood calling `autoUpdater.quitAndInstall()` will close all application
windows first, and automatically call `app.quit()` after all windows have been
closed.
2016-11-16 09:35:02 +00:00
2019-03-20 20:12:47 +00:00
**Note:** It is not strictly necessary to call this function to apply an update,
as a successfully downloaded update will always be applied the next time the
2018-07-24 22:33:53 +00:00
application starts.
2017-10-25 14:59:49 +00:00
2015-10-23 12:11:59 +00:00
[squirrel-mac]: https://github.com/Squirrel/Squirrel.Mac
[server-support]: https://github.com/Squirrel/Squirrel.Mac#server-support
2016-05-06 17:05:12 +00:00
[installer-lib]: https://github.com/electron/windows-installer
2024-09-23 18:02:28 +00:00
[electron-forge-lib]: https://www.electronforge.io/config/makers/squirrel.windows
2023-03-21 15:39:19 +00:00
[app-user-model-id]: https://learn.microsoft.com/en-us/windows/win32/shell/appids
2019-07-22 15:20:43 +00:00
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter