Skip to main content
← All guides

Share localhost without signing up

Content updated October 24, 2026.

How do I share localhost without making an account?

qURL™, Cloudflare Quick Tunnels, localtunnel and Pinggy all share localhost with no account; ngrok asks for an account and authtoken first. With qURL, install the CLI, run qurl publish with your app’s local address, then qurl share with the CRID it prints. The link works once and expires within 24 hours, while the other three give the app a public URL.

What you need

  • An HTTP app running on this machine, for example on port 3000
  • A terminal on macOS, Linux, or Windows
  • No account, API key, or sign-in

Steps

  1. Install the qURL CLI

    On macOS, install it with Homebrew. On Linux and Windows, download the package for your platform from the latest release; the CLI page lists each one. Nothing asks you to sign up.

    brew install layervai/tap/qurl
    qurl --version
  2. Start your app

    Any local HTTP app works. To try the flow first, serve a folder with Python; it serves every file in the current folder, so run it in a folder that holds only what you mean to share. Bind the app to 127.0.0.1 rather than 0.0.0.0, so it isn’t also reachable from your network.

    python3 -m http.server 3000 --bind 127.0.0.1
  3. Publish it

    The first publish creates this device’s identity, starts a background service that keeps serving after you close the terminal (while you stay logged in), and prints the app’s CRID, its stable ID. The Access row says who can open the app: a plain publish makes it private from qurl 3.4.1 on. qurl share turns the CRID into an access link, and the link is what you send.

    qurl publish http://127.0.0.1:3000
    Published
    
      Target:  http://127.0.0.1:3000
      Access:  private — only you and the people you allow can open it
      Status:  serving
    
    CRID: ae4jqpd7eaoslq7jinmjv4yikgzmcxgpjfsuobiniqnko32lpw743ivbeyha
  4. Create a link

    qurl share prints an access link (https://qurl.link/#…). On a terminal, the lines below it say who published the resource and when the link expires, for example “Expires in 1d (single use)”. Today LayerV has verified only its own account, so for every other publisher the Publisher line says UNVERIFIED. With no flags the link can be opened once and expires within 24 hours. If the expiry line does not say “single use”, don’t send the link. Add --ttl 1h for a shorter window.

    qurl share <CRID>
  5. Send the link to one person

    Send it in a direct message, not a public channel: whoever opens it first uses it. Avoid email and apps that preview links, because a scanner that runs the page could use its one opening. Don’t open it yourself to check it, for the same reason. Run qurl share again whenever you need a fresh link.

What the recipient sees

The recipient clicks the link and their browser lands on your app at an address like https://r_….qurl.site/. There is no warning page, sign-up, or install. Their session lasts 1 hour by default, and your app’s own login still applies if it has one.

Which tools share localhost without an account?

OptionChoose it whenTrade-off
qURLqURL fits when particular people should open the app: the first qurl publish creates a device identity instead of an account, and each qurl share link opens once.qURL links last up to 24 hours, and your computer and the app stay running while people use it.
Cloudflare Quick TunnelsA Cloudflare Quick Tunnel fits a throwaway public URL: cloudflared tunnel --url needs no account or domain.A Cloudflare Quick Tunnel is public unless you set --allowed-mail, gets a new trycloudflare.com hostname each run, and does not support Server-Sent Events.
localtunnellocaltunnel fits when you want a public URL straight from npx localtunnel, with nothing to install beyond Node.js.localtunnel lets anyone with the loca.lt URL in, and its maintainer says browser visitors first meet a page asking for a tunnel password: your public IP address.
PinggyPinggy fits when you want to install nothing: one ssh command opens a tunnel, with no account to start.A free Pinggy tunnel is public, times out after 60 minutes, gets a new URL when it reconnects, and shows browsers a screening page.

Troubleshooting

If you seeDo this
qurl publish says the local app is not accepting TCP connectionsStart the app first and check that curl works on the same address. qurl publish connects to localhost as 127.0.0.1, so if your app listens only on IPv6 (on macOS or Linux, lsof -iTCP -sTCP:LISTEN -nP shows [::1]), publish 'http://[::1]:PORT' instead, or start the dev server with --host 127.0.0.1 and publish that address. Neither requires listening on your LAN. Keep the quotes: zsh treats the brackets as a pattern.
The recipient sees “Access link invalid”The link was already used or has expired. Run qurl share again and send the new link.
The recipient sees “Resource not found”The resource was deleted after the link was made. Publish the app again, then run qurl share and send the new link.
publish rejects http://127.0.0.1 with “only HTTPS URLs are allowed”, or asks you to log inYou have a CLI older than 3.0. On macOS run brew update, then brew upgrade qurl; elsewhere install the latest release again. After updating, qurl --version should print 3.4.1 or later.
publish prints no Access: line, or the Access: line says public and you did not ask for publicWith no Access: line, the CLI is older than 3.4.1: on macOS run brew update, then brew upgrade qurl; elsewhere install the latest release again. A resource that an older CLI published is public unless you published it with --private, and anyone who has the CRID of a public resource can open it. To make a public resource private, run qurl delete <CRID> and publish again with qurl 3.4.1 or later. The new resource is private and has a new CRID.
publish says this Linux session “can’t reach a systemd user manager”You are in a container or sandbox without a user service manager. Run qurl publish with --foreground; sharing lasts as long as that process runs.
publish says “Quota Exceeded” with “protected resource limit reached”, or “Your qURL account has reached a plan limit”You can see this without an account: a device with no account can keep up to 3 active resources, with links that last up to 24 hours. Run qurl list --status active, then qurl delete <CRID> for any you no longer need (it asks you to confirm; --yes skips that). qurl stop keeps the resource, so it does not free a slot.

Frequently Asked Questions

Is there really no sign-up?

Yes. The first qurl publish creates a device identity and keeps it in a private folder on your machine (~/.local/state/qurl on macOS and Linux, %LOCALAPPDATA%\qurl on Windows); keep that folder, because it is what lets you share, stop, and delete what you published. Without an account you can publish up to 3 active resources, with links that last up to 24 hours.

How long does the link last?

With no flags, 24 hours or until it is opened once, whichever comes first. The session it opens lasts 1 hour by default. Use --ttl for a shorter link and --session-duration to change the session, up to 24 hours.

Does my computer have to stay on?

Yes. The app is served from your machine, so the machine and the app must be running and connected. The background service reconnects after sleep, but the app is unavailable while the machine is asleep.

Who else can reach my app while the link is open?

Opening the link admits the network address it was opened from for the session, which lasts 1 hour by default. Other devices that share that public IP address, such as people on the same office or café network or VPN, can reach the app until the session ends. By default a link admits whoever opens it; access rules set through the API, such as IP allow and deny lists, can restrict that. Keep your app’s own sign-in for anything sensitive.

How do I stop sharing?

Run qurl stop <CRID> to pause serving the app, and qurl start <CRID> to resume it; a stopped app still counts toward your resource limit. qurl delete <CRID> removes the resource for good after asking you to confirm; its CRID can never be shared again.

Publish your app now

Install the CLI, then run one command. No sign-up, no API key.

Install the CLI ↗

Pilot LayerV

Tell us what to protect, and we’ll scope a pilot.

Enterprise starts with a scoped, paid pilot on one application, typically 60 to 90 days, credited in full toward year one if you convert within 60 days. Then an annual package sized to what you protect. Not per seat.