Skip to content
OutRay

Localhost, meet the world.

A public address for the app on your machine. Share your work, catch real webhooks, and test from anywhere—without a deployment.

YOUR MACHINElocalhost:3000
PUBLIC ADDRESSdemo.outray.appHTTPS, ready to share
npx outray 3000
Learn more

Every request. As it arrives.

user@outray-cli

npx outray 3000

Connecting to OutRay...

Linked to your local port 3000

Tunnel ready: https://demo.outray.app

Keep this running to keep your tunnel active.

MethodPathStatusTime
GET/api/users20012ms
POST/api/webhooks20145ms
GET/favicon.ico2002ms
GET/api/health2005ms
POST/auth/login20089ms
GET/dashboard200150ms
GET/api/settings3048ms
POST/api/upload201230ms

First-class developer experience

Less setup. More building. OutRay fits right into the tools you already use.

Online in one line

Start your app. Point OutRay at its port. Get a public address without deploying a thing.

npx outray 3000

Fits into your workflow

Prefer your usual dev command? Let a framework plugin open the tunnel when your server starts.

vite.config.ts
import { defineConfig } from "vite";
import outray from "@outray/vite";

export default defineConfig({
  plugins: [outray({
    apiKey: process.env.OUTRAY_API_KEY,
  })],
});

Inspect every request

Follow HTTP traffic through your tunnel. Enable request capture to look closer at headers and supported payloads.

Requests
POST /webhooks/paymentResponse
Status
201 Created
Duration
58 ms
Content type
application/json
{
  "received": true,
  "event": "payment.completed"
}
Showing POST /webhooks/payment, 201 Created, 58 ms.
See the request, not just the status.Explore Tunnels

It just works.

Your app stays on your machine. OutRay connects it to the world.
No port forwarding. No deployment. Just a connection.

  1. Localhost

  2. Secure tunnel

  3. OutRay Edge

  4. Public Internet

Bring your
own domain.

Connect your own domain and get automatic HTTPS.

  • Automatic SSL/TLS certificates
  • Simple CNAME configuration
  • The same address when you reconnect
Connect a domain
preview.example.com

Your domain, connected.

Public address → localhost:3000
CNAMERoute visitors
preview.example.comWorkspace-provided target
TXTVerify ownership
_outray-challenge.preview.example.comYour domain’s ownership token
outray 3000 --domain preview.example.com

Unlimited .local domains

Test on any device in your network. Just add --local and your app is instantly accessible at a memorable .local domain.

  • mDNS Discovery

    Auto-discovered by all devices via Bonjour/Avahi

  • Trusted HTTPS

    Automatic certificates with mkcert - no browser warnings

  • Zero Config

    No port forwarding, no firewall rules, no DNS setup

Explore local access
outray 3000 --local

Tunnel: https://my-app.outray.app

Local: https://my-app.local

Any protocol.
One command away.

HTTP, TCP, and UDP. One CLI for any local service.

HTTP/HTTPS

Secure URLs for local web servers, webhooks, and APIs.

outray http 3000

TCP Tunnels

Expose databases, SSH, RDP, and other TCP services.

outray tcp 5432

UDP Tunnels

Connect game servers, streaming, and real-time apps.

outray udp 5000

Keep building locally.
Let the world in.

A webhook, a teammate, a phone on your network.
Give your app a way to be reached.