{"_id":"@capgo/electron-updater","_rev":"6-85547eddec289fe8f69d52885d7f53ef","name":"@capgo/electron-updater","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"@capgo/electron-updater","version":"0.0.1","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"author":{"name":"Capgo"},"license":"MPL-2.0","_id":"@capgo/electron-updater@0.0.1","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app","bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"dist":{"shasum":"4a6ec39c8fa1ebeeb2d995b1457fe04509a2cb9c","tarball":"https://registry.npmjs.org/@capgo/electron-updater/-/electron-updater-0.0.1.tgz","fileCount":15,"integrity":"sha512-rYZwQhAIWl3ln20zFh5CsgWltfN/0plo3UxPmvnFkW9SJOTdXUpUXzOe1vmbFwAxJvvAqXTIzW11448hJm+Ixw==","signatures":[{"sig":"MEYCIQClqkCVoY44TBoW93GIhy5n7ZQI0EVr9Eclissw60lMCgIhANHw89pUVvj/IXcvzeuqgA8KnRIXQ/Y0n4UQDlD9BYQ4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321567},"main":"dist/main/index.js","types":"dist/main/index.d.ts","exports":{".":{"types":"./dist/main/index.d.ts","import":"./dist/main/index.mjs","require":"./dist/main/index.js"},"./preload":{"types":"./dist/preload/index.d.ts","import":"./dist/preload/index.mjs","require":"./dist/preload/index.js"},"./renderer":{"types":"./dist/renderer/index.d.ts","import":"./dist/renderer/index.mjs","require":"./dist/renderer/index.js"}},"gitHead":"e63b86e73ddff8504bbd5c060f8e6a22876d6d70","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"_npmVersion":"11.7.0","description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","directories":{},"_nodeVersion":"24.11.0","dependencies":{"extract-zip":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.0","electron":"^28.0.0","typescript":"^5.3.0","@types/node":"^24","@typescript-eslint/parser":"^8.48.1","@typescript-eslint/eslint-plugin":"^8.48.1"},"peerDependencies":{"electron":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-updater_0.0.1_1767838841978_0.8781559531278345","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@capgo/electron-updater","version":"0.0.3","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/electron-updater@0.0.3","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/","bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"dist":{"shasum":"173cdea67bb62dfa2fe34b383efd942d8ebdf510","tarball":"https://registry.npmjs.org/@capgo/electron-updater/-/electron-updater-0.0.3.tgz","fileCount":15,"integrity":"sha512-qpEcU0JLaW5qTlwVSPXbx9rtiJlBy42tosImUqhNzZ+aZRnmRgobPBJF6ZleCfB3jjXAWUPV8aLJGpgoH3keew==","signatures":[{"sig":"MEUCIG1AgMLr2ViV3eHfTwRupxF1t8ccK6u0gAKJWSfPT1zuAiEAlXZjtBDMD5/Gxby/Nr+JVuvThbd/4DJjlliwJXVEMgo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2felectron-updater@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":321603},"main":"dist/main/index.js","types":"dist/main/index.d.ts","exports":{".":{"types":"./dist/main/index.d.ts","import":"./dist/main/index.mjs","require":"./dist/main/index.js"},"./preload":{"types":"./dist/preload/index.d.ts","import":"./dist/preload/index.mjs","require":"./dist/preload/index.js"},"./renderer":{"types":"./dist/renderer/index.d.ts","import":"./dist/renderer/index.mjs","require":"./dist/renderer/index.js"}},"gitHead":"ed421d73e8d9c012067fbdbdd5320d88610d149f","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"_npmVersion":"10.8.2","description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","directories":{},"_nodeVersion":"18.20.8","dependencies":{"extract-zip":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.0","electron":"^28.0.0","typescript":"^5.3.0","@types/node":"^24","@typescript-eslint/parser":"^8.48.1","@typescript-eslint/eslint-plugin":"^8.48.1"},"peerDependencies":{"electron":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-updater_0.0.3_1767839421694_0.8558152425115628","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@capgo/electron-updater","version":"0.0.4","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/electron-updater@0.0.4","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/","bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"dist":{"shasum":"a7088d939b00e09f0809c84f17b9dde79dcb720e","tarball":"https://registry.npmjs.org/@capgo/electron-updater/-/electron-updater-0.0.4.tgz","fileCount":15,"integrity":"sha512-b0jDx3To8Uncc72BQALDb/z0SMWDDPdpLXUPAVN/WC1TOzSeIoI4bG7GdhjqlGJha6mxxVuWTT0leGZVxV3ybg==","signatures":[{"sig":"MEYCIQDo8h/EBR3/dvXFasC2qOaKlMRQaheVHni8WqCVnxcAxAIhAJka8w89/BycOwNO075qKYX17w62JzkVHViaH9JaO+1Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2felectron-updater@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":321445},"main":"dist/main/index.js","types":"dist/main/index.d.ts","exports":{".":{"types":"./dist/main/index.d.ts","import":"./dist/main/index.mjs","require":"./dist/main/index.js"},"./preload":{"types":"./dist/preload/index.d.ts","import":"./dist/preload/index.mjs","require":"./dist/preload/index.js"},"./renderer":{"types":"./dist/renderer/index.d.ts","import":"./dist/renderer/index.mjs","require":"./dist/renderer/index.js"}},"gitHead":"6c46e95dd496a3fa8786bc5f2cebfbaaefd852a6","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"_npmVersion":"10.8.2","description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","directories":{},"_nodeVersion":"18.20.8","dependencies":{"extract-zip":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.0","electron":"^28.0.0","typescript":"^5.3.0","@types/node":"^24","@typescript-eslint/parser":"^8.48.1","@typescript-eslint/eslint-plugin":"^8.48.1"},"peerDependencies":{"electron":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-updater_0.0.4_1768892946510_0.4180204518910926","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@capgo/electron-updater","version":"0.0.5","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/electron-updater@0.0.5","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/","bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"dist":{"shasum":"1d30d20eb7a5005d30b1ccf6a57956b75da0fbc8","tarball":"https://registry.npmjs.org/@capgo/electron-updater/-/electron-updater-0.0.5.tgz","fileCount":15,"integrity":"sha512-qfUhXsZ/cHtUdlqYPT5Fz8hYunKwTSj1QViWQJifBUe8bIgKJXU99nJwVQItV21INXjbSRwh/L4m5CafgloBLQ==","signatures":[{"sig":"MEYCIQDbwJbyGA3Ci7ury8Dj92btpMRbckvGRI63k+ZE5rBWkgIhAPe/Re1L9CJo+Q9J4aGeUrSw2gL3K99r5SmF425ukOzt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2felectron-updater@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":321913},"main":"dist/main/index.js","types":"dist/main/index.d.ts","exports":{".":{"types":"./dist/main/index.d.ts","import":"./dist/main/index.mjs","require":"./dist/main/index.js"},"./preload":{"types":"./dist/preload/index.d.ts","import":"./dist/preload/index.mjs","require":"./dist/preload/index.js"},"./renderer":{"types":"./dist/renderer/index.d.ts","import":"./dist/renderer/index.mjs","require":"./dist/renderer/index.js"}},"gitHead":"bab78555a60dd38315bf0a96b35d8c0a56dff40d","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"_npmVersion":"10.8.2","description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","directories":{},"_nodeVersion":"18.20.8","dependencies":{"extract-zip":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.0","electron":"^28.0.0","typescript":"^5.3.0","@types/node":"^24","@typescript-eslint/parser":"^8.48.1","@typescript-eslint/eslint-plugin":"^8.48.1"},"peerDependencies":{"electron":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-updater_0.0.5_1771971226645_0.33942881468887687","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@capgo/electron-updater","version":"0.0.6","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/electron-updater@0.0.6","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/","bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"dist":{"shasum":"4b8cbbed3275506d44f2fd0d55f49af688a78710","tarball":"https://registry.npmjs.org/@capgo/electron-updater/-/electron-updater-0.0.6.tgz","fileCount":15,"integrity":"sha512-Hs3aeOekkT7XrQFpIyzWa4xl8DmvHB9z9s7O12eBn0+JKotIZiRfC9uN86T5Wo8mSRbOqSBKvG1eH1Wyfj2BSQ==","signatures":[{"sig":"MEQCIFm9Rai0VqXIE0SmRCqaiK1jGcnfIxEsw+X7mC3wRqHaAiA1fwk8PVBeBDCT8akXPXR5Q6p+qYi19S4C2NADe4QU7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2felectron-updater@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322051},"main":"dist/main/index.js","types":"dist/main/index.d.ts","exports":{".":{"types":"./dist/main/index.d.ts","import":"./dist/main/index.mjs","require":"./dist/main/index.js"},"./preload":{"types":"./dist/preload/index.d.ts","import":"./dist/preload/index.mjs","require":"./dist/preload/index.js"},"./renderer":{"types":"./dist/renderer/index.d.ts","import":"./dist/renderer/index.mjs","require":"./dist/renderer/index.js"}},"gitHead":"0e7fea31d1ea3af88025c8a338d25e83902bba7c","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"_npmVersion":"10.8.2","description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","directories":{},"_nodeVersion":"18.20.8","dependencies":{"extract-zip":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.0","electron":"^28.0.0","typescript":"^5.3.0","@types/node":"^24","@typescript-eslint/parser":"^8.48.1","@typescript-eslint/eslint-plugin":"^8.48.1"},"peerDependencies":{"electron":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-updater_0.0.6_1772290464673_0.7449296771181775","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-08T02:20:41.711Z","modified":"2026-08-19T10:41:29.391Z","0.0.1":"2026-01-08T02:20:42.150Z","0.0.3":"2026-01-08T02:30:21.861Z","0.0.4":"2026-01-20T07:09:06.658Z","0.0.5":"2026-02-24T22:13:46.873Z","0.0.6":"2026-02-28T14:54:24.829Z"},"bugs":{"url":"https://github.com/Cap-go/electron-updater/issues"},"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","homepage":"https://capgo.app/docs/","keywords":["electron","updater","ota","live-update","capgo","hot-reload"],"repository":{"url":"git+https://github.com/Cap-go/electron-updater.git","type":"git"},"description":"OTA updates for Electron applications - 100% feature parity with capacitor-updater","maintainers":[{"email":"martin.donadieu@hey.com","name":"riderx"},{"email":"tori@capgo.app","name":"torichancapgo"}],"readme":"# Electron Updater\n\n<a href=\"https://capgo.app/\"><img src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/></a>\n\n[![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.com/invite/VnYRvBfgA6)\n<a href=\"https://discord.com/invite/VnYRvBfgA6\"><img src=\"https://img.shields.io/discord/912707985829163099?color=%237289DA&label=Discord\" alt=\"Discord\"></a>\n[![npm](https://img.shields.io/npm/dm/@capgo/electron-updater)](https://www.npmjs.com/package/@capgo/electron-updater)\n[![GitHub latest commit](https://badgen.net/github/last-commit/Cap-go/electron-updater/main)](https://GitHub.com/Cap-go/electron-updater/commit/)\n[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)\n\n<div align=\"center\">\n  <h2><a href=\"https://capgo.app/?ref=plugin_electron_updater\"> Get Instant updates for your App with Capgo</a></h2>\n  <h2><a href=\"https://capgo.app/consulting/?ref=plugin_electron_updater\"> Missing a feature? We'll build the plugin for you</a></h2>\n</div>\n\nOTA (Over-The-Air) updates for Electron applications. 100% feature parity with [@capgo/capacitor-updater](https://github.com/Cap-go/capacitor-updater).\n\nOpen-source Alternative to Electron's built-in updater with live update capabilities.\n\n## Why Electron Updater?\n\nElectron's built-in auto-updater requires shipping a full new binary for every update. This plugin solves that by:\n\n- **Instant updates** - Push JavaScript/HTML/CSS updates directly to users without rebuilding the entire app\n- **Delta updates** - Only download changed files, making updates ultra-fast\n- **Rollback protection** - Automatically revert broken updates to keep your app stable\n- **Open source** - Self-host or use Capgo Cloud, with full control over your update infrastructure\n- **Feature parity** - Same API and capabilities as capacitor-updater\n\nPerfect for fixing bugs immediately, A/B testing features, and maintaining control over your release schedule.\n\n## Features\n\n- 🚀 **Live Updates** - Push updates instantly without app store review\n- 🔄 **Auto-Update** - Automatic update checking and installation\n- 🛡️ **Rollback Protection** - Automatic rollback if update fails\n- 📦 **Bundle Management** - Full control over downloaded bundles\n- 🔐 **End-to-End Encryption** - Secure update delivery\n- 📊 **Channel System** - Deploy to different user groups\n- ⏱️ **Delay Conditions** - Control when updates are applied\n- 🐛 **Debug Menu** - Built-in debug tools for development\n\n## Installation\n\n```bash\nnpm install @capgo/electron-updater\n```\n\n## Quick Start\n\n### Main Process\n\n```typescript\n// main.ts\nimport { app, BrowserWindow } from 'electron';\nimport * as path from 'path';\nimport {\n  ElectronUpdater,\n  setupIPCHandlers,\n  setupEventForwarding,\n} from '@capgo/electron-updater';\n\nconst updater = new ElectronUpdater({\n  appId: 'com.example.app',\n  autoUpdate: true,\n});\n\napp.whenReady().then(async () => {\n  const mainWindow = new BrowserWindow({\n    webPreferences: {\n      preload: path.join(__dirname, 'preload.js'),\n    },\n  });\n\n  // Initialize updater with window and builtin path\n  const builtinPath = path.join(__dirname, 'www/index.html');\n  await updater.initialize(mainWindow, builtinPath);\n\n  // Setup IPC communication\n  setupIPCHandlers(updater);\n  setupEventForwarding(updater, mainWindow);\n\n  // Load the current bundle (either builtin or downloaded)\n  await mainWindow.loadFile(updater.getCurrentBundlePath());\n});\n```\n\n### Preload Script\n\n```typescript\n// preload.ts\nimport { exposeUpdaterAPI } from '@capgo/electron-updater/preload';\n\nexposeUpdaterAPI();\n```\n\n### Renderer Process\n\n```typescript\n// renderer.ts\nimport { requireUpdater } from '@capgo/electron-updater/renderer';\n\nconst updater = requireUpdater();\n\n// IMPORTANT: Call this on every app launch!\nawait updater.notifyAppReady();\n\n// Check for updates manually\nconst latest = await updater.getLatest();\nif (latest.url && !latest.error) {\n  // Download the update\n  const bundle = await updater.download({\n    url: latest.url,\n    version: latest.version,\n    checksum: latest.checksum,\n  });\n\n  // Queue for next restart\n  await updater.next({ id: bundle.id });\n}\n\n// Listen for events\nupdater.addListener('download', (event) => {\n  console.log(`Download progress: ${event.percent}%`);\n});\n\nupdater.addListener('updateFailed', (event) => {\n  console.error('Update failed:', event.bundle.version);\n});\n```\n\n## API Reference\n\n### Core Methods\n\n| Method | Description |\n|--------|-------------|\n| `notifyAppReady()` | **Must be called on every launch** - Confirms bundle loaded successfully |\n| `download(options)` | Download a bundle from URL |\n| `next(options)` | Queue bundle for next restart |\n| `set(options)` | Immediately switch to bundle and reload |\n| `reload()` | Reload the app with current bundle |\n| `delete(options)` | Delete a bundle from storage |\n| `reset(options)` | Reset to builtin or last successful bundle |\n\n### Bundle Information\n\n| Method | Description |\n|--------|-------------|\n| `current()` | Get current bundle and native version |\n| `list(options)` | List all downloaded bundles |\n| `getNextBundle()` | Get bundle queued for next restart |\n| `getFailedUpdate()` | Get info about last failed update |\n| `getBuiltinVersion()` | Get version shipped with app |\n\n### Update Checking\n\n| Method | Description |\n|--------|-------------|\n| `getLatest(options)` | Check server for latest version |\n\n### Channel Management\n\n| Method | Description |\n|--------|-------------|\n| `setChannel(options)` | Assign device to a channel |\n| `unsetChannel(options)` | Remove channel assignment |\n| `getChannel()` | Get current channel |\n| `listChannels()` | List available channels |\n\n### Delay Conditions\n\n| Method | Description |\n|--------|-------------|\n| `setMultiDelay(options)` | Set conditions before update applies |\n| `cancelDelay()` | Clear all delay conditions |\n\nDelay condition types:\n- `background` - Wait for app to be backgrounded (with optional duration)\n- `kill` - Wait for app to be killed and restarted\n- `date` - Wait until specific date/time\n- `nativeVersion` - Wait for native app update\n\n### Device Identification\n\n| Method | Description |\n|--------|-------------|\n| `getDeviceId()` | Get unique device ID |\n| `setCustomId(options)` | Set custom identifier |\n\n### Configuration\n\n| Method | Description |\n|--------|-------------|\n| `setUpdateUrl(options)` | Change update server URL |\n| `setStatsUrl(options)` | Change statistics URL |\n| `setChannelUrl(options)` | Change channel URL |\n| `setAppId(options)` | Change App ID |\n| `getAppId()` | Get current App ID |\n\n### Debug\n\n| Method | Description |\n|--------|-------------|\n| `setDebugMenu(options)` | Enable/disable debug menu |\n| `isDebugMenuEnabled()` | Check debug menu state |\n\n## Events\n\n| Event | Description |\n|-------|-------------|\n| `download` | Download progress updates |\n| `updateAvailable` | New update available |\n| `noNeedUpdate` | Already up-to-date |\n| `downloadComplete` | Download finished |\n| `downloadFailed` | Download failed |\n| `breakingAvailable` | Incompatible update available |\n| `updateFailed` | Update installation failed |\n| `appReloaded` | App was reloaded |\n| `appReady` | notifyAppReady() was called |\n\n## Configuration Options\n\n```typescript\nconst updater = new ElectronUpdater({\n  // Core\n  appId: 'com.example.app',\n  version: '1.0.0', // Override builtin version\n  autoUpdate: true, // Enable auto-updates (default: true)\n  appReadyTimeout: 10000, // MS before rollback (default: 10000)\n\n  // Server URLs\n  updateUrl: 'https://plugin.capgo.app/updates',\n  channelUrl: 'https://plugin.capgo.app/channel_self',\n  statsUrl: 'https://plugin.capgo.app/stats',\n\n  // Security\n  publicKey: '...', // For E2E encryption\n\n  // Channels\n  defaultChannel: 'production',\n\n  // Behavior\n  autoDeleteFailed: true, // Delete failed bundles\n  autoDeletePrevious: true, // Delete old bundles\n  resetWhenUpdate: true, // Reset on native update\n\n  // Direct Update\n  directUpdate: false, // 'atInstall' | 'onLaunch' | 'always' | false\n\n  // Dynamic Config\n  allowModifyUrl: false, // Allow runtime URL changes\n  allowModifyAppId: false, // Allow runtime App ID changes\n  persistCustomId: false, // Persist custom ID\n  persistModifyUrl: false, // Persist URL changes\n\n  // Debug\n  debugMenu: false, // Enable debug menu (Ctrl+Shift+D)\n  disableJSLogging: false, // Disable console logs\n\n  // Periodic Updates\n  periodCheckDelay: 0, // Seconds between checks (0 = disabled, min 600)\n});\n```\n\n## Rollback Protection\n\nThe updater includes automatic rollback protection:\n\n1. When a new bundle loads, a timer starts (default: 10 seconds)\n2. Your app must call `notifyAppReady()` before the timer expires\n3. If the timer expires, the update is considered failed\n4. The app automatically rolls back to the last successful bundle\n\nThis prevents broken updates from bricking your app.\n\n## Debug Menu\n\nEnable the debug menu during development:\n\n```typescript\nconst updater = new ElectronUpdater({\n  debugMenu: true,\n});\n```\n\nAccess with `Ctrl+Shift+D` (or `Cmd+Shift+D` on Mac) to:\n- View current bundle information\n- Switch between available bundles\n- Reset to builtin version\n- View device and channel info\n\n## Differences from Capacitor Updater\n\n| Feature | Capacitor Updater | Electron Updater |\n|---------|-------------------|------------------|\n| Shake Menu | Physical shake | Keyboard shortcut |\n| Background Detection | Native events | Window blur/focus |\n| Storage | Native filesystem | userData directory |\n| Device ID Storage | Keychain/Keystore | safeStorage |\n\n## Documentation\n\nFull documentation is available at [capgo.app/docs](https://capgo.app/docs/).\n\n## Community\n\nJoin the [discord](https://discord.gg/VnYRvBfgA6) to get help.\n\n## License\n\nMozilla Public License Version 2.0. See [LICENSE](LICENSE) for details.\n","readmeFilename":"README.md"}