runlocal

Getting Started

Everything you need to expose your local dev server to the internet.

Quick start

Make sure you have Node.js installed, then run:

Terminal
$ npx runlocal 3000

Replace 3000 with whatever port your app runs on. You'll see output like:

Output
Forwarding https://fuzzy-tiger.runlocal.eu
http://localhost:3000
Inspect → https://fuzzy-tiger.runlocal.eu/inspect

That's it. Anyone on the internet can now reach your local server at the public HTTPS URL. No signup, no config files, no accounts.

Use cases

Webhook testing

Point Stripe, GitHub, Shopify, or any webhook provider at your runlocal URL. Requests arrive at your local server in real time.

Share with a teammate

Send your public URL to a colleague so they can test your feature branch without deploying anything.

Test on mobile

Open the URL on your phone to test responsive layouts and touch interactions against your live dev server.

API development

Give external services a public callback URL for OAuth redirects, payment callbacks, or any API integration.

Request inspector

Every tunnel comes with a built-in request inspector. When you start the CLI, you'll see an /inspect URL in the output. Open it in your browser to see incoming requests in real time:

  • HTTP method, path, and status code
  • Request and response headers
  • Request body content
  • Timing information

The inspector uses a secure token so only you can view it. No data is stored — everything streams live via WebSocket.

Stable subdomains

By default you get a random subdomain that changes each time you reconnect. If you need a persistent URL (e.g. for webhook configuration), you can use a runlater.eu API key:

Terminal
$ RUNLATER_API_KEY=your_key npx runlocal 3000

With an API key, you get a stable subdomain derived from your account — the same URL every time. Tunnels with an API key also skip the 2-hour TTL. See runlater.eu for details.

Limits

Runlocal is a free service. To keep it fair for everyone, the following limits apply:

Tunnel lifetime 2 hours (no limit with API key)
Request rate 10 requests/second per tunnel
Bandwidth 50 MB/s per tunnel
Request body size 10 MB max
Tunnels per IP 5 concurrent

Privacy

Runlocal does not log requests, set cookies, or store any data. Your traffic is forwarded in real time and never written to disk. European-owned, hosted in Germany, zero US companies in the data chain. Read the full privacy policy →

Built with Phoenix & Elixir. Open source CLI.