மச்சா  ·  Tamil for "hey bro"  ·  because good tools should feel like a friend

Your localhost,
on the internet — right now

One command gives your local dev server a public URL.
Share webhooks, demos, and APIs with anyone, instantly.

Get started → See the steps
terminal
$ macha --port 3000 --subdomain myapp
  Dashboard → http://127.0.0.1:4040
 
✓ Tunnel: https://myapp.macha.live
 
  GET  /           200  12ms
  POST /api/data   200  38ms
  GET  /static/app.js 200  4ms
🤝

Why "Macha"?

Macha (மச்சா) is a Tamil word — the way you call your closest friends. "Macha, come look at this." "Macha, got a minute?" It's warm, casual, no-ceremony. That's the vibe this tool aims for: a close friend who opens a tunnel for you, no account, no credit card, no questions asked.

How it works

Three components, zero configuration. Your app never needs to change.

1

You run your app

Any server on localhost — Express, FastAPI, Rails, anything. Macha doesn't touch your code.

2

Agent opens a tunnel

The macha agent dials out to macha.live, registers your subdomain, and pre-warms 5 idle connections so requests are instant.

3

Traffic flows through

Anyone visiting myapp.macha.live is transparently bridged to localhost:3000. No headers changed. WebSocket, gRPC, all protocols work.

Browser  ──▶  macha.live:443 (nginx + TLS)  ──▶  macha server :8080  ──▶  pre-warmed idle socket  ──▶  macha agent (your laptop)  ──▶  localhost:3000

The agent always dials out — so NAT and firewalls are never a problem. The server speaks to your machine through connections your machine opened.

Get started

Three steps from zero to a live public URL.

1

Install

Pick your platform. No dependencies, no runtime — just a single binary.

Mac
Linux
Windows
Cargo
curl -fsSL https://macha.live/install.sh | bash

Downloads a pre-built binary for Apple Silicon or Intel Mac.

curl -fsSL https://macha.live/install.sh | bash

Statically linked binary — works on any Linux (x86-64, ARM64). No libc required.

# Run in PowerShell
irm https://macha.live/install.ps1 | iex

Installs to %LOCALAPPDATA%\macha\bin and adds it to your user PATH.

cargo install macha

Requires Rust. Compiles from source — takes about a minute.

2

Start your local app

Macha works with any server — it doesn't care what language or framework you use. Just make sure it's running.

examples
# Node.js / Express
node app.js           # running on :3000

# Python / FastAPI
uvicorn main:app      # running on :8000

# Anything else
./my-server           # running on :8080
3

Run Macha

Tell it which port your app is on and what subdomain you want. That's it.

macha --port 3000 --subdomain myapp

You'll see:

  Dashboard → http://127.0.0.1:4040
✓  Tunnel: https://myapp.macha.live

Share https://myapp.macha.live with anyone. Open localhost:4040 to watch requests in real-time.

Need more options? Auth tokens, TLS, library API, custom servers —

Full documentation →

Everything you need

Production-grade internals, simple on the outside.

No signup required Pick a subdomain and go. No account, no email, no credit card.
🔌
Connection pool 5 sockets pre-warmed at all times — requests are served instantly, no round-trip wait.
📊
Live dashboard Every request logged at localhost:4040 — method, path, size, duration, in real time.
🔄
Auto-reconnect Survives laptop sleep, Wi-Fi drops, and server restarts. Reconnects with exponential backoff.
🔒
HTTPS by default All *.macha.live subdomains are served over TLS. Your local app gets HTTPS for free.
🌐
Any protocol HTTP, WebSocket, gRPC, SSE — transparent TCP proxy, not an HTTP proxy. Zero header modification.
📦
Rust library Add macha to Cargo.toml and embed tunneling directly in your app.
🏠
Self-hostable Don't want traffic through our server? Run your own in 60 seconds with Docker.
🆓
Free & open source MIT licensed. Self-hosted on a VPS. No paid tiers, no rate-limit paywalls.

Self-host on your own VPC

Full control, no trust required. Your traffic stays on your infrastructure.

Prerequisites

A VPS with Docker installed and a domain with a wildcard DNS record (*.tunnel.yourcompany.com → your-vps-ip). Caddy handles TLS automatically — no certificate management needed.

1 — Start the server

docker-compose.yml (on your VPS)
services:
  macha:
    image: ghcr.io/dhineshk/macha-server:latest
    restart: unless-stopped
    ports:
      - "80:8080"
      - "9000:9000"
      - "9001:9001"
    environment:
      DOMAIN: tunnel.yourcompany.com
      AUTH_TOKEN: change-me-to-a-long-random-secret
docker compose up -d

2 — Point your agents at it

macha --port 3000 --subdomain myapp \
      --server tunnel.yourcompany.com \
      --token your-secret

The tunnel URL will read https://myapp.tunnel.yourcompany.com — fully under your domain.

All server environment variables

VariableWhat it doesDefault
DOMAINBase domain for tunnel URLsmacha.live
PUBLIC_SCHEMEhttp or https in tunnel URLshttps
AUTH_TOKENAgents must present this token to registernone (open)
PUBLIC_PORTPort the public HTTP listener binds on8080
CONTROL_PORTPort agents use to register9000
DATA_PORTPort agents use for idle pool connections9001
TLS_CERTPath to PEM certificate for ports 9000/9001none
TLS_KEYPath to PEM private key for ports 9000/9001none

Ready to go deeper?

Full CLI reference, library API, TLS configuration,
auth tokens, Caddy setup guides, and more.

docs.macha.live →