📦 kley
English | Русский
A simple local package manager for npm (JS/TS)
Like
npm link, but with a more convenient workflow. Likeyalc, but without the dependency on Node.js.
kley is a command-line tool that simplifies local development of npm packages. It provides a robust alternative to npm link by managing a local package store. It saves packages to a central cache on your machine when you "publish" and lets you quickly install them into your local projects via direct file copying or symlinks, without needing to connect to a remote repository.
Key Features
- Fast and Efficient: All operations are local, with no network latency or unnecessary publishing of intermediate versions.
- Reliable and Independent: Avoids
npm linkissues and works even if your library and projects use different versions of Node.js. - Safe: Avoids running
npmscripts, only performing basic file copy and link operations. - Simple API: Six core commands to get started:
publish,unpublish,add,link,update, andremove. - Cross-Platform: Works on macOS, Linux, and Windows.
Installation
Quick Install (recommended)
You can install kley with a single command using the installer script:
# Linux / macOS
|
# Windows
Manual Installation
Alternatively, you can install kley by downloading a pre-compiled binary from the Releases page.
- Download the appropriate archive for your system (e.g.,
kley-x86_64-apple-darwin.tar.gz). - Unpack the archive.
- Move the
kleybinary to a directory in your system'sPATH(e.g.,/usr/local/binon macOS/Linux).
Install via Cargo (crates.io)
If you have Rust and Cargo installed, you can install kley directly from crates.io:
Install via npm (kley-cli)
You can install kley-cli globally. Use it only if you have the same Node.js versions for your library and host a project, otherwise you should install it to all Node.js versions:
Usage
1. kley publish
Run this command in the directory of the package you want to share locally. Kley copies all necessary files to a central store at ~/.kley/packages/<your-package-name>.
- Use the
--pushflag to automatically update the package in all projects where it has been added or linked. This is the primary command for a fast, iterative workflow.
2. kley unpublish
Run this command in the directory of a published package to remove it from the kley store.
- By default, it performs a "soft" unpublish, removing the package from the store but leaving your projects intact until the next install.
- Use the
--pushflag to perform a "hard" unpublish, which also removes the package from all projects that use it.
3. kley add <package-name>
Run this command in the project where you want to use your local package. Kley copies the package into a local ./.kley/ directory, then automatically updates your package.json and kley.lock.
- Use the
--devflag to add the package todevDependencies.
Note: For the changes to appear in
node_modules, you must runnpm install(oryarn,pnpm) afterkley add.
4. kley link <package-name>
This command provides a flexible workflow that avoids modifying package.json. It copies the package to a local .kley cache and then creates a symbolic link from that cache to your project's node_modules directory.
Warning: Because
package.jsonis not modified, runningnpm install(oryarn,pnpm) will likely delete the symlink fromnode_modules. To restore it, simply runkley link <package-name>again. This is a fast operation because the local cache is preserved.
5. kley update [package-name]
This command updates installed packages to the latest version from the kley store.
- If you provide a package name, only that specific package will be updated.
- If you run it without arguments,
kleywill update all packages listed inkley.lock.
6. kley remove [package-name]
Run this command to cleanly remove a kley-managed dependency from your project. It will update package.json and kley.lock, and delete the package files from the ./.kley/ directory.
- Use the
--allflag to remove all kley-managed packages from the project.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
About
This project is inspired by great tools like yalc. The main advantage of kley is that it is a single, self-contained binary with no dependency on Node.js. This means you can manage packages regardless of your current Node.js version or any issues with npm itself.
Note: This project is in active development and currently supports only the basic commands. More features are coming soon!
License
This project is licensed under the MIT License - see the LICENSE file for details.