Elasiya is an open-source, ngrok-like HTTP tunnel written in Go. It exposes your local services to the internet instantly β no configuration needed.
- Features
- Installation
- Quick Start
- Usage Guide
- Running the Server
- Project Structure
- Contributing
- License
- Instant tunnels β expose any local port with one command (
elasiya http 3000) - WebSocket-based β efficient, low-latency bidirectional communication
- Auto-reconnect β client reconnects automatically on drop
- Concurrent requests β handles multiple simultaneous HTTP requests per tunnel
- Token auth β simple token-based access control
- Dashboard β built-in web dashboard at
/dashboard - Self-hostable β run your own server with a single binary
brew tap sardorazimov/elasiya
brew install elasiyacurl -fsSL https://raw.githubusercontent.com/sardorazimov/elasiyanetwork/main/install.sh | sudo bashOr add the apt repository:
sudo apt update
sudo apt install elasiyago install github.com/sardorazimov/elasiyanetwork/cmd/elasiya@latestMake sure
$GOPATH/bin(usually~/go/bin) is in your$PATH.
# Clone the repository
git clone https://github.com/sardorazimov/elasiyanetwork.git
cd elasiyanetwork
# Download dependencies
go mod download
# Build the client CLI
go build -o elasiya ./cmd/elasiya
# Build the server
go build -o elasiya-server ./cmd/elasiya-server
# (optional) Move to PATH
sudo mv elasiya /usr/local/bin/
sudo mv elasiya-server /usr/local/bin/curl -fsSL https://raw.githubusercontent.com/sardorazimov/elasiyanetwork/main/install.sh | bash- Start the server (or use a hosted Elasiya server):
elasiya-server
# Server listening on :8080- In another terminal, expose your local service:
# Expose localhost:3000
elasiya http 3000
# Output:
# π Elasiya Tunnel v1.0.0
# βββββββββββββββββββββββββββββββββββββββββ
# Server ws://localhost:8080
# Tunnel http://localhost:8080/ela-ela_fre β http://localhost:3000
# βββββββββββββββββββββββββββββββββββββββββ
# Press Ctrl+C to stopelasiya [options] <command> [args]
COMMANDS:
http <port> Expose a local HTTP service on <port>
version Print version and exit
OPTIONS:
--server string Elasiya server WebSocket address
Default: ws://localhost:8080
Env: ELASIYA_SERVER
--token string Auth token
Default: ela_free_test
Env: ELASIYA_TOKEN
--host string Custom tunnel hostname (optional)
# Expose port 3000 with default settings
elasiya http 3000
# Use a remote server
elasiya http 3000 --server ws://tunnel.elasiya.network
# Use a custom token
elasiya http 8080 --token my-secret-token
# Custom host name
elasiya http 3000 --host myapp
# Use environment variables
export ELASIYA_SERVER=ws://tunnel.elasiya.network
export ELASIYA_TOKEN=my-secret-token
elasiya http 3000
# Print version
elasiya version# Start server on default port 8080
elasiya-server
# Override token via environment variable
ELASIYA_TOKEN=my-secret-token elasiya-serverThe server exposes:
| Endpoint | Description |
|---|---|
/tunnel |
WebSocket endpoint for client tunnel handshake |
/<anything> |
Proxies incoming HTTP requests to the tunnel |
# Build the image
docker build -t elasiyanetwork:latest .
# Run the server
docker run -d -p 8080:8080 --name elasiya-server elasiyanetwork:latest
# Run with a custom token
docker run -d -p 8080:8080 -e ELASIYA_TOKEN=my-token --name elasiya-server elasiyanetwork:latest
# Using Docker Compose
docker compose up -d --build.
βββ cmd/
β βββ elasiya/ # Client CLI entry point
β βββ elasiya-server/ # Server entry point
βββ internal/
β βββ auth/ # Token verification
β βββ server/ # HTTP proxy + WebSocket handler
β βββ tunnel/ # Tunnel registry
βββ protocol/ # Shared message types
βββ install.sh # Quick-install script
βββ Dockerfile # Multi-stage Docker build
βββ go.mod
βββ LICENSE
Internet
β
βΌ
elasiya-server (:8080)
β WebSocket /tunnel
ββββββββββββββββββββββββΊ elasiya client (your machine)
β β
β HTTP request arrives β forward to localhost:<port>
β server sends to client ββββββ
β client returns response
β server writes HTTP response
βΌ
Caller gets response
Contributions are welcome! Here's how:
- Fork the project
- Create your feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
MIT License β see LICENSE for details.
Copyright Β© 2026 Sardor Azimov