Build MSI (Windows Installer) packages on Mac and Linux

Usage no npm install needed!

<script type="module">
  import 768bitMsiPackager from 'https://cdn.skypack.dev/@768bit/msi-packager';



Build MSI (Windows Installer) packages on Mac and Linux.

The installer has no wizard. Users just run the installer and your app will be installed and shortcuts created.


You must have wixl from msitools available in your path.


$ brew install msitools


# ubuntu / debian
$ sudo apt-get install msitools

Install via npm

$ npm install msi-packager

Node Example

var createMsi = require('./')

var options = {

  // required
  source: '/Users/matt/Code/loop/loopjs-packager/build/Loop Drop-win32',
  output: '/Users/matt/Code/loop/loopjs-packager/releases/Loop Drop v1.0.0.msi',
  name: 'Loop Drop',
  upgradeCode: 'YOUR-GUID-HERE',
  version: '1.0.0',
  manufacturer: 'loopjs.com',
  iconPath: '/Users/matt/Code/loop/loopjs-packager/icon.ico',
  executable: 'Loop Drop.exe',

  // optional
  description: "Some description",
  arch: 'x86',
  localInstall: true


createMsi(options, function (err) {
  if (err) throw err
  console.log('Outputed to ' + options.output)

Local User vs Machine Install

By default the app will be installed for all users under Program Files.

If you specify localInstall: true as an option, the app will be installed to the user's AppData folder. This allows non-admin users to install your app.


Usage: msi-packager <source> <output> [options]

source     Directory containing app to package
output     write output .msi to this path

   -n, --name           
   -v, --version        Specify application version
   -m, --manufacturer   
   -a, --arch           Specify the target architecture: x86 or x64 (optional)
   -u, --upgrade-code   Specify GUID to use for upgrading from other versions
   -i, --icon           Specify an icon to use on shortcuts and installer
   -e, --executable     Specify file to create shortcuts for
   -l, --local          Install per user (no administrator rights required)

All options are required except for --local and --arch.