A self-hosted tunnel written in Go that exposes localhost services to the internet through your own domain and server.
ekzhang/bore
A minimal Rust CLI that exposes a local TCP port to a remote server, so localhost services can be reached from the public internet.
Open-source alternative to:ngrok
localtunnel
- Stars
- 11,538
- Forks
- 618
- Open issues
- 18
- Last commit
- 9 months ago
What is it?
bore is a command-line TCP tunnel written in Rust. Running `bore local <PORT> --to <SERVER>` forwards a local port to a public address on a remote server, with the remote port assigned randomly unless you request a specific one. It is aimed at getting a local service reachable from outside a NAT or firewall without configuring the router.
The tool is deliberately narrow: it forwards raw TCP traffic and nothing else. The server side is started with a single `bore server` command and can be self-hosted, with options for the port range, the bind address for the control server and for tunnels, and an optional shared secret. The secret is used for an HMAC-based handshake on each connection; traffic after the handshake is not encrypted by default.
The project is distributed as a single binary via Cargo, Homebrew, AUR, prebuilt releases and Docker, and it is built on Tokio.
Key features
- 01Forwards local TCP ports to a public address on a remote server.
- 02Lets you request a specific remote port or use a randomly assigned one.
- 03Can be self-hosted with a single `bore server` command.
- 04Supports an optional shared secret for authenticating clients.
- 05Allows separate bind addresses for the control server and tunnels.
- 06Available via Cargo, Homebrew, AUR, prebuilt binaries and Docker.
Use cases
- Sharing a local web app with a colleague or a webhook provider during development.
- Exposing a service on a home network without changing router port forwarding.
- Running a private tunnel server on your own infrastructure.
Quick start
- 1
Install the bore CLI with Cargo (requires Rust)
cargo install bore-cli - 2
Expose local port 8000 via the public bore.pub server
bore local 8000 --to bore.pub
Things to know
- Data is sent without encryption beyond the initial handshake, so traffic is not encrypted by default.
- The README lists no alternative to the public bore.pub server for self-hosting beyond running your own server, which requires setup effort.
Topics
FAQ
- What is bore?
- A minimal Rust CLI that exposes a local TCP port to a remote server, so localhost services can be reached from the public internet. bore is a command-line TCP tunnel written in Rust. Running `bore local <PORT> --to <SERVER>` forwards a local port to a public address on a remote server, with the remote port assigned randomly unless you request a specific one. It is aimed at getting a local service reachable from outside a NAT or firewall without configuring the router.
- Is bore free to use? What license does it have?
- bore is open source under the MIT license. Check the license terms before using it in commercial products.
- Is bore still maintained?
- No commits for 6+ months. The last commit to bore was on Feb 4, 2026.
- What can I use bore for?
- Sharing a local web app with a colleague or a webhook provider during development. Exposing a service on a home network without changing router port forwarding. Running a private tunnel server on your own infrastructure.
- How do I install bore?
- Install the bore CLI with Cargo (requires Rust): cargo install bore-cli Expose local port 8000 via the public bore.pub server: bore local 8000 --to bore.pub
- Where can I get bore?
- The source code and installation instructions are on GitHub: https://github.com/ekzhang/bore
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A free, open-source ngrok alternative that exposes localhost over HTTPS through Cloudflare Tunnels, with custom subdomains and no account required.
Open-source ngrok alternative that exposes a local HTTP server at a public HTTPS URL with one command.
A netcat-like CLI and Go library that connects two machines over Tailscale's WireGuard data plane without needing a Tailscale account or control plane.
A web UI and CLI for documenting and managing home lab and small-scale IT infrastructure, stored in YAML files.
CLI proxy that filters and compresses shell command output before it reaches an AI coding agent's context, cutting token use.