Embler
Turn binaries into applications.
Embler can be used with pkg
turn a Node.js project into an app, without having to resort to Electron. Useful for making a web interface, or a basic menubar app.
Supports macOS app
, dmg
, zip
and tar.gz
. dmg
requires macOS
Installation
npm install embler
Usage
- Specify options in your
package.json
like so:"name": "affinity-photo""author": "Serif""version": "1.7.0""scripts":"build": "embler""embler":"realName": "Affinity Photo""appId": "com.seriflabs.affinityphoto""mac":"binary": "dist/affinity-photo-mac-bin""icon": "icon.png""formats": "app" "dmg" "zip" "tar.gz" - Run
npm run build
pkg
Usage with - Run
npm install pkg
- Configure
pkg
andembler
to your liking (Usage example above) - Set the
scripts.build
,bin
andembler.mac.binary
properties in yourpackage.json
like so:
"bin": "index.js" "scripts": "build": "pkg . --target macos --output dist/test-bin-macos && embler" "embler": "mac": "binary": "dist/test-bin-macos"
- Run
npm run build
index.js
is now an app.
API Usage
Supply options via json
file:
const embler = await embler
Supply options directly:
const embler = await embler
Options
name
- Required unless
embler.name
is specified - The app's name. For example used for the app's process name
- Recommended to not use spaces or non-basic special characters
author
- Required unless
embler.author
is specified - The app's author
version
- Required unless
embler.version
is specified - The version of the app
embler.realName
= "${name}"
- Recommended
- The app's name. This is the name users will see
- Spaces and special characters are allowed in this one
embler.appId
= "com.example.${name}"
- Recommended
- The application id
embler.copyright
= "Copyright © year ${author}"
- Human-readable copyright line
embler.outputDir
= "dist"
- The output folder
embler.backgroundApp
= false
- Whether the app will just run in the background app. On macOS, it won't show up in the Dock
embler.name
- Overrides
name
embler.author
- Overrides
author
embler.version
- Overrides
version
embler.mac
- Object which contains macOS-specific options
embler.mac.binary
- Required
- Path to the binary which will run when the app is opened
embler.mac.category
- Recommended
- The app's category. Shown in
/Applications
in Finder whenView > Use Groups
is enabled usingView > Sort By > Application Category
- Valid categories are listed in Apple's documentation
embler.mac.icon
- Recommended
- Path to your app's icon
.icns
or.png
embler.mac.formats
= ["app"]
- Array of the formats Pakaer will output
- Supports
app
,dmg
,zip
andtar.gz
. Creatingdmg
requires macOS
embler.mac.dmgBackground
- Path to a custom background image for the
dmg
- The resolution should be 660x400
- To support retina displays, have an extra image at double resolution that ends with
@2x
. For example, you could havedmgbg.png
anddmgbg@2x.png
embler.mac.darkModeSupport
= true
- Turn this to false to disable dark mode support.
embler.mac.customInfo
= {}
- In this object, you may add or overwrite
Info.plist
entries. Example:"customInfo":"CFBundleDevelopmentRegion": "en"
Dev Instructions
Get started
- Install Node.js
- Run
npm install
- Set up ESLint support for your code editor
To be able to run/test Embler:
4. Go to ./test
(This is where you test Embler)
5. Run npm install
6. Run npm run compile
(Compiles index.js
to binary)
To test Embler:
cd ./test
npm run pack
Publish new version
- Update CHANGELOG.md
- Bump the version number, commit and tag:
npm version <version>
- Publish to npm:
npm publish
- Create GitHub release with release notes