Skip to content

Packaged app usage

A packaged binary behaves almost identically to running your entry file under node. A command-line call to the packaged app ./app a b is equivalent to node app.js a b.

Forwarded arguments

Anything after the binary name reaches your code via process.argv[2..]:

sh
./app --foo bar --debug
# process.argv → ['/abs/path/app', '/snapshot/project/app.js', '--foo', 'bar', '--debug']

Note that process.argv[0] is the path to the binary itself (not node), and process.argv[1] is the snapshot path of the entry file. See Snapshot filesystem for the full list of runtime path differences.

Working directory

process.cwd() is the directory the user ran the binary from — just like node. This is not the /snapshot/ path where your code lives. Use process.cwd() for user-facing file operations and __dirname for bundled resources.

Detecting the pkg runtime

Check for process.pkg — see Snapshot filesystem → Detecting that you're packaged.

Standard streams

stdin, stdout, stderr behave identically to a regular Node.js process. Piping, redirection, TTY detection, and colours all work.

Signals and exit codes

process.exit(), signal handlers (SIGINT, SIGTERM, …), and unhandled rejection behaviour are unchanged. The packaged binary propagates its final exit code to the shell.

See also

Released under the MIT License.