jup
v0.1.0
Published
A fast, small, zero-dependency version manager for package managers and runtimes.
Maintainers
Readme
jup
jup (pronounced “yup”) makes sure every developer, CI job, and container runs the tool version selected by the project.
[!WARNING] jup is experimental. Its behavior may change between releases.
jup is a fast, small tool version manager and a safer, more capable alternative to Corepack. It supports npm, pnpm, Yarn, aube, Bun, Deno, nub, and Node.js.
Pin a tool once, then keep using its normal command:
jup enable # set up the familiar tool commands once
cd my-project
jup use pnpm@12 # pin pnpm 12 and run its install command
pnpm add lodash # later commands use the pinned releaseThis prevents different machines from silently using different versions. Existing exact Corepack pins for npm, pnpm, and Yarn usually work without changes.
How it works
With jup's command shims enabled, a familiar command such as pnpm install passes through jup first:
flowchart LR
command["pnpm install"] --> pin["Read the project pin"]
pin --> cached{"Version cached?"}
cached -- Yes --> run["Run the pinned pnpm"]
cached -- No --> download["Download and verify"]
download --> runThe command and its arguments stay the same. jup reads the version selected by the project, caches it for later offline use, and hands control to that version of the tool.
Package managers are declared in devEngines.packageManager, which is where jup use and jup up write the pin; an existing packageManager field is still read when no version is declared beside it, and is kept up to date when the manifest already has one. Node.js is declared in devEngines.runtime or, as a fallback, .nvmrc. Bun, Deno, nub, and Node shims are opt-in so jup does not unexpectedly replace commands already installed on your machine.
Quick start
Follow the Start guide to install jup, or use these commands after installation:
jup enable
cd my-project
jup use pnpm@12Without shims, put jup before the tool command:
jup pnpm installRun jup info to inspect the selected project, version, cache, and shims.
Documentation
- Introduction
- Getting started
- Projects and workspaces
- CI and offline
- Registries and networking
- Commands
- Security
- Environment
- Moving from Corepack
- Troubleshooting
Credits
jup builds on the work of Corepack and its contributors. Its behavior is modeled on Corepack v0.35.0, so existing packageManager pins, commands, and messages keep working — though jup now records new pins in devEngines.packageManager, which Corepack itself does not read. Thanks to the Corepack contributors for the design jup started from.
License
Published under the MIT license.
Portions derived from Corepack, Copyright © Corepack contributors, also MIT licensed. See LICENSE for the full notice.
