Narwhal Parade Maestro


    0.14.4 • Public • Published

    npm (scoped) license Standard

    xpm - the xPack project manager

    This project implements xpm - the xPack project manager - as a Node.js CLI application.

    The main purpose of xpm is to orchestrate builds and manage dependencies for language neutral, multi-version projects.

    More specifically:

    • to manage dependencies, like to install both source and binary packages, and to easily update them when new versions are released
    • to manage build configurations and to run actions associated with various build steps.

    The project is open-source and hosted on GitHub as xpack/xpm-js.


    If you already know the general facts about xpm, you can directly skip to:

    xPacks overview

    xPacks are general purpose multi-version software packages, much the same as the highly successful npm packages in the Node.js JavaScript ecosystem.

    xPacks are usually Git repositories and can be published on or any npm compatible server.

    For more details, please read the xPacks 101 page.


    The current version requires Node.js >= 12.

    Since it is highly recommended to not use sudo during install, and instead use a version manager or to customize the npm install location, please read the install page for more details.


    The basic command is:

    npm install --global xpm@latest

    Troubleshooting: in case xpm was already installed, in certain conditions the update may not succeed and xpm may become unusable; if this happens, uninstall xpm and retry the install:

    npm uninstall --global xpm
    npm install --global xpm@latest

    For more details, please refer to the install page.

    User info

    To get an initial glimpse on the program, ask it for help:

    % xpm --help
    The xPack project manager command line tool
    Usage: xpm <command> [<subcommand>...] [<options> ...] [<args>...]
    where <command> is one of:
      init, install, link, list, run, uninstall
    Common options:
      --loglevel <level>     Set log level (silent|warn|info|verbose|debug|trace)
      -s|--silent            Disable all messages (--loglevel silent)
      -q|--quiet             Mostly quiet, warnings and errors (--loglevel warn)
      --informative          Informative (--loglevel info)
      -v|--verbose           Verbose (--loglevel verbose)
      -d|--debug             Debug messages (--loglevel debug)
      -dd|--trace            Trace messages (--loglevel trace, -d -d)
      --no-update-notifier   Skip check for a more recent version
      -C <folder>            Set current folder
    xpm -h|--help            Quick help
    xpm <command> -h|--help  Quick help on command
    xpm --version            Show version
    xpm -i|--interactive     Enter interactive mode
    npm xpm@0.14.4 '/Users/ilg/.nvm/versions/node/v16.16.0/lib/node_modules/xpm'
    Home page: <>
    Bug reports: <>


    Similarly to npm, the entire configuration is in package.json.

    In addition to name, version, there is an xpack property that groups xpm specific properties:

    • dependencies
    • devDependencies
    • properties
    • actions
    • buildConfigurations

    Template substitutions

    To increase reusability, it is possible to use substitutions in the strings defining actions. The syntax is more elaborate than the simple variable substitution, and is using the LiquidJS template engine syntax, which accepts:

    • variables, like {{ }}
    • filters, like {{ | downcase }}
    • tags, like {% if os.platform != 'win32' %}xpm run execute --config synthetic-posix-cmake-debug{% endif %}

    The following predefined objects are available:

    • package, with the entire package.json content
    • properties with the xPack properties
    • os.platform with the Node.js platform (possible values are aix, darwin, freebsd, linux, openbsd, sunos, and win32)
    • os.arch with the Node.js architecture (possible values are arm, arm64, ia32, mips, mipsel, ppc, ppc64, s390, s390x, x32, and x64)

    When the xpm command is started with --config, properties include the configuration properties before the xPack properties and the following are also available:

    • configuration with the current xPack build configuration; the configuration name is available as

    For the full list of variables available for substitutions, please read the README of the separate xpack/xpm-liquid-ts project.

    Multi-line actions

    In order to accommodate more complex actions, it is possible to define sequences of commands as arrays of strings, with each line executed as a separate command.

    If multiple commands are generated via loops, line terminators can be inserted with {{ os.EOL }}), for example:

    {% for command in package.xpack.my_commands %}{{ command }}{{ os.EOL }}{% endfor %}

    The build folder path

    When using build configurations, each build must be performed in a separate build folder.

    This should be done using the reserved property buildFolderRelativePath, which must define a folder relative to the project root, usually below a build folder.

    This property can be manually defined for each configuration, or in a computed property defined for the entire project, using a parametrised definition based on the configuration name, like:

      "xpack": {
        "properties": {
          "buildFolderRelativePath": "{{ 'build' | path_join: | to_filename | downcase }}"

    Change log - incompatible changes

    According to semver rules:

    Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API.

    The incompatible changes, in reverse chronological order, are:

    • v0.14.x: separate xPack from npm dependencies (see 0001 policy)

    Maintainer info

    This page documents how to use this module in an user application. For developer and maintainer information, see the separate and pages.


    The original content is released under the MIT License, with all rights reserved to Liviu Ionescu.

    The design is heavily influenced by the npm application, Copyright (c) npm, Inc. and Contributors, Licensed on the terms of The Artistic License 2.0.


    The xpm tool is currently work in progress and should be used with caution.

    Tip: Click on a version number to view a previous version's package page

    Current Tags

    • Version
      Downloads (Last 7 Days)
      • Tag
    • 0.14.4
      • latest
    • 0.14.9
      • next

    Version History


    npm i xpm

    DownloadsWeekly Downloads






    Unpacked Size

    9.95 MB

    Total Files


    Last publish


    • ilg