qurl. link
Just one person

How do I let one specific person open my local app, with no VPN and no open ports?

Publish the app privately with qURL, then invite that one person by email. A forwarded invitation doesn’t let anyone else sign in. Your app gets no public address and no open port, and they don’t need an account or an app.

Your options

Ways to let one person in.

qurl.link

qURL CLI

What they need
A browser. No account, nothing to install.
Who can reach it
The person you invited. Then the network it was opened from, for that visit.
Your setup
The qurl CLI. No account.

Tailscale Serve

A tailnet

What they need
A Tailscale account and the client installed on their device.
Who can reach it
Authorized Tailscale users.
Your setup
A tailnet with HTTPS certificates on.

ngrok with sign-in

Traffic Policy

What they need
A browser and a sign-in your rules allow.
Who can reach it
People who pass your rules. The URL itself is public.
Your setup
An account, an authtoken and a policy.

Cloudflare Tunnel + Access

A named tunnel

What they need
An email address your Access policy names.
Who can reach it
People the policy admits.
Your setup
An account, a domain on Cloudflare and an Access policy.

Every tool side by side, with sources: every way to share localhost.

With qURL

One app, one link, one person.

Share it with qURL

  1. Install the qurl CLI.

    On a Mac, use Homebrew. On Linux and Windows, download the .deb, .rpm or archive from the CLI releases and put qurl on your PATH. No account to make first.

    Install (macOS)
    $ brew install layervai/tap/qurl
  2. Publish the app that’s running.

    Use your app’s port, and publish invite-only so that only the person you invite gets in. The app stays on your computer. Nothing is uploaded or deployed, and the first publish creates a free identity for this computer.

    Publish
    $ qurl publish http://127.0.0.1:3000 --access invite_only
  3. Invite that one person.

    Invite them by email with the ID that qurl publish printed, or ask your AI to do it: it sends invitations only to the people you name. They open the invitation, create a passkey and verify their email in the browser, then see your app.

    Invite by email
    $ qurl access invite <id> --email ana@example.com

Done sharing? qurl stop <id> takes the app offline, and qurl delete <id> --yes retires it: its links stop working and open visits end.

Before you send it
  • An invitation admits the invited person’s network for that visit, so anyone else on that network, such as a shared office Wi-Fi, can reach the app until the visit ends. Keep your app’s own login for anything sensitive.
  • Some chat and email apps open links to preview them, which can use up that one opening. Invite by email instead, or send a fresh link.
  • Several people? Run qurl share once per person, so each gets a link of their own.
  • Keep your app’s own login for anything sensitive.
When another tool fits

When to use something else.

  • They’re already on your tailnet?Use Tailscale Serve
  • They need SSH or a database, not a web app?Use a TCP tunnel
  • Your team, your AI agents or your services need private access at work?Move up to LayerV
Made a thing?

Start with qurl.link.
Show someone today.

Free to try. No account needed. Current limits