π‘ A free service that makes it easy for open-source Electron apps to update themselves.
698
stars
290
commits
TypeScript
primary language
Sep 10, 2026
updated
A free service that makes it easy for open-source Electron apps to update themselves.
Before using this service, make sure your Electron app meets these criteria:
We provide update-electron-app as a zero-config runtime dependency to use update.electronjs.org with your Electron app.
npm install update-electron-app
Call it from in your main process file:
require('update-electron-app')()
And that's all it takes! To customize, see the update-electron-app API.
Once your application is packaged, it will update itself for each new GitHub Release that you publish.
Use something like the following setup to add automatic updates to your application:
[!IMPORTANT] Please ensure that the code below will only be executed in your packaged app, and not in development. You can use the app.isPackaged API to check for the environment.
const { app, autoUpdater } = require('electron')
Next, construct the URL of the update server and tell autoUpdater about it:
const server = 'https://update.electronjs.org'
const feed = `${server}/OWNER/REPO/${process.platform}-${process.arch}/${app.getVersion()}`
autoUpdater.setFeedURL(feed)
As the final step, check for updates. The example below will check every 10 minutes:
setInterval(() => {
autoUpdater.checkForUpdates()
}, 10 * 60 * 1000)
Once your application is packaged, it will update itself for each new GitHub Release that you publish.
The following API endpoints are available:
/:owner/:repo/:platform/:version/:owner/:repo/:platform-:arch/:version/:owner/:repo/:platform/:format/:version/:owner/:repo/:platform-:arch/:format/:version/:owner/:repo/:platform/:version/RELEASESThese API endpoints support the query path arguments as defined below:
:owner - GitHub repository owner (organization or user):repo - GitHub repository name:platform - Platform type
win32darwin:arch - Architecture type
x64, ia32, arm64x64, arm64, universal:format - (Optional) Update format type
squirrel - Squirrel.Windows (default for Windows when omitted)msix - MSIX auto-update (available on Electron 41+):version - Semantic Versioning (SemVer) compatible application version numberThis project supports specific naming conventions for GitHub Releases assets.
The following heuristics are used to identify update availability for a specific platform and architecture:
.zip file.-mac, -darwin, or -osx.-x64):
-arm64 for Apple Silicon.-x64 for Intel-based macOS.-universal for Universal binaries.Example asset names:
app-mac-arm64-0.0.1.zipapp-mac-arm64.zipapp-0.0.1-osx-x64.zipapp-osx-x64.zipapp-darwin-universal.zipapp-mac.zip (no architecture specified - treated as -x64).zip or .exe file.-win32 platform identifier.-x64):
-ia32 for 32-bit Windows.-x64 for 64-bit Windows.-arm64 for ARM-based Windows..exe files without specific architecture tags or the -win32 platform identifier are assumed to be -x64 by default.Example asset names:
app-win32-ia32-0.0.1.zipapp-win32-ia32.zipapp-0.0.1-win32-x64.zipapp-win32-x64.zipapp-win32-arm64.zipapp-win32-arm64.exeapp-win32-arm64-v1.2.3.exeapp-win32.exe (no architecture specified - treated as -x64)app-installer.exe (generic .exe file with no architecture or platform identifier specified - treated as -x64).msix file.-win32 platform identifier.-x64):
-x64 for 64-bit Windows.-arm64 for ARM-based Windows..msix files without specific architecture tags or the -win32 platform identifier are assumed to be -x64 by default.Example asset names:
app-win32-x64.msixapp-1.0.0-win32-x64.msixapp-win32-arm64.msixapp-win32.msix (no architecture specified - treated as -x64)app-installer.msix (generic .msix file with no architecture or platform identifier specified - treated as -x64)To use MSIX updates, include the msix format segment in the update feed URL:
const server = 'https://update.electronjs.org'
const feed = `${server}/OWNER/REPO/${process.platform}-${process.arch}/msix/${app.getVersion()}`
autoUpdater.setFeedURL(feed)
The MSIX updater returns the same JSON format as macOS ({ name, notes, url }) and does not use the RELEASES endpoint.
There are two development servers available:
This runs the full server with Redis caching and GitHub API integration.
You'll first need to have a running Redis server. There are two options:
redis-server. Learn how to install Redis on the Redis website.docker run -p 6379:6379 -it redis/redis-stack-server:latest.Then run the server:
yarn
GH_TOKEN=TOKEN yarn start
This runs a lightweight server with an in-memory cache and no external dependencies (no Redis or GH_TOKEN required).
Useful for local development and testing.
yarn
yarn start-test-server
To try with an actual electron app, run:
yarn start &
cd example
yarn
On Darwin:
yarn build
./out/test-darwin-x64/test.app/Contents/MacOS/test
On Windows:
yarn run build
"example\out\make\squirrel.windows\x64\test-0.0.0 Setup.exe"
TypeScript
96.4%
JavaScript
3.5%
π‘ A free service that makes it easy for open-source Electron apps to update themselves.
698
stars
290
commits
TypeScript
primary language
Sep 10, 2026
updated
A free service that makes it easy for open-source Electron apps to update themselves.
Before using this service, make sure your Electron app meets these criteria:
We provide update-electron-app as a zero-config runtime dependency to use update.electronjs.org with your Electron app.
npm install update-electron-app
Call it from in your main process file:
require('update-electron-app')()
And that's all it takes! To customize, see the update-electron-app API.
Once your application is packaged, it will update itself for each new GitHub Release that you publish.
Use something like the following setup to add automatic updates to your application:
[!IMPORTANT] Please ensure that the code below will only be executed in your packaged app, and not in development. You can use the app.isPackaged API to check for the environment.
const { app, autoUpdater } = require('electron')
Next, construct the URL of the update server and tell autoUpdater about it:
const server = 'https://update.electronjs.org'
const feed = `${server}/OWNER/REPO/${process.platform}-${process.arch}/${app.getVersion()}`
autoUpdater.setFeedURL(feed)
As the final step, check for updates. The example below will check every 10 minutes:
setInterval(() => {
autoUpdater.checkForUpdates()
}, 10 * 60 * 1000)
Once your application is packaged, it will update itself for each new GitHub Release that you publish.
The following API endpoints are available:
/:owner/:repo/:platform/:version/:owner/:repo/:platform-:arch/:version/:owner/:repo/:platform/:format/:version/:owner/:repo/:platform-:arch/:format/:version/:owner/:repo/:platform/:version/RELEASESThese API endpoints support the query path arguments as defined below:
:owner - GitHub repository owner (organization or user):repo - GitHub repository name:platform - Platform type
win32darwin:arch - Architecture type
x64, ia32, arm64x64, arm64, universal:format - (Optional) Update format type
squirrel - Squirrel.Windows (default for Windows when omitted)msix - MSIX auto-update (available on Electron 41+):version - Semantic Versioning (SemVer) compatible application version numberThis project supports specific naming conventions for GitHub Releases assets.
The following heuristics are used to identify update availability for a specific platform and architecture:
.zip file.-mac, -darwin, or -osx.-x64):
-arm64 for Apple Silicon.-x64 for Intel-based macOS.-universal for Universal binaries.Example asset names:
app-mac-arm64-0.0.1.zipapp-mac-arm64.zipapp-0.0.1-osx-x64.zipapp-osx-x64.zipapp-darwin-universal.zipapp-mac.zip (no architecture specified - treated as -x64).zip or .exe file.-win32 platform identifier.-x64):
-ia32 for 32-bit Windows.-x64 for 64-bit Windows.-arm64 for ARM-based Windows..exe files without specific architecture tags or the -win32 platform identifier are assumed to be -x64 by default.Example asset names:
app-win32-ia32-0.0.1.zipapp-win32-ia32.zipapp-0.0.1-win32-x64.zipapp-win32-x64.zipapp-win32-arm64.zipapp-win32-arm64.exeapp-win32-arm64-v1.2.3.exeapp-win32.exe (no architecture specified - treated as -x64)app-installer.exe (generic .exe file with no architecture or platform identifier specified - treated as -x64).msix file.-win32 platform identifier.-x64):
-x64 for 64-bit Windows.-arm64 for ARM-based Windows..msix files without specific architecture tags or the -win32 platform identifier are assumed to be -x64 by default.Example asset names:
app-win32-x64.msixapp-1.0.0-win32-x64.msixapp-win32-arm64.msixapp-win32.msix (no architecture specified - treated as -x64)app-installer.msix (generic .msix file with no architecture or platform identifier specified - treated as -x64)To use MSIX updates, include the msix format segment in the update feed URL:
const server = 'https://update.electronjs.org'
const feed = `${server}/OWNER/REPO/${process.platform}-${process.arch}/msix/${app.getVersion()}`
autoUpdater.setFeedURL(feed)
The MSIX updater returns the same JSON format as macOS ({ name, notes, url }) and does not use the RELEASES endpoint.
There are two development servers available:
This runs the full server with Redis caching and GitHub API integration.
You'll first need to have a running Redis server. There are two options:
redis-server. Learn how to install Redis on the Redis website.docker run -p 6379:6379 -it redis/redis-stack-server:latest.Then run the server:
yarn
GH_TOKEN=TOKEN yarn start
This runs a lightweight server with an in-memory cache and no external dependencies (no Redis or GH_TOKEN required).
Useful for local development and testing.
yarn
yarn start-test-server
To try with an actual electron app, run:
yarn start &
cd example
yarn
On Darwin:
yarn build
./out/test-darwin-x64/test.app/Contents/MacOS/test
On Windows:
yarn run build
"example\out\make\squirrel.windows\x64\test-0.0.0 Setup.exe"
TypeScript
96.4%
JavaScript
3.5%