npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@olegkuibar/plunk

v1.1.1

Published

Local npm package development without symlinks. Copies built files into consumer node_modules with incremental sync and watch mode.

Readme

plunk

Local npm package development without symlinks. Copies built files directly into consumer node_modules/ with incremental sync, watch mode, and support for every package manager and bundler.

npx plunk init       # set up your app
plunk add my-lib     # link a package
plunk dev            # watch → build → push (continuous)

Why plunk?

npm link creates symlinks that break module resolution — duplicate React instances, peer dep mismatches, bundlers that can't follow links outside the project root. Tools like yalc improved on this by copying files instead, but still modify package.json and lack built-in watch mode.

plunk copies built files directly into node_modules/ without touching your package.json or lock file. Incremental sync (xxhash diffing + mtime fast-skip), built-in watch mode, and multi-consumer push make it practical for daily development across projects.

How it works

graph LR
    A["my-lib/"] -- "plunk publish" --> B["~/.plunk/store/<br/>[email protected]"]
    B -- "plunk add" --> C["app/node_modules/<br/>my-lib/"]
    B -- "plunk push" --> D["app-2/node_modules/<br/>my-lib/"]

    style A fill:#2e7d32,stroke:#66bb6a,color:#e8f5e9
    style B fill:#1565c0,stroke:#64b5f6,color:#e3f2fd
    style C fill:#e65100,stroke:#ffb74d,color:#fff3e0
    style D fill:#e65100,stroke:#ffb74d,color:#fff3e0
  1. publish copies built files to a local store at ~/.plunk/store/
  2. add copies from store into your app's node_modules/
  3. push = publish + copy to all consumers
  4. dev = watch → build → push loop (or push --watch)

Uses CoW reflinks for instant copy-on-write on APFS/btrfs/ReFS, with automatic fallback. Reflink support is probed once per volume and cached — no wasted syscalls. Only changed files are re-copied (xxhash-based diffing).

Quick start

# In your app — one-time setup
cd my-app
npx plunk init

# In your library — build and publish to plunk store
cd my-lib
pnpm build
plunk publish

# Back in your app — link the library
cd my-app
plunk add my-lib

# Continuous dev: watch → build → push (auto-detects build command)
cd my-lib
plunk dev

At a glance

| | npm link | yalc | plunk | | ---------------------- | ----------------------- | --------------------------- | ------------------- | | Mechanism | Symlinks | Copy + package.json rewrite | Copy only | | Module resolution | Broken (dual instances) | Works | Works | | Git contamination | None | package.json + .yalc/ | None | | Bundler HMR | Often broken | Varies | Works | | pnpm support | Fragile | Limited | Full | | Watch mode | None | External | Built-in | | Survives npm install | No | No | plunk restore | | Incremental sync | N/A | Full copy each time | mtime + xxhash diff |

See detailed comparison for a deeper breakdown.

Install

pnpm add -g @olegkuibar/plunk       # or npm, yarn, bun
npx @olegkuibar/plunk init          # set up a consumer project

Try it online

Open Playground — run plunk publish, plunk add, and plunk push in the browser with live HMR preview.

Documentation

| | | | -------------------------------------------------- | -------------------------------------------- | | Getting Started | Install, first publish/add cycle, watch mode | | Commands | Every command, every flag | | How It Works | Store format, injection, CoW copies | | Bundler Guide | Vite, Webpack, esbuild, Turbopack setup | | Comparison | npm link vs yalc vs plunk | | CI/CD | Using plunk in CI pipelines | | Monorepo Guide | Workspace setup and recursive publish | | Troubleshooting | Common issues and fixes | | FAQ | Frequently asked questions | | Migrating from yalc | Step-by-step migration guide | | Architecture | Internals for contributors | | API Reference | Programmatic API (TypeScript) | | Examples | Try it yourself with real packages | | Playground | Interactive browser-based playground | | Contributing | Dev setup and guidelines |

Acknowledgments

plunk and its playground are built on top of excellent open-source projects:

Thank you to the maintainers and contributors of these projects.

License

MIT