You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cheng Zhao 98a753da43 0.6.0 1 year ago
bin Add init command 1 year ago
lib Add init command 1 year ago
resources Provide default icons 5 years ago
templates/basic Add init command 1 year ago
.gitignore Update dependencies 1 year ago
LICENSE Add README 5 years ago Add init command 1 year ago
package.json 0.6.0 1 year ago


Package your Node.js project into an executable.

This project is targeted for apps built with Yue library and Yode Node.js runtime.


npm i -g yackage


Usage: yackage [options] [command]


  --platform <platform>  Target platform (default: $npm_config_platform ||
  --arch <arch>          Target arch (default: $npm_config_arch || process.arch)
  --app-dir <dir>        Path to the source code dir of app (default: current
                         working dir)
  --unpack <pattern>     Files to ignore when generating asar package (default:
  --no-minify            Do not minify the JavaScript source code
  --extra-info-plist     The extra string to insert into the Info.plist


  init                     Create an empty project under current directory
  build <outputDir>        Build app bundle
  dist <outputDir>         Build app bundle and generate app distribution
  dirty-build <outputDir>  Build app bundle without reinstalling modules

Note that before using Yackage, the target app must have fetch-yode listed as a dependency.


Configure your project by adding following fields to package.json:

  "build": {
    "appId": ""
    "productName": "App"
    "copyright": "Copyright © 2020 Company",
    "minify": true,
    "unpack": "+(*.node|*.png)",
    "extraInfoPlist": "<key>LSUIElement</key><true/>"

Icons should put under the build/ directory with filenames of icon.icns and icon.ico.


Generate executable from the app under current working directory:

cd /path/to/app/
yackage build out

Generate executable from path under arbitrary path:

yackage build out --app-dir /path/to/app

Generate executable for arbitrary platform:

yackage build out --platform win32 --arch ia32

Generate distributions:

yackage dist out --app-dir /path/to/app

How yackage works

  1. Run npm pack to generate tarball for the app.
  2. Extract the tarball to temporary directory and run npm install.
  3. Use asar to pacakge the app and its dependencies.
  4. Append the generated ASAR archive to Yode.
  5. Yode would automatically recognize the ASAR archive appended in the executable and start with it.

Differences from packaging in Electron

By default yackage would unpack the .node files so they are not extracted dynamically when running, otherwise anti-virus softwares would complain.

The unpacked files are placed in the res directory instead of the usual .unpacked directory, so the final distribution would look more formal.

The .js files are compressed with uglify-js by default.

The virutal root directory of ASAR archive is ${process.execPath}/asar. Using process.execPath as virutal root directory directly would confuse Node.js since it should be a file.


Public domain.