GitHub - Aditya-ds-1806/bore: A blazing fast, free & open source TCP tunnel that exposes your localhost to the world.

3 min read Original article ↗

Bore

Bore

A blazing fast, free & open source TCP tunnel that exposes your localhost to the world.

License Release Stars

FeaturesInstallationUsageSelf-HostingLicense


Demo

bore.mp4

Features

  • Blazing Fast — Written in Go for maximum performance with sub-millisecond overhead
  • 🔒 Encrypted — All traffic is encrypted end-to-end
  • 🎯 Zero Config — One command to start tunneling, no signup required
  • 🔍 Request Inspector — Built-in web UI to inspect, replay, and debug HTTP requests
  • 💻 Terminal UI — Beautiful TUI with live logs and powerful filtering
  • 🌐 Self-Hostable — Run your own bore server with zero vendor lock-in
  • 100% Open Source — MIT licensed, free forever

Installation

npm

macOS (Homebrew)

brew tap aditya-ds-1806/bore
brew install bore --cask

Windows (Scoop)

scoop bucket add aditya-ds-1806 https://github.com/aditya-ds-1806/scoop-bucket
scoop install aditya-ds-1806/bore

Linux

curl -fsSL https://trybore.com/install.sh | sh

From Source

git clone https://github.com/Aditya-ds-1806/bore.git
cd bore
make build-client

The binary will be available at ./build/bore.

Prebuilt binaries

If you prefer not to build from source, prebuilt binaries are available on the Releases page:

https://github.com/Aditya-ds-1806/bore/releases

Binaries are provided for major platforms — download the appropriate release for your OS and architecture.

Usage

Expose your local server to the internet with a single command:

bore -u http://localhost:3000

That's it! You'll receive a public URL like https://abc123.trybore.com that tunnels to your local server.

Options

Flag Description
-u, --url Upstream URL to proxy requests to (required)
-v, --version Show application version

Web Inspector

When you start a tunnel, a web inspector runs at http://localhost:8000. Use it to:

  • View all incoming requests in real-time
  • Inspect request/response headers and bodies
  • Replay requests for debugging

Self-Hosting

Bore is 100% free and fully self-hostable. Run your own server for complete control over your tunneling infrastructure — no usage limits, no premium tiers, no strings attached.

Quick Setup

A complete setup script is provided for RHEL-based systems (Amazon Linux, CentOS, Fedora):

# Clone the repo and run the setup script
git clone https://github.com/Aditya-ds-1806/bore.git
cd bore
chmod +x scripts/setup.sh
sudo ./scripts/setup.sh

The script installs Go, Nginx, Certbot, and configures everything automatically.

Manual Setup

1. Build the Server

2. Configure Nginx

Copy the provided nginx.conf to /etc/nginx/nginx.conf. It handles:

  • HTTP → HTTPS redirects
  • SSL termination with Let's Encrypt
  • WebSocket upgrades for the /ws endpoint
  • Reverse proxy to the bore server on port 8080

3. Configure Systemd

Copy the provided bore.service to /etc/systemd/system/bore.service, then:

sudo systemctl daemon-reload
sudo systemctl enable bore
sudo systemctl start bore

4. SSL Certificates

Use Certbot to get a wildcard certificate for your domain:

sudo certbot certonly --manual --preferred-challenges dns -d "*.yourdomain.com" -d "yourdomain.com"

Connecting to Your Server

go build -o bore \
  -ldflags "-X 'bore/internal/client.BoreServerHost=your-server.com' -X 'bore/internal/client.WSScheme=wss'" \
  cmd/bore/main.go

Architecture

flowchart LR
    subgraph Local Machine
        A[Local Server<br/>:3000] 
        B[bore client]
    end
    
    subgraph Cloud
        C[Bore Server]
    end
    
    subgraph Internet
        D[Users]
    end
    
    A <-->|HTTP| B
    B <-->|WebSocket<br/>Encrypted| C
    D <-->|HTTPS<br/>abc123.trybore.com| C
Loading

Tech Stack

Contributing

Contributions are welcome! Feel free to open issues and pull requests.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

MIT License — see LICENSE for details.


Made with ❤️ by Aditya