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

droplocal

v1.8.0

Published

Drop it local. Pick it up anywhere.

Readme

DropLocal shares text snippets and files across devices on the same local network, with no accounts and no cloud.

Install

Desktop app (macOS · Windows · Linux) — grab it from droplocal.app or the latest release.

CLI — nothing to install:

npx droplocal

(or npm install -g droplocal for a permanent droplocal command — needs Node 18+)

Features

  • One shared drop stream — notes and files interleaved, synced live to every device, persistent across restarts (opt out with --ephemeral)
  • Search the drop stream by note text or file name
  • Optional PIN protection (--pin 4471) and auto-expiry (--expire 60)
  • Short-lived invite links for PIN-protected sessions
  • Drag-and-drop or paste-to-upload (screenshots paste straight from the clipboard)
  • Connect card in the web UI: QR code + address so any device can onboard the next one
  • Connection Doctor: interface, URL, mDNS, and local listener diagnostics with copyable debug info
  • Installable web shell with service-worker caching where the browser allows it
  • Per-file upload progress, copy/download/delete actions, plus bulk clear controls
  • Multi-select → .zip/delete: tap file icons to select several, download as one archive or delete them together
  • Markdown notes: headings, lists, bold, links, and code blocks render properly
  • English, 简体中文, 日本語, 한국어, Español, Deutsch, and Français UI (auto-detected, switchable)
  • Light/dark theme, mobile-first layout
  • Friendly address via mDNS/Bonjourhttp://drop.local instead of an IP (the QR code keeps using the IP so Android works too)
  • Automatic port: tries 80 first (portless URL), falls back to 3000+
  • LAN URL + terminal QR code (CLI)
  • Native tray controls and dashboard Drop Clipboard (Desktop app)

Quickstart (CLI)

npx droplocal

Common options:

droplocal -p 8080
droplocal --dir ./shared          # default: ~/Downloads/DropLocal
droplocal --pin 4471              # other devices must enter this PIN
droplocal --expire 60             # auto-delete drops after 60 minutes
droplocal --ephemeral             # wipe everything when the server stops
droplocal --interface en0         # prefer a network interface name or IP
droplocal --help
droplocal --version

Without -p, DropLocal tries port 80 first (so the share URL is just http://drop.local) and falls back to 3000+.

macOS note: the first run may trigger a Local Network permission prompt. Allow it — that's what lets other devices find drop.local via Bonjour. Everything still works via the IP URL / QR code if you decline.

Desktop App (Local Dev)

npm run desktop:install
npm run desktop:check
npm run desktop:test
npm run test:e2e
npm run desktop:dev

Build installers/bundles:

npm run desktop:build

Desktop details live in apps/desktop/README.md.

Release Strategy

  • Tagged releases (v*) trigger cross-platform desktop builds via GitHub Actions.
  • Built artifacts are uploaded to GitHub Releases.
  • CLI distribution remains via npm (npx droplocal).

See:

  • docs/release/desktop-release.md
  • .github/workflows/release-desktop.yml

Repository Structure

droplocal/
├── index.js                      # CLI app entrypoint/server
├── ui.html                       # Shared browser UI served by CLI + desktop backend
├── test/                         # Node CLI and integration tests
├── e2e/                          # Playwright browser smoke tests
├── apps/desktop/                 # Tauri desktop app
│   ├── src/                      # Desktop dashboard UI
│   └── src-tauri/                # Rust backend + tray + bundling config
├── landing/                      # droplocal.app landing page (Vercel)
├── docs/
│   ├── droplocal-prd.md
│   ├── droplocal-distribution-prd.md
│   └── release/desktop-release.md
└── .github/workflows/

API

REST

  • GET / - UI
  • GET /api/info - app version and share URLs
  • GET /api/diagnostics - local network diagnostics
  • POST /api/invites - create a short-lived invite link for PIN-protected sessions
  • GET /api/snippets - list snippets
  • POST /api/snippets - create snippet
  • DELETE /api/snippets/:id - delete snippet
  • GET /api/files - list files
  • POST /api/files - upload files
  • GET /api/files/:id - download file
  • DELETE /api/files/:id - delete file
  • GET /api/files.zip?ids=a,b - download selected files as a zip
  • DELETE /api/drops?type=all|notes|files&olderThanMinutes=60 - bulk cleanup
  • GET /api/status - runtime status

WebSocket

Endpoint: /ws

Events:

  • snippet:new
  • snippet:delete
  • file:new
  • file:delete
  • device:count

Security Model

DropLocal assumes trusted LAN usage.

  • No account system — optional PIN gate (--pin)
  • No TLS by default
  • Binds to your local network only

Do not expose DropLocal directly to the public internet.

Support

If DropLocal saves you a trip across the room, you can buy me a coffee ☕.

License

MIT (LICENSE)