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

@sz.ws/drop

v0.2.2

Published

CLI for drop.sz.ws — ephemeral static hosting. Upload HTML/ZIP, get a short-lived link.

Readme

@sz.ws/drop

CLI for drop.sz.ws — drop an HTML file or ZIP, get a short-lived link.

Talks only to the versioned machine API (/api/v1), the same contract as:

curl -T ./site.zip https://drop.sz.ws/api/v1/drop/

Zero dependencies. Node ≥ 18 (uses global fetch).

Install

npm install -g @sz.ws/drop
# or
npx @sz.ws/drop ./site.zip

Later, the studio entrypoint can hand off the same args:

npx sz.ws drop ./site.zip   # → @sz.ws/drop (planned router)

Usage

# upload — bare duration is preferred (default ttl: 1h)
npx @sz.ws/drop ./site.zip
npx @sz.ws/drop ./index.html 7d
npx @sz.ws/drop fixtures/hello.html 1h
npx @sz.ws/drop ./site.zip --ttl 24h --json   # --ttl still works for scripts

# delete early (token from this machine's history, --token, or DROP_TOKEN)
npx @sz.ws/drop delete <id>
npx @sz.ws/drop rm <id> --token "$TOKEN"

# service limits
npx @sz.ws/drop limits

# local upload history (ids + tokens on this machine)
npx @sz.ws/drop history

In a TTY, upload shows a progress bar then a short processing spinner while the server finishes. --json keeps stdout clean (no progress chrome).

After a successful upload it asks Open in browser? [Y/n] — Enter opens it. The prompt is skipped entirely with --no-open, under --json, when CI=true, or when either stdin or stderr is not a TTY, so scripts never hang on it.

Non-ASCII filenames are handled correctly: the progress line measures terminal columns rather than code units (CJK characters draw two columns each), and the filename travels percent-encoded in the URL rather than in an HTTP header, which can only carry latin-1.

Options

| Flag / arg | Meaning | |---|---| | bare 1h 24h 7d 30d | Lifetime as a positional (preferred) | | --ttl 1h\|24h\|7d\|30d | Same, for scripts (default 1h) | | --qr | Include QR SVG in JSON/response | | --json | Machine-readable stdout (quiet progress) | | --no-open | Skip the "Open in browser?" prompt after a successful upload | | --token <tok> | Manage token for delete | | --base <url> | API origin (default https://drop.sz.ws) | | --name <file> | Override upload filename |

The lifetime is a maximum, not a guarantee. The service holds a fixed amount of live sites; when it fills up the oldest drops are deleted early to make room, so a busy period can end a drop before its timer does. drop limits shows current usage. Nothing here is a backup — keep your own copy.

Env

| Var | Meaning | |---|---| | DROP_BASE_URL | Override API origin | | DROP_TOKEN | Default manage token | | DROP_HISTORY_PATH | Custom history file path |

Manage tokens from successful uploads are stored under:

~/.config/sz.ws/drop-history.json

(mode 0600). That is the only way to recover a token after the fact.

API mapping

| CLI | HTTP | |---|---| | drop <file> | PUT /api/v1/drop/<filename>?ttl=… | | drop delete <id> | DELETE /api/v1/drop/<id> + Authorization: Bearer | | drop limits | GET /api/v1/limits |

Develop

cd sz-ws-drop
npm test
node bin/cli.js limits
node bin/cli.js ./fixture.html --base http://127.0.0.1:8787

License

MIT