@flynetdev/birdnames
v0.1.0
Published
Deterministic color-food-bird name from any string (md5 → 256-word lists). The shared source of truth for Flynet dev-tunnel subdomains, so the portal, the relay, and `flynet dev` all agree.
Downloads
88
Maintainers
Readme
@flynetdev/birdnames
Deterministic color-food-bird name from any string — md5 hashed into three 256-word
lists. Same input always yields the same name.
This is the shared source of truth for Flynet dev-tunnel subdomains. The Make portal,
the sish relay, and the starter's flynet dev all derive a maker's subdomain from this,
so they must agree byte-for-byte. Normalize the input the same way everywhere
(email.trim().toLowerCase()).
import birdHash from "@flynetdev/birdnames";
birdHash("[email protected]", { style: "lowercase", separator: "-" });
// → "warm-finch-kestrel" (URL-safe form used for tunnel subdomains)
birdHash("[email protected]"); // default: "Warm Finch Kestrel"
birdHash("[email protected]", { includeDetails: true });
// → { name, color, food, bird }Options: style ("titlecase" | "lowercase" | "uppercase", default titlecase),
separator (default " "), includeDetails (default false).
Maintaining
The source lives in the flynet monorepo at libs/shared/birdnames. This package's src/
is generated from it by scripts/sync-src.mjs on build/prepare — edit the lib, not
a copy here.
TODO: publish (not done yet — blocked on npm org access)
@flynetdev is owned by Lauren ([email protected]). Publishing a new package under
that scope needs membership in the @flynetdev npm org with publish rights — a fresh login
alone returns 401/404 (npm masks a no-scope-access publish as 404). Pick one:
- Self-publish —
npm login→ confirmnpm whoami→ have Lauren add your npm user to the@flynetdevorg → then:npm install # runs prepare → sync + build npm publish # watch for org-enforced 2FA - Hand off to Lauren —
npm packand send herflynetdev-birdnames-0.1.0.tgz; she runsnpm publish flynetdev-birdnames-0.1.0.tgz. Or she pulls the branch and runs the steps in (1).
Once published, wire the starter: add @flynetdev/birdnames as a dep + the flynet dev
script (see the tunnel notes), and the bird-name resolves the same everywhere.
