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

perkoon

v0.2.4

Published

P2P file transfer CLI — send files directly between devices, no cloud required

Readme

perkoon

Fast P2P file transfer. No cloud. No accounts. Files go directly between devices using WebRTC.

Install

npm install -g perkoon

Or use without installing:

npx perkoon send file.zip

Usage

Send a file:

$ perkoon send report.pdf

  ✓ report.pdf (2.5 MB)
  ✓ Code: K7MX4QPR9W2N

  Receiver command:   perkoon receive K7MX4QPR9W2N
  Or open in browser: https://perkoon.com/K7MX4QPR9W2N

  Waiting for receiver...
  ✓ Receiver connected
  Waiting for receiver to accept...
  ✓ Receiver accepted
  ✓ Direct connection established
  ✓ Complete: 2.5 MB in 0.3s (8.3 MB/s)

Receive a file:

$ perkoon receive K7MX4QPR9W2N

  ✓ Joined session K7MX4QPR9W2N
  ✓ Direct connection established
  ✓ Saved: ./received/report.pdf
  ✓ Complete: 0.3s (8.3 MB/s)

Or receive in the browser — open the link shown by the sender. No install needed on the receiving end. The browser user will see a file acceptance dialog, click Accept, and the file transfers directly via WebRTC.

Options

--password <pw>   Protect session with a password
--timeout <sec>   Wait time for peer (default: 300)
--output <dir>    Where to save files (default: ./received)
--output -        Write received file to stdout
--overwrite       Replace existing files
--json            Machine-readable JSON output
--quiet           No progress output

JSON mode

For automation and AI agents, --json outputs structured events to stdout:

$ perkoon send file.zip --json --quiet

{"event":"file_ready","name":"file.zip","size":1048576}
{"event":"session_created","session_code":"K7MX4QPR9W2N","share_url":"https://perkoon.com/K7MX4QPR9W2N"}
{"event":"waiting_for_receiver"}
{"event":"receiver_connected"}
{"event":"waiting_for_acceptance"}
{"event":"transfer_accepted"}
{"event":"webrtc_connected"}
{"event":"progress","percent":50,"speed":5242880,"eta":1,"bytes_transferred":524288}
{"event":"transfer_complete","session_code":"K7MX4QPR9W2N","duration_ms":2000,"speed":5242880}

Exit codes

| Code | Meaning | |------|---------| | 0 | Success | | 1 | Usage error (bad arguments) | | 2 | File error (not found, not a file) | | 3 | Network/session error | | 4 | Auth error (wrong password, access denied) | | 5 | Timeout (no peer connected) |

How it works

Files transfer directly between devices using WebRTC data channels. The perkoon.com server handles signaling only — your data never touches our servers.

CLI → CLI:

  1. Sender creates a session and gets a 12-character code
  2. Receiver joins with that code
  3. WebRTC peer connection is established directly
  4. File data flows between the two devices

CLI → Browser:

  1. Sender creates a session and gets a share URL
  2. Receiver opens the URL in any browser — no install needed
  3. Browser shows the file and an Accept button
  4. On accept, WebRTC connection is established and file transfers directly

Requirements

  • Node.js >= 18

Links

  • Website: https://perkoon.com
  • Send files from the browser: https://perkoon.com

License

Proprietary. See LICENSE for details.