Awesome Go

expose

CategoryNetworking
SubcategoryNetworking
Stars21

Lightweight, open-source secure tunneling tool to expose local servers to the internet

About expose

Expose โ€“ Pure Go Localhost Tunneling CLI

Expose Social Preview

Downloads Documentation Tests Go Report Card License: Apache 2.0

Turn your localhost into a public shareable URL in one command โ€” zero config, zero signups, and a single <10MB binary.
The lightweight, open-source Go alternative to ngrok for webhook testing, mobile previews, and remote debugging.

Install via Homebrew:

brew install kernelshard/tap/expose

Tunnel your local server (e.g. port 3000):

expose tunnel 3000

๐Ÿ’ก What is this for?

When you run an app on http://localhost:3000, only your laptop can access it. Expose creates a temporary public HTTPS URL that connects directly to your local server:

  • ๐Ÿช Webhook Testing: Give Stripe, GitHub, or Twilio a live HTTPS URL to test webhook callbacks locally.
  • ๐Ÿ“ฑ Mobile & Device Testing: Open your local website on a physical smartphone or tablet over 4G/5G.
  • ๐Ÿ‘ฅ Instant Previews: Send a live demo link to a friend or client without deploying to cloud servers.
  • ๐Ÿ  Private Self-Hosting: Route traffic through your own private VPS instead of commercial SaaS relays.

๐Ÿ†š Why Expose?

Feature๐Ÿš€ ExposengrokCloudflare TunnelLocalTunnel (Node)
Zero Signup Requiredโœ… InstantโŒ Mandatory accountโŒ Mandatory accountโœ… Instant
Single Static Binaryโœ… (<10MB)โœ… (~30MB)โœ… (~50MB)โŒ (requires Node.js)
Open Sourceโœ… Apache 2.0โŒ Proprietaryโœ… Apache 2.0โœ… MIT
Self-Hostable Relayโœ… expose serverโŒ SaaS onlyโŒ Cloudflare networkโš ๏ธ Legacy Node server
Language & RuntimePure Go (zero CGO)Go / CGo daemonNode.js (V8 heap)
Free Custom Domains๐Ÿšง Planned (#62)๐Ÿ’ฒ Paid planโœ… Cloudflare DNSโŒ Not supported

โšก Quick Examples

# Tunnel a local development server (defaults to port 3000)
expose tunnel 3000

# Tunnel via Cloudflare Quick Tunnels
expose tunnel -P cloudflare -p 8080

# Connect to your private self-hosted relay gateway
expose tunnel 3000 --server=tunnel.mysite.com:7890

๐Ÿ“ฆ Installation Options

1. Homebrew (macOS & Linux โ€” Recommended)

brew install kernelshard/tap/expose

2. One-Line Shell Installer

curl -fsSL https://raw.githubusercontent.com/kernelshard/expose/main/install.sh | sh

Pin a specific version or install to a custom path:

# Pin version
VERSION=v0.5.0 curl -fsSL https://raw.githubusercontent.com/kernelshard/expose/main/install.sh | sh

# Custom directory
BINDIR=~/.local/bin curl -fsSL https://raw.githubusercontent.com/kernelshard/expose/main/install.sh | sh

3. Pre-built Binaries

Download the latest pre-compiled binary for your architecture (macOS, Linux, Windows) from the Releases Page.

4. Via Go Install (Go 1.22+)

go install github.com/kernelshard/expose/cmd/expose@latest

5. From Source

git clone https://github.com/kernelshard/expose.git
cd expose
go build -o expose ./cmd/expose
./expose --version

๐Ÿ  Self-Hosted Relay Server

Need complete privacy and zero third-party relay dependence? Run your own tunnel gateway on any $5 VPS with a single command:

# Start your private relay server
expose server --domain=tunnel.mysite.com --control-port=7890 --public-port=8080

Connect your client to your VPS:

expose tunnel 3000 --server=tunnel.mysite.com:7890

โš™๏ธ Project Configuration (.expose.yml)

Save defaults per project so you can just type expose tunnel:

# Create .expose.yml in current directory
$ expose init
โœ“ Config created: .expose.yml
project: expose
port: 3000

Manage and query configuration values:

expose config list
expose config get port

๐Ÿ— Architecture & Design Principles

expose/
โ”œโ”€โ”€ cmd/expose/       # CLI entry point (Cobra)
โ”œโ”€โ”€ internal/
โ”‚   โ”œโ”€โ”€ cli/          # Cobra subcommands & flag parsing
โ”‚   โ”œโ”€โ”€ config/       # YAML config management
โ”‚   โ”œโ”€โ”€ provider/     # Tunnel providers (LocalTunnel, Cloudflare, Self-Hosted)
โ”‚   โ”œโ”€โ”€ server/       # Self-hosted relay control & public server
โ”‚   โ”œโ”€โ”€ tunnel/       # Core service orchestration & lifecycle
โ”‚   โ””โ”€โ”€ version/      # Build metadata & version injection
โ””โ”€โ”€ .expose.yml       # Local project configuration
  • Interface-Driven: Extensible Provider interface makes adding new tunnel backends straightforward.
  • Clean Separation: CLI โ†’ Service โ†’ Provider (strict unidirectionality, zero circular dependencies).
  • Fully Testable: High test coverage (>80%) across packages with race detector validation (go test -race).

๐Ÿงช Development & Testing

# Run all unit tests with Go race detector
go test ./... -v -race -cover

# Package-specific coverage
go test ./internal/tunnel -cover
go test ./internal/server -cover
go test ./internal/provider -cover

๐Ÿค Contributing

Contributions are welcome! Please check out CONTRIBUTING.md for branch strategy, test requirements, and code style guidelines.


๐Ÿ“ License

Distributed under the Apache License 2.0. See LICENSE for details.


Made with โค๏ธ by @kernelshard

Frequently Asked Questions

What is expose?

expose is a Networking library for the Go programming language. Lightweight, open-source secure tunneling tool to expose local servers to the internet

How do I install expose?

Install expose with the Go module system using `go get kernelshard/expose`. Check the repository for the current installation instructions.

What category does expose belong to?

expose is listed under Networking, specifically Networking.

โ† Back to Networking