A free, open-source ngrok alternative that exposes localhost over HTTPS through Cloudflare Tunnels, with custom subdomains and no account required.
MuhammadHananAsghar/wormhole
Open-source ngrok alternative that exposes a local HTTP server at a public HTTPS URL with one command.
Open-source alternative to:ngrok
- Stars
- 437
- Forks
- 33
- Open issues
- 2
- Last commit
- 23 days ago
What is it?
Wormhole is a command-line tunnel for sharing a local development server over the internet. Running `wormhole http 3000` assigns a public HTTPS URL that forwards to localhost:3000, so you can share a dev server, receive webhooks, or open an app on another device. A tunnel starts without an account; signing in with GitHub enables custom subdomains.
The Go client connects over a WebSocket to a relay built on Cloudflare Workers and Durable Objects, which routes incoming requests to the right tunnel. Each tunnel also runs a local traffic inspector at localhost:4040 with a live request stream, request replay, and HAR export. Dot-segment paths such as /.env and /.git, along with node_modules paths, are blocked by default before they reach your server.
The client is MIT-licensed and installs via a shell script, Homebrew, or prebuilt release binaries. The roadmap lists a planned self-hosted Go relay, but the current version depends on the Cloudflare relay.
Key features
- 01Creates a public HTTPS URL for a local HTTP server with one command.
- 02Supports custom subdomains after GitHub sign-in.
- 03Local traffic inspector with live request stream, replay, and HAR export.
- 04Forwards WebSocket connections through the tunnel.
- 05Reconnects with exponential backoff when the connection drops.
- 06Blocks sensitive dot-segment and node_modules paths by default.
Use cases
- Sharing a work-in-progress web app with a client or teammate.
- Receiving webhooks from third-party services on a local machine.
- Testing a local app on a phone or other device over HTTPS.
- Inspecting and replaying HTTP traffic during API debugging.
Quick start
- 1
Install with the quick install script (macOS / Linux)
curl -fsSL https://wormhole.bar/install.sh | sh - 2
Start a tunnel to your local HTTP server on port 3000
wormhole http 3000
Things to know
- Relies on the project's hosted Cloudflare Workers relay, and self-hosted relay is not yet shipped.
- Custom subdomains require signing in with GitHub.
- Roadmap items such as self-hosted relay and P2P mode are not yet implemented.
Topics
FAQ
- What is wormhole?
- Open-source ngrok alternative that exposes a local HTTP server at a public HTTPS URL with one command. Wormhole is a command-line tunnel for sharing a local development server over the internet. Running `wormhole http 3000` assigns a public HTTPS URL that forwards to localhost:3000, so you can share a dev server, receive webhooks, or open an app on another device. A tunnel starts without an account; signing in with GitHub enables custom subdomains.
- Is wormhole free to use? What license does it have?
- wormhole is open source under the MIT license. Check the license terms before using it in commercial products.
- Is wormhole still maintained?
- Actively maintained. The last commit to wormhole was on Sep 27, 2026.
- What can I use wormhole for?
- Sharing a work-in-progress web app with a client or teammate. Receiving webhooks from third-party services on a local machine. Testing a local app on a phone or other device over HTTPS. Inspecting and replaying HTTP traffic during API debugging.
- How do I install wormhole?
- Install with the quick install script (macOS / Linux): curl -fsSL https://wormhole.bar/install.sh | sh Start a tunnel to your local HTTP server on port 3000: wormhole http 3000
- Where can I get wormhole?
- The source code and installation instructions are on GitHub: https://github.com/MuhammadHananAsghar/wormhole
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A self-hosted tunnel written in Go that exposes localhost services to the internet through your own domain and server.
A minimal Rust CLI that exposes a local TCP port to a remote server, so localhost services can be reached from the public internet.
A Go CLI for tmux that saves sessions, windows, panes and commands, then restores them lazily from a TUI picker.
A local-first desktop API client for HTTP, gRPC, GraphQL and WebSocket, built with Wails 3 and Vue 3.
A Go CLI and GitHub CLI extension that starts a local web server to preview GitHub Flavored Markdown, including offline.