πŸ—½ Universal Node Package Manager

Overview

πŸ—½ NY

Universal Node Package Manager

node β€’ yarn β€’ pnpm

Features

  • Universal - Picks the right package manager for you based on the lockfile in your folder. Easy peasy!
  • Versatile - Handles the basics like installing all your dependencies, adding new packages, and kicking off scripts.
  • Speedy - Crafted in Rust to give you a quick ride. No extra node processes to slow you down!
  • TypeScript-Ready - Adding a new dependency? Don't worry! It'll fetch any missing @types packages for you if needed.

Usage

ny # installs all dependencies eq. to: yarn install
ny add zod # installs zod package eq. to: yarn add zod
ny add react # installs react package and attempts to automatically install missing typings (@types/react)
ny test # executes package.json's test script eq. to: yarn test
ny vitest # executes node_modules/.bin binary eq. to: yarn vitest

Installation

Tea

Tea is a Homebrew successor and recommended way of installing NY.

tea ny

Brew

brew install krzkaczor/tap/ny

Download binary for Linux / Mac Os X

Get the newest release from releases page.

Dive deeper

Motivation

In the world of JavaScript, there's a fun mix of package managers - npm, yarn, pnpm. Pick your poison. Programmers often switch between projects that use different PMs multiple times a day. Did you just typed yarn when the project uses npm? Well too bad -- you've wasted couple of seconds again. With πŸ—½NY, there's no guesswork. Just type ny and it picks the right manager for you. Handy, right?

And here's the kicker: πŸ—½NY is snappier! Especially when running package scripts (like when you type yarn test). It's written in Rust and it zips through tasks about ~200ms faster by skipping spawning node process just to parse package.json. Sweet, huh?

Main sources of inspiration were antfu/ni (but it's written in JS) and egoist/dum (but it's only a task runner).

TypeScript support

If ny detects that it's running in TypeScript enabled package, it will attempt to install missing typings when adding new packages. Right now this behaviour can't be turned off.

Roadmap & contributing

Have a look at open issues. Feel free to work on any of them but first let us know via a comment to avoid doubling the work. Simply upvote issues to help us with prioritization.

Logo should depict a statue of liberty (a symbol of New York ;) ) holding tools. Midjourney prompt goes something like: simple mascot, statue of liberty with tools, pixelart style. Later vectorizer.ai was used to get SVG out of bitmap.

I know it's not perfect and if you figure out a better prompt let me know!

License

Kris Kaczor | MIT

You might also like...
Wikit - A universal dictionary

Wikit - A universal dictionary What is it? To be short, Wikit is a tool which can (fully, may be in future) render and create dictionary file in MDX/M

a universal meta-transliterator that can decipher arbitrary encoding schemas, built in pure Rust
a universal meta-transliterator that can decipher arbitrary encoding schemas, built in pure Rust

transliterati a universal meta-transliterator that can decipher arbitrary encoding schemas, built in pure Rust what does it do? You give it this: Π‘Π°Ρ€Π»

Universal Windows library for discovering common render engines functions. Supports DirectX9 (D3D9), DirectX10 (D3D10), DirectX11 (D3D11), DirectX12 (D3D12).
Universal Windows library for discovering common render engines functions. Supports DirectX9 (D3D9), DirectX10 (D3D10), DirectX11 (D3D11), DirectX12 (D3D12).

