Expose localhost
to the internet
Secure tunnels from the public internet to your local machine. HTTP, TCP, TLS — with real-time request inspection.
See it in action
From terminal to production
One command to expose your local server. A full dashboard to manage everything.
Protocols
HTTP. TCP. TLS.
Not just web traffic. Expose databases, game servers, or any TCP service.
Expose web apps, APIs, and webhooks with custom subdomains and automatic TLS.
$ serverme http 3000Forward PostgreSQL, Redis, MySQL — any TCP service gets a public port.
$ serverme tcp 5432Passthrough encrypted traffic without termination. Your certs, your control.
$ serverme tls 443Inspection
See every request
Every HTTP request is captured in real-time — method, path, headers, body, status, timing. Replay any request with one click.
Platform
Everything you need
A complete tunneling platform — not just a port forwarder.
Request inspection
View every request in real-time at localhost:4040. Headers, body, timing.
Replay requests
Re-send any captured request with one click. Debug webhooks effortlessly.
Custom domains
Bring your own domain with automatic Let's Encrypt TLS.
Blazing fast
Written in Go with smux multiplexing. Sub-millisecond overhead.
Teams
Invite members, share tunnels, and manage access with roles.
Auth at edge
Basic auth, Google OAuth, or IP restrictions. No code changes.
E2E encryption
All traffic encrypted with TLS 1.3. Zero plaintext on our servers.
Analytics
Success rates, latency, bandwidth — all in real-time.
Self-hostable
Deploy your own server with one command. MIT licensed.
SDKs
Programmatic access
Manage tunnels, stream traffic, and replay requests from your code.
import { ServerMe } from '@serverme/sdk';
const client = new ServerMe({ authtoken: 'sm_live_...' });
const tunnels = await client.tunnels.list();
for await (const req of client.inspect.subscribe(url)) {
console.log(`${req.method} ${req.path} → ${req.statusCode}`);
}from serverme import ServerMe
async with ServerMe(authtoken="sm_live_...") as client:
tunnels = await client.tunnels.list()
async for req in client.inspect.subscribe(url):
print(f"{req.method} {req.path} → {req.status_code}")Pricing
Generous free tier
Most developers never need to pay. Upgrade when your team grows.
Everything you need to build and ship.
- 10 tunnels
- 10 subdomains
- HTTP, TCP, TLS
- Custom domains
- Inspection & replay
- Analytics
- 100 req/s
For teams and power users.
- 10 tunnels
- 50 subdomains
- Wildcard domains
- OAuth at edge
- 500 req/s
- Team management
- Traffic policies
- Priority support
Start tunneling in seconds
No credit card. No config files. One command.
npm install -g serverme-cli