@sz.ws/drop
v0.2.2
Published
CLI for drop.sz.ws — ephemeral static hosting. Upload HTML/ZIP, get a short-lived link.
Maintainers
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.zipLater, 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 historyIn 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:8787License
MIT