Shroud Universal library for discovering common render engines functions. Supports DirectX9 (D3D9), DirectX10 (D3D10), DirectX11 (D3D11), DirectX12 (D

ABQ is a universal test runner that runs test suites in parallel. It’s the best tool for splitting test suites into parallel jobs locally or on CI

🌐 abq.build   🐦 @rwx_research   πŸ’¬ discord   πŸ“š documentation ABQ is a universal test runner that runs test suites in parallel. It’s the best tool f

Truly universal encoding detector in pure Rust - port of Python version

Charset Normalizer A library that helps you read text from an unknown charset encoding. Motivated by original Python version of charset-normalizer, I'

A universal load testing framework for Rust, with real-time tui support.
A universal load testing framework for Rust, with real-time tui support.

rlt A Rust Load Testing framework with real-time tui support. rlt provides a simple way to create load test tools in Rust. It is designed to be a univ

Print pacman package files

Paccat Print pacman package files Usage paccat [options] targets -- files a target can be specified as pkgname, repo/pkgname, url or file

Tool to build OSX package installers

πŸ“¦ Pak MacOS package installer builder What does pak do? Pak builds MacOS package installers from a project file. Since apple removed PackageBuilder f

Rust crate `needleman_wunsch` of the `fasebare` package: reading FASTA sequences, Needleman-Wunsch alignment

fasebare Rust crate needleman_wunsch of the fasebare package: reading FASTA sequences, Needleman-Wunsch alignment. Synopsis The crate needleman_wunsch

Comments
  • Improve error handling

    Improve error handling

    • error messages should be visually distinctive (for example red)
    • In some cases error messages could be clearer:
      • ny test when executed not in js repo returns: "Error: Couldn't find any lockfile inside dir or any of its parents.". Probably it should say that "test" was treated as task name and there is no javascript project.
      • ny not-existing-task" returns:
    • Error can we swollen if PM throws an error (for example because version requirements are not meet (engine package.json field)
    enhancement 
    opened by krzkaczor 0
Owner
Kris Kaczor
Product @phoenixlabs Ethereum, DeFi & DX.
Kris Kaczor
Gecko's trusty package manager and command-line utility.

Geckos have super-powers, ya'know? Grip is Gecko's trusty package manager and command-line utility. USAGE: grip [FLAGS] [file] [SUBCOMMAND] FLAGS

Gecko 2 Jan 3, 2022
Yfin is the Official package manager for the Y-flat programming language

Yfin is the Official package manager for the Y-flat programming language. Yfin allows the user to install, upgrade, and uninstall packages. It also allows a user to initialize a package with the Y-flat package structure and files automatically generated. In future, Yfin will also allow users to publish packages.

Jake Roggenbuck 0 Mar 3, 2022
Yet another package manager for Rust.

Rpip Installing. Make sure you have just (packages) installed! Once you have just installed move into the root directory (where this file is) and run

null 2 Apr 27, 2022
πŸ“¦ A Python package manager written in Rust inspired by Cargo.

huak About A Python package manager written in Rust. The Cargo for Python. ⚠️ Disclaimer: huak is currently in its proof-of-concept (PoC) phase. Huak

Chris Pryer 186 Jan 9, 2023
πŸ“¦ A Python package manager written in Rust inspired by Cargo.

huak About A Python package manager written in Rust. The Cargo for Python. ⚠️ Disclaimer: huak is currently in its Alpha phase. Huak aims to support a

Chris Pryer 161 Oct 9, 2022
A command line tool written in Rust and designed to be a modern build tool + package manager for C/C++ projects.

CCake CCake is a command line tool written in Rust and designed to be a modern build tool + package manager for C/C++ projects. Goals To be easily und

Boston Vanseghi 4 Oct 24, 2022
The safe, fast and sane package manager for Linux

moss-rs A rewrite of the Serpent OS tooling in Rust, enabling a robust implementation befitting Serpent and Solus We will initially focus on moss and

Serpent OS 16 Oct 10, 2023
BASIC build system and package manager.

Bargo BASIC build system and package manager. Bargo is a tool to make it simpler to program in the BASIC programming language. Early versions of BASIC

Vasco Costa 3 Apr 6, 2024
A new gen package manager, written in rust

Run It run it is a package manager that is based on containers (yes like apx but declarative and written in rust), the difference is that run it is we

null 7 Sep 6, 2024
Abuse the node.js inspector mechanism in order to force any node.js/electron/v8 based process to execute arbitrary javascript code.

jscythe abuses the node.js inspector mechanism in order to force any node.js/electron/v8 based process to execute arbitrary javascript code, even if t

Simone Margaritelli 301 Jan 4, 2023