Skip to content
hurl.page/blog
Product

Named drops: one URL per pull request, forever

Bart PelleChief Hurler

· 2 min read

Random URLs are perfect for one-offs and terrible for anything iterative. Named drops give you one stable URL per name — redeploy as often as you like, the content changes, the link doesn't.

The failure mode is always the same. You push a fix, CI mints a fresh preview URL, and your reviewer — who bookmarked the link from Tuesday — spends ten minutes confused about why the bug is "still there." Multiply by every push on every PR and you get channel archaeology: scrolling Slack to find whichever link is the real one.

The fix isn't more links. It's one link whose content moves.

How named drops work

Add ?name= to the deploy you already have. First deploy creates the drop; every redeploy of the same name replaces the content and keeps the URL:

deploy.sh

curl -X POST "https://hurl.page/deploy?name=pr-42" \  -H "Authorization: Bearer $HURL_TOKEN" \  -H "Content-Type: text/html" \  --data-binary @index.html

same URL, every time

  • Names are 1–41 chars of [a-z0-9-] (no --), scoped to your account — your pr-42 never collides with anyone else's
  • The response includes name and replaced, so scripts can tell a create from an update
  • Redeploys bump redeploy_count and updated_at — visible in the dashboard and GET /drops

Named drops are a subscriber feature (Pro, $4/mo) because a permanent URL is a promise, and promises cost more to keep than 24-hour confetti.

Vanity subdomains

On the Team plan you can claim a permanent prefix for your account — once acme is yours, named drops serve at acme--pr-42.hurled.page instead of a random slug. Subs are 3–20 chars of [a-z0-9-], one per account, first come first served. Existing named drops migrate onto the vanity sub on their next redeploy.

Migration retires the old URL

When a named drop moves onto your vanity sub, its old random URL stops working. Links you posted before claiming the sub will 404 after the next redeploy — repost them once and you're done.

Bookkeeping

Everything is inspectable from the dashboard or the API: GET /drops lists every drop with its name, redeploy count and expiry; DELETE /drops/<slug> removes one permanently — files and index entry both, with up to 60 seconds of edge cache as the only afterlife. If you wire named drops into CI, the natural pattern is one name per PR (pr-<number>) and a delete step when the PR closes.

Written by

Bart Pelle

Chief Hurler

Bart founded Bitgate and crowned himself Chief Hurler — a fancy title for “throws HTML at an API all day and occasionally writes about it.” If a build's on fire, he's the one who lit it. Usually on purpose.

Share

XHacker News