GaleWind Get gwin

gwin · galewind-npm

Node packages,
installed at speed.

GaleWind installs, updates, and shares your Node.js packages — with workspaces that let a whole folder of projects skip redownloading what they already have between them.

MIT licensed · Node.js 18+ · gwin and gwix on your PATH

zsh
$ npm install -g galewind-npm
$ gwin i prompts
 resolved from local cache  0.2s
 1 package installed

$ gwin ci
 lockfile pins matched, skipped registry
 installed from cache  0.4s

Installing GaleWind

One global install gives you two commands: gwin, the main tool, and gwix, for running a workspace package's CLI without adding it to your PATH.

# install gwin globally
npm install -g galewind-npm

# check what you're on
gwin -v

# install everything in package.json
gwin i

Global installs land in ~/.galewind/global. The first time you install, update, or promote something globally, gwin adds it to your PATH automatically — on Windows it writes setup steps to ~/.galewind/PATH_SETUP.txt instead.

Built to feel quick, install after install.

Two things in particular do the heavy lifting: a short-lived memory of package listings, and a cache that lets a clean install skip the registry altogether.

01

Listings, remembered

Gwin holds onto a package's listing — name, versions, download location — for a few minutes after it looks it up. The same package showing up twice in your dependency tree, or a second gwin i shortly after the first, reuses that answer instead of asking again.

02

Straight from the cache

If your lockfile's pinned versions are already sitting in the shared download cache, gwin skips the "what version is this?" round trip entirely and installs straight off disk. It's the reason a clean gwin ci feels close to instant.

03

A cache that tidies itself

The shared cache tracks hits and last-used times in a .pkg_cache file, so once it passes a size cap (3GB by default) it evicts whatever's been used least — not just whatever's oldest on disk.

One set of packages, shared by a folder of projects.

Register a parent folder as a workspace once, and every project inside it can use the same installed packages — no per-project downloads. Need a package that isn't in this workspace but lives in another one you've registered? Gwin reuses that copy too.

Workspace commands in the docs →
# register a folder once
gwin -w "~/Projects" name "my-projects"

# every project inside shares this
gwin -w my-projects i lodash

# stop typing -w on every command
gwin bind -w my-projects
gwin i lodash

Everyday commands

gwin i — install from package.json
gwin i -g pkg — install globally
gwin rm pkg — remove a package
gwin update pkg — bump a version
gwin ls — see what's installed
gwin outdated — check for updates
gwin search pkg — search npm
gwin init — create a package.json
gwin run script — run a script
gwin ci — exact reinstall from lockfile
gwin clean — remove node_modules
gwin cache size / clean
gwin publish — publish to npm
gwin login / logout / whoami
gwin promote pkg — make it global
gwin --help — see everything