# qURL vs Cloudflare Tunnel: Share an App Without a Domain

> qURL vs a named Cloudflare Tunnel for sharing a local app: no account, no domain on Cloudflare, no Access policy to write, and links that expire.

Source: https://layerv.ai/compare/qurl-vs-cloudflare-tunnel/

---

[← All Comparisons](https://layerv.ai/compare/) 

# qURL™ vs Cloudflare Tunnel

One wants your domain on Cloudflare. The other wants nothing.

A named Cloudflare Tunnel needs a Cloudflare account and your domain on Cloudflare, and its hostname stays public until you add a Cloudflare Access application. qURL needs no account or domain: qurl publish keeps the app off the public internet, and 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](https://layerv.ai/data/localhost-tunnels/tunnels.json)

A named Cloudflare Tunnel publishes an app on a stable hostname on your own domain. qURL is a CLI that publishes a local app without a public route, for one recipient at a time.

## How qURL and Cloudflare Tunnel differ

You create a named tunnel in the Cloudflare dashboard, run the cloudflared install command it shows, and add a published application route on your domain. The hostname is stable and public until you put a Cloudflare Access application in front; Access session settings then apply, with no per-link expiry. Tunnels carry HTTP and, with cloudflared on the client, TCP, SSH, RDP, and SMB, and are available on every plan.

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 CLI

```
qurl publish http://127.0.0.1:3000
qurl share <CRID>
```

Cloudflare Tunnel (named)

```
Create the tunnel in the dashboard, run the cloudflared install command it shows, then add a published application route
```

## qURL and Cloudflare Tunnel, side by side

__qURL CLI compared with Cloudflare Tunnel (named), with the source for each value__
| Question                            | qURL CLI                                                                                                                                                                                        | Cloudflare Tunnel (named)                                                                                                                                                                                   |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account needed before the first URL | No. The first publish creates the device identity [our test](https://layerv.ai/research/qurl-behaviour)                                                                                         | Yes: account plus a domain on Cloudflare [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)              |
| 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](https://layerv.ai/research/qurl-behaviour)             | Stable hostname on your own domain [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)                    |
| 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](https://layerv.ai/docs/qurls.md)                                | Public unless you add a Cloudflare Access application [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/) |
| Warning page shown to visitors      | None [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                                                      | Not documented [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)                                        |
| 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](https://layerv.ai/docs/qurls.md) | Cloudflare Access policies; service tokens for machines [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/service-tokens/)                   |
| 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](https://layerv.ai/research/qurl-behaviour)                                   | No per-link expiry; Access session settings apply [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/access-controls/access-settings/session-management/)                         |
| Single-use links                    | Yes, the default for qurl share [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                           | Not documented [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)                                        |
| Protocols                           | HTTP(S), WebSocket, SSE; no raw TCP [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                       | HTTP(S); TCP, SSH, RDP, SMB with cloudflared on the client [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols/) |
| Free-tier limits                    | Without an account: up to 3 active resources, with links that last up to 24 hours [github.com](https://github.com/layervai/qurl-integrations/blob/main/apps/cli/README.md)                      | Available on all plans; 1,000 tunnels per account, 25 replicas per tunnel [developers.cloudflare.com](https://developers.cloudflare.com/cloudflare-one/account-limits/)                                     |

## Which one to use

### Choose qURL to

Share a preview or a local tool without a domain, a dashboard, or a policy to write, and without leaving a stable public hostname behind.

### When Cloudflare Tunnel is the better choice

Choose a named tunnel for something long-lived on your own domain: a stable hostname, Cloudflare Access policies and service tokens for machines, and TCP, SSH, or RDP through cloudflared.

## Frequently Asked Questions

Do I need a domain for a Cloudflare Tunnel? 

For a named tunnel, yes: its stable hostname is on your own domain, managed on Cloudflare. A quick tunnel needs no account or domain, but gets a random public trycloudflare.com hostname that changes each run.

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.

## Related Resources

[qURL vs Cloudflare Quick Tunnels →](https://layerv.ai/compare/qurl-vs-cloudflare-quick-tunnels/) [Cloudflare Tunnel alternatives →](https://layerv.ai/compare/cloudflare-tunnel-alternatives/) [Every localhost tunnel, compared →](https://layerv.ai/compare/localhost-tunnels/) [Cloudflare Tunnel docs ↗](https://www.cloudflare.com/products/tunnel/)

## 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.

[Get the agent prompt ↗](https://layerv.ai/vibe-coding/) [Install the CLI ↗](https://layerv.ai/cli/)

New to qURL? Start at [qurl.link ](https://qurl.link/)



---

*This markdown version is auto-generated from [https://layerv.ai/compare/qurl-vs-cloudflare-tunnel/](https://layerv.ai/compare/qurl-vs-cloudflare-tunnel/) for AI agents. Curated agent resources: [llms.txt](https://layerv.ai/llms.txt). For the full interactive experience, visit the HTML version.*

