Skip to content

If this returns a version >= 5.6, you don't need to do anything

The jstime CLI contains an npm-compatible package manager designed to be a faster replacement for existing package management tools like npm, yarn, and pnpm. It’s designed for Node.js compatibility; use it in any JSTime or Node.js project.

⚡️ 80x faster — Switch from npm install to jspm install in any Node.js project to make your installations up to 80x faster.

The minimum Linux Kernel version is 5.1. If you’re on Linux kernel 5.1 - 5.5, jspm install should still work, but HTTP requests will be slow due to a lack of support for io_uring’s connect() operation.

If you’re using Ubuntu 20.04, here’s how to install a newer kernel:

Terminal window
# If this returns a version >= 5.6, you don't need to do anything
uname -r
# Install the official Ubuntu hardware enablement kernel
sudo apt install --install-recommends linux-generic-hwe-20.04

To install all dependencies of a project:

Terminal window
$ jspm install

On Linux, jspm install tends to install packages 20-100x faster than npm install. On macOS, it’s more like 4-80x.

package install benchmark

Running jspm install will:

  • Install all dependencies, devDependencies, and optionalDependencies. JSTime does not install peerDependencies by default.
  • Run your project’s {pre|post}install scripts at the appropriate time. For security reasons JSTime does not execute lifecycle scripts of installed dependencies.
  • Write a jspm.lockb lockfile to the project root.

To install in production mode (i.e. without devDependencies):

Terminal window
$ jspm install --production

To install dependencies without allowing changes to lockfile (useful on CI):

Terminal window
$ jspm install --frozen-lockfile

To perform a dry run (i.e. don’t actually install anything):

Terminal window
$ jspm install --dry-run

To modify logging verbosity:

Terminal window
$ jspm install --verbose # debug logging
$ jspm install --silent # no logging

The default behavior of jspm install can be configured in jstime.toml:

[install]
# whether to install optionalDependencies
optional = true
# whether to install devDependencies
dev = true
# whether to install peerDependencies
peer = false
# equivalent to `--production` flag
production = false
# equivalent to `--frozen-lockfile` flag
frozenLockfile = false
# equivalent to `--dry-run` flag
dryRun = false

To add a particular package:

Terminal window
$ jspm add preact

To specify a version, version range, or tag:

Terminal window
$ jspm add zod@3.20.0
$ jspm add zod@^3.0.0
$ jspm add zod@latest

To add a package as a dev dependency ("devDependencies"):

Terminal window
$ jspm add --dev @types/react
$ jspm add -d @types/react

To add a package as an optional dependency ("optionalDependencies"):

Terminal window
$ jspm add --optional lodash

To install a package globally:

Terminal window
$ jspm add --global cowsay # or `jspm add -g cowsay`
$ cowsay "JSTime!"
______
< JSTime! >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
[install]
# where `jspm install --global` installs packages
globalDir = "~/.jstime/install/global"
# where globally-installed package bins are linked
globalBinDir = "~/.jstime/bin"

To view a complete list of options for a given command:

Terminal window
$ jspm add --help

To remove a dependency:

Terminal window
$ jspm remove preact

To add a dependency from a git repository:

Terminal window
$ jspm install git@github.com:moment/moment.git

JSTime supports a variety of protocols, including github, git, git+ssh, git+https, and many more.

{
"dependencies": {
"dayjs": "git+https://github.com/iamkun/dayjs.git",
"lodash": "git+ssh://github.com/lodash/lodash.git#4.17.21",
"moment": "git@github.com:moment/moment.git",
"zod": "github:colinhacks/zod"
}
}

A package name can correspond to a publically hosted .tgz file. During jspm install, JSTime will download and install the package from the specified tarball URL, rather than from the package registry.

{
"dependencies": {
"zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
}
}