qURL™ vs zrok
Both can keep an app private. Only one needs no account.
zrok, from NetFoundry, needs a free account and lets you choose per share: public shares get a URL anyone can open, and private shares reach only zrok accounts you grant. qURL needs no account for you or your recipient: qurl share prints a link that works once and expires within 24 hours.
Facts checked October 1, 2026 against each vendor’s documentation. Download the data
zrok is a sharing tool from NetFoundry with public and private shares. qURL is a CLI that publishes a local app without a public route and hands out one link per recipient.
How qURL and zrok differ
zrok’s CLI enables your environment with an account token, then shares a port publicly on share.zrok.io or privately. Public shares from unverified free accounts show an anti-phishing page on the first visit, which adding a card removes. Private shares reach only the zrok accounts you grant, and carry raw TCP, UDP, and SOCKS as well as HTTP. Ephemeral shares end with the process; reserved names persist.
qURL connects out from your machine too, but it gives the app no public address. qurl publish registers the app and prints its CRID, the app’s stable ID; qurl share turns the CRID into an access link for one recipient. Opening the link admits that recipient’s network address for the session; by protocol design, other addresses get no response.
From a running app to a link you can send
qurl publish http://127.0.0.1:3000
qurl share <CRID>zrok2 enable <TOKEN>
zrok2 share public 8080qURL and zrok, side by side
| Question | qURL CLI | zrok (free) |
|---|---|---|
| Account needed before the first URL | No. The first publish creates the device identity our test | Yes: a free account, no card zrok.io |
| What the URL looks like | A qurl.link access link per recipient; the app answers at r_<id>.qurl.site, a name absent from Certificate Transparency logs our test | *.share.zrok.io; random and ephemeral by default, or a reserved name netfoundry.io |
| Who can reach it | No one until a link is opened; then the opener’s public IP for that session, including other devices behind that IP layerv.ai | Your choice per share: public shares are open to anyone with the URL; private shares only to zrok accounts you grant netfoundry.io |
| Warning page shown to visitors | None our test | Yes, an anti-phishing page on the first visit to public shares from unverified free accounts; adding a card removes it zrok.io |
| Visitor access control | Single-use access link by default; link and session lifetimes. IP allow and deny lists and other rules can gate links through the API, not the CLI layerv.ai | Basic auth; OAuth with an email pattern; private shares github.com |
| Link expiry | Yes. qurl share returned a 24-hour link in our no-account test; no-account links are capped at 24 hours our test | Ephemeral shares end with the process netfoundry.io |
| Single-use links | Yes, the default for qurl share our test | Not documented netfoundry.io |
| Protocols | HTTP(S), WebSocket, SSE; no raw TCP our test | HTTP(S) on public shares; raw TCP, UDP, and SOCKS on private shares netfoundry.io |
| Free-tier limits | Without an account: up to 3 active resources, with links that last up to 24 hours github.com | 5 GB/day; 7,500 requests per share per 5 minutes netfoundry.io |
Which one to use
Choose qURL to
Share with someone who has no zrok account, or let your coding agent do it, with a link that works once and expires on its own.
When zrok is the better choice
Choose zrok when both sides can use it: private shares carry raw TCP, UDP, and SOCKS, and you can reserve a stable share name. Its public shares also work for webhook senders.
Frequently Asked Questions
Is zrok free?
zrok has a free account with no card, limited to 5 GB a day and 7,500 requests per share every 5 minutes. Public shares from unverified free accounts show a warning page until you add a card.
Who can open a qURL link?
Whoever holds it, once: with no flags, qurl share prints a single-use link. Opening it admits the network address it was opened from for the session, which lasts 1 hour by default for an app published from the CLI. Other devices on the same public IP address, such as an office or café network, can reach the app until the session ends, so keep your app’s own sign-in for anything sensitive. By default a link admits whoever opens it; access rules set through the API, such as IP allow and deny lists, can restrict that.
Can my coding agent share my app with qURL?
Yes. Give Claude Code, Cursor, or Windsurf the qURL skill (https://layerv.ai/skills/qurl/SKILL.md) and ask it to share the app: it installs the qurl CLI, publishes the app privately, and gives you an address to send. The agent applies the private access rules you choose. For named recipients, give it their email addresses so it can send invitations. Recipients verify their email in the browser and save a passkey; they never send you their email verification code. The agent checks policy support before sharing and keeps the app private if the deployment cannot support it. For one person right away, ask it for a one-time link instead. Codex starts with network access off, so save the skill file for it first.
Share your app without an account
Paste one prompt into your coding agent, or install the qURL CLI and publish the app yourself. No sign-up, no API key.
New to qURL? Start at qurl.link