# qURL vs Pinggy: A Private Alternative to SSH Tunnels

> qURL vs Pinggy for sharing localhost: no public URL, no screening page, no 60-minute free timeout, and links that work once and expire within 24 hours.

Source: https://layerv.ai/compare/qurl-vs-pinggy/

---

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

# qURL™ vs Pinggy

Nothing to install for one. No public URL for the other.

Pinggy needs nothing but SSH: one ssh command gives your app a random public URL, free tunnels time out after 60 minutes, and browsers see a one-time screening page. qURL needs its CLI but no account, gives the app no public URL, and 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)

Pinggy forwards a local port over SSH, so there is nothing to install. qURL is a CLI that publishes a local app without a public route. Neither needs an account to start.

## How qURL and Pinggy differ

Pinggy forwards your port over SSH to its servers and gives you a random public URL that changes when you reconnect; persistent subdomains are on Pro. Free tunnels time out after 60 minutes, and browsers see a one-time screening page that non-browser clients skip. Pinggy offers basic auth, bearer tokens, and an IP allowlist, and carries HTTP, TCP, and TLS.

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>
```

Pinggy (free)

```
ssh -p 443 -R0:localhost:8000 qr@free.pinggy.io
```

## qURL and Pinggy, side by side

__qURL CLI compared with Pinggy (free), with the source for each value__
| Question                            | qURL CLI                                                                                                                                                                                        | Pinggy (free)                                                                                                                                                  |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account needed before the first URL | No. The first publish creates the device identity [our test](https://layerv.ai/research/qurl-behaviour)                                                                                         | No, to start [pinggy.io](https://pinggy.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](https://layerv.ai/research/qurl-behaviour)             | Random URL that changes on reconnect; persistent subdomains on Pro [pinggy.io](https://pinggy.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](https://layerv.ai/docs/qurls.md)                                | Public: anyone with the URL [pinggy.io](https://pinggy.io/)                                                                                                    |
| Warning page shown to visitors      | None [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                                                      | Yes, a one-time browser screening page on free tunnels; non-browser clients skip it; none on Pro [pinggy.io](https://pinggy.io/docs/http%5Ftunnels/screening/) |
| 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) | Basic auth, bearer token, IP allowlist [pinggy.io](https://pinggy.io/)                                                                                         |
| 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)                                   | Free tunnels time out after 60 minutes [pinggy.io](https://pinggy.io/)                                                                                         |
| Single-use links                    | Yes, the default for qurl share [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                           | Not documented [pinggy.io](https://pinggy.io/)                                                                                                                 |
| Protocols                           | HTTP(S), WebSocket, SSE; no raw TCP [our test](https://layerv.ai/research/qurl-behaviour)                                                                                                       | HTTP(S), TCP, TLS over SSH; UDP needs the Pinggy CLI [pinggy.io](https://pinggy.io/docs/udp%5Ftunnels/)                                                        |
| 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)                      | 60-minute tunnel timeout [pinggy.io](https://pinggy.io/)                                                                                                       |

## Which one to use

### Choose qURL to

Share a preview with one person, or let your coding agent do it, without a public URL, a screening page, or reconnecting every hour.

### When Pinggy is the better choice

Choose Pinggy when you can’t install anything but have SSH, when you need raw TCP or TLS, or when something other than a person must reach the app, such as a webhook sender.

## Frequently Asked Questions

Does Pinggy need an account? 

Not to start: free tunnels run over SSH with no sign-up and time out after 60 minutes. Persistent subdomains, and tunnels without the screening page, are on Pro.

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

[Every localhost tunnel, compared →](https://layerv.ai/compare/localhost-tunnels/) [ngrok alternatives →](https://layerv.ai/compare/ngrok-alternatives/) [qURL CLI →](https://layerv.ai/cli/) [Pinggy ↗](https://pinggy.io) [qURL vs localhost.run →](https://layerv.ai/compare/qurl-vs-localhost-run/) [qURL vs Serveo →](https://layerv.ai/compare/qurl-vs-serveo/) [qURL vs LocalXpose →](https://layerv.ai/compare/qurl-vs-localxpose/) [ngrok alternatives with authentication →](https://layerv.ai/compare/ngrok-alternatives-with-auth/)

## 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-pinggy/](https://layerv.ai/compare/qurl-vs-pinggy/) for AI agents. Curated agent resources: [llms.txt](https://layerv.ai/llms.txt). For the full interactive experience, visit the HTML version.*

