{"id":13406517,"url":"https://github.com/electron-userland/electron-wix-msi","last_synced_at":"2025-09-12T06:47:08.192Z","repository":{"id":39916620,"uuid":"110904474","full_name":"electron-userland/electron-wix-msi","owner":"electron-userland","description":":dvd: Create traditional MSI installers for your Electron app","archived":false,"fork":false,"pushed_at":"2024-04-03T15:25:05.000Z","size":8807,"stargazers_count":327,"open_issues_count":86,"forks_count":98,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-08-09T00:45:15.940Z","etag":null,"topics":["electron","electronjs","installer","msi","wix","wix-toolset"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/electron-userland.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-16T00:54:51.000Z","updated_at":"2025-07-18T05:18:17.000Z","dependencies_parsed_at":"2024-01-18T23:05:17.672Z","dependency_job_id":"ce41ea90-2282-4340-953a-778694347090","html_url":"https://github.com/electron-userland/electron-wix-msi","commit_stats":{"total_commits":290,"total_committers":26,"mean_commits":"11.153846153846153","dds":0.6241379310344828,"last_synced_commit":"3d476237f631380e2252027c4fde20eacccd438e"},"previous_names":["felixrieseberg/electron-wix-msi"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/electron-userland/electron-wix-msi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electron-userland%2Felectron-wix-msi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electron-userland%2Felectron-wix-msi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electron-userland%2Felectron-wix-msi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electron-userland%2Felectron-wix-msi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/electron-userland","download_url":"https://codeload.github.com/electron-userland/electron-wix-msi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electron-userland%2Felectron-wix-msi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274770698,"owners_count":25346211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electron","electronjs","installer","msi","wix","wix-toolset"],"created_at":"2024-07-30T19:02:32.398Z","updated_at":"2025-09-12T06:47:08.159Z","avatar_url":"https://github.com/electron-userland.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"![electron-wix-msi](.github/logo.png)\n\n[![Build status](https://ci.appveyor.com/api/projects/status/s54pty8rve3yemb9?svg=true)](https://ci.appveyor.com/project/felixrieseberg/electron-wix-msi)\n[![Coverage Status](https://coveralls.io/repos/github/felixrieseberg/electron-wix-msi/badge.svg?branch=master)](https://coveralls.io/github/felixrieseberg/electron-wix-msi?branch=master)\n![TypeScript](https://img.shields.io/badge/typings-included-brightgreen.svg)\n\n## Traditional MSI Installers\n\nMost Electron developers use the official\n[windows-installer](https://github.com/electron/windows-installer) to create\nWindows installers. It does not require Administrator privileges and comes\nbundled with an automatic updater. If your app targets consumers, it will likely\nbe the better choice.\n\nHowever, if you need to create a traditional MSI the way Microsoft intended for\nsoftware to be installed, this module is your friend. It creates a standalone\nMSI that installs your application to `Program Files` or any user-defined\ndirectory, much like the installers for Office, Node.js, or other popular apps.\nIt allows up- and downgrades. For more details, see:\n[Should I use this?](#should-i-use-this)\n\n## Look \u0026 Feel\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/felixrieseberg/electron-wix-msi/raw/master/.github/installer.gif\" alt=\"Installer GIF\"\u003e\u003c/p\u003e\n\n## Prerequisites\n\nBefore using this module, make sure to\n[install the Wix toolkit v3](http://wixtoolset.org/releases/). Only the command\nline tools are required. If you are using AppVeyor or another Windows CI system,\nit is likely already installed.\n\n```\nnpm i --save-dev electron-wix-msi\n```\n\n## Whats new?\nVersion 3 is a major release for this toolkit. Many internals were reworked and V3 \ndelivers improvements listed below. Please look out for the **🆕 icon throughout this\ndocumentation for new parameter. Versions 4 and above are only adding features\nand requiring newer versions of Node.js without actually requiring any code changes on\nyour part.\n\nSee the CHANGELOG.md for details.\n\n### New install folder structure\nA new folder structure allows to update the MSI installation while your app is running\nwithout temporarily corrupting the installation. If files are locked during an update\nthen the MSI engine schedules file operation after the next reboot. While files that are\nnot locked will be overwritten immediately. That can cause unexpected behavior of your\napp. The version-based folder structure avoids these problems and leads to a more robust\nuser experience.\n``` js\nC:\\Program Files\\\n└─ Kittens\n     └─ app-x.x.x // version of the MSI\n     └─ .installInfo // contains information about the installation\n     └─ kittens.exe // stub executable that launches the newest version\n     └─ Update.exe // optional auto updater \n```\n### Auto launch feature\nAuto updating was a long missing feature for MSIs. No more!. The integration of special\nSquirrel.Windows version allows us to enable auto-updating. This feature is optional\nand can be enabled/disabled at package time, install time and can even be controlled \nat run time of your App. See [end user documentation](guides/enduser.md)\n\n### Auto update feature\nAuto updating was a long missing feature for MSIs. No more! The integration of a special\nSquirrel.Windows version allows us to enable auto-updating. This feature is completely\noptional and can be enabled/disabled at package time, install time and can even be controlled \nat run time of your App.\n\n### Desktop shortcut\nYour App will now also have a shortcut on the Desktop. \n\n## Usage\n\nCreating an installer is a three-step process:\n\n``` js\nimport { MSICreator } from 'electron-wix-msi';\n\n// Step 1: Instantiate the MSICreator\nconst msiCreator = new MSICreator({\n  appDirectory: '/path/to/built/app',\n  description: 'My amazing Kitten simulator',\n  exe: 'kittens',\n  name: 'Kittens',\n  manufacturer: 'Kitten Technologies',\n  version: '1.1.2',\n  outputDirectory: '/path/to/output/folder'\n});\n\n// Step 2: Create a .wxs template file\nconst supportBinaries = await msiCreator.create();\n\n// 🆕 Step 2a: optionally sign support binaries if you\n// sign you binaries as part of of your packaging script\nsupportBinaries.forEach(async (binary) =\u003e {\n  // Binaries are the new stub executable and optionally\n  // the Squirrel auto updater.\n  await signFile(binary);\n});\n\n// Step 3: Compile the template to a .msi file\nawait msiCreator.compile();\n```\n\n### Configuration\n\n* `appDirectory` (string) - The source directory for the installer, usually the\n  output of\n  [electron-packager](https://github.com/electron-userland/electron-packager).\n* `outputDirectory` (string) - The output directory. Will contain the finished\n  `msi` as well as the intermediate files .`wxs` and `.wixobj`.\n* `exe` (string) - The name of the exe.\n* `description` (string) - The app's description.\n* `version` (string) - The app's version.\n* `name` (string) - The app's name.\n* `icon` 🆕 (string, optional) - A path to the Apps icon used for the stub executable.\n   If not provided a lower quality version will be extracted form the `exe`\n* `manufacturer` (string) - Name of the manufacturer.\n\n* `appUserModelId` (string, optional) - String to set as `appUserModelId` on the\n  shortcut. If none is passed, it'll be set to `com.squirrel.(Name).(exe)`,\n  which should match the id given to your app by Squirrel.\n* `shortName` (optional, string) - A short name for the app, used wherever\n  spaces and special characters are not allowed. Will use the name if left\n  undefined.\n* `shortcutFolderName` (string, optional) - Name of the shortcut folder in the\n  Windows Start Menu. Will use the manufacturer field if left undefined.\n* `shortcutName` (string, optional) - Name of the shortcut  in the\n  Windows Start Menu. Will use the app's name field if left undefined.\n* `programFilesFolderName` (string, optional) - Name of the folder your app will\n  live in. Will use the app's name if left undefined.\n* `upgradeCode` (string, optional) - A unique UUID used by your app to identify\n  itself. This module will generate one for you, but it is important to reuse it\n  to enable conflict-free upgrades.\n* `cultures` (string, optional) - Specify a specific culture for `light.exe` to\n  build using the culture switch e.g `en-us`.\n* `language` (number, optional) - The\n  [Microsoft Windows Language Code identifier](https://msdn.microsoft.com/en-us/library/cc233965.aspx)\n  used by the installer. Will use 1033 (English, United-States) if left\n  undefined.\n* `extensions` (array, optional) - Specify WiX extensions to use e.g `['WixUtilExtension', 'C:\\My WiX Extensions\\FooExtension.dll']`\n* `lightSwitches` (array, optional) - Specify command line options to pass to light.exe e.g. `['-sval', '-ai']`\n  Used to activate `PropertyGroup` options as specified in the [Light Task](https://wixtoolset.org/documentation/manual/v3/msbuild/task_reference/light.html) documentation. \n* `ui` (UIOptions, optional) - Enables configuration of the UI. See below for\n  more information.\n* `arch` (string, optional) - Defines the architecture the MSI is build for. Values can\n  be either `x86` or `x64`. Default's to `x86` if left undefined.\n* `features` 🆕 (Feature , optional) - Enables/disables features that will be built-in \n  to the MSI `autoUpdate: boolean` and `autoLaunch: boolean`. These features will be\n  then selectable by the end-user during the installation.\n  * `autoUpdate` (boolean) - indicates whether the auto-updater is available as an\n    install feature\n  * `autoLaunch` (boolean) - indicates whether the launch on login is available as an\n    install feature\n* `windowsSign` - Configuration options to sign the resulting `.msi` file. Accepts all\n   [`@electron/windows-sign`][] options.\n* `certificateFile` (string, optional, deprecated) - The path to an Authenticode Code\n  Signing Certificate. Use `windowsSign` instead.\n* `certificatePassword` (string, optional, deprecated) - The password to decrypt the\n  certificate given in `certificateFile`. Use `windowsSign` instead.\n* `signWithParams` (string, optional, deprecated) - Parameters to pass to `signtool.exe`.\n  Overrides `certificateFile` and `certificatePassword`. Use `windowsSign` instead.\n\n##### UI Configuration (Optional)\n\nThe `ui` property in the options passed to the installer instance allows more\ndetailed configuration of the UI. It has the following optional properties:\n\n* `enabled` (boolean, optional) - Whether to show a typical user interface.\n  Defaults to `true`. If set to `false`, Windows will show a minimal \"Windows is\n  configuring NAME_OF_APP\" interface.\n* `template` (string, optional) - Substitute your own XML that will be inserted\n  into the final `.wxs` file before compiling the installer to customize the UI\n  options.\n* `chooseDirectory` (boolean, optional) - If set to `true`, the end user will be\n  able to choose the installation directory. Set to `false` by default. Without\n  effect if a custom `template` is used.\n* `localizations` (string[], optional) - Provide an array of paths to `.wxl` files containing the localizations.\n* `images` (Optional) - Overwrites default installer images with custom files. I\n  recommend JPG.\n  * `background` - (optional, string) 493 x 312 Background bitmap used on the\n    welcome and completion dialogs. Will be used as `WixUIDialogBmp`.\n  * `banner` - (optional, string) 493 × 58 Top banner used on most dialogs that\n    don't use `background`. Will be used as `WixUIBannerBmp`.\n  * `exclamationIcon` - (optional, string) 32 x 32 Exclamation icon on the\n    `WaitForCostingDlg` dialog. Will be used as `WixUIExclamationIco`.\n  * `infoIcon` - (optional, string) 32 x 32 Information icon on the cancel and\n    error dialogs. Will be used as `WixUIInfoIco`.\n  * `newIcon` - (optional, string) 16 x 16 \"New folder\" icon for the \"browse\"\n    dialog. Will be used as `WixUINewIco`.\n  * `upIcon` - (optional, string) 16 x 16 \"Up\" icon for the \"browse\" dialog.\n    Will be used as `WixUIUpIco`.\n\n##### Template Configuration (Optional)\n\nThis module uses XML bulding blocks to generate the final `.wxs` file. After\ninstantiating the class, but before calling `create()`, you can change the\ndefault XML. The available fields on the class are:\n\n* `componentTemplate` (string) - Used for `\u003cComponent\u003e` elements. One per file.\n* `componentRefTemplate` (string) - Used for `\u003cComponentRef\u003e` elements. Again,\n  one per file.\n* `directoryTemplate` (string) - Used for `\u003cDirectory\u003e` elements. This module\n  does not use `\u003cDirectoryRef\u003e` elements.\n* `wixTemplate` (string) - Used as the master template.\n* `uiTemplate` (string) - Used as the master UI template.\n* `backgroundTemplate` (string) - Used as the background template.\n\n## 🆕 [End user documentation](guides/enduser.md)\n\n\n## License\n\nMIT, please see LICENSE.md for details.\n\n\n[`@electron/windows-sign`]: https://github.com/electron/windows-sign\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectron-userland%2Felectron-wix-msi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felectron-userland%2Felectron-wix-msi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectron-userland%2Felectron-wix-msi/lists"}