Repolode
ekzhang

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:ngroklocaltunnel

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. 1

    Install the bore CLI with Cargo (requires Rust)

    cargo install bore-cli
  2. 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