No Client Installation Required

Expose Localhost to the Internet. Securely.

The self-hosted, clientless alternative to ngrok. Maintain full control over your data and traffic with strict access policies.

+--- user@local:~ ---+
$ cat features.txt

Key Features

Zero Config

[OK]
--------------------------------

Works with standard OpenSSH installed on every machine. No client installation required.

Device Flow Auth

[OK]
--------------------------------

Secure, browser-based authentication for every session. OAuth 2.0 device flow.

Rust Core

[OK]
--------------------------------

Built on russh and tokio for high-performance async concurrency and minimal overhead.

God Mode

[OK]
--------------------------------

Admins can monitor active connections and terminate suspicious tunnels instantly.

Virtual Ports

[OK]
--------------------------------

Smart port handling - bind to port 80, forward to any local port seamlessly.

Private & Secure

[OK]
--------------------------------

Data never leaves your infrastructure. TLS termination and end-to-end encryption included.

$ ./explain --architecture

How It Works

STEP 01

Terminal

================

User runs ssh -R from any machine with OpenSSH installed.

STEP 02

Gatekeeper

================

Node.js web server initiates device flow authentication.

STEP 03

Tunnel

================

Rust server establishes high-performance stream connection.


┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│  YOUR DEV   │      │  GATEKEEPER │      │   TUNNEL    │
│   MACHINE   │─────▶│   NODE.JS   │─────▶│    RUST     │
│  (ssh -R)   │      │  (auth)     │      │  (stream)   │
└─────────────┘      └─────────────┘      └─────────────┘
       │                                         │
       │                                         │
       └─────────── localhost:3000 ◀─────────────┘
                    EXPOSED AS
                 https://demo.youdomain
$ sudo ./install.sh

Self-Host in Minutes

Deploy your own tunnel server with Docker. Full control, zero dependencies on external services.

Docker Compose
$ docker-compose up -d
Docker
$ docker pull ghcr.io/ZingerLittleBee/EXLO:latest
From Source
$ git clone https://github.com/ZingerLittleBee/EXLO && cd EXLO && cargo build --release
+--- .env.example ---+
# Server Configuration
DOMAIN=your.domain
SSH_PORT=2222
HTTP_PORT=80
HTTPS_PORT=443

# Authentication
AUTH_PROVIDER=github
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret

# Database
DATABASE_URL=postgres://user:pass@localhost/fwd

# TLS (auto-generated if not provided)
TLS_CERT_PATH=/etc/ssl/certs/fwd.crt
TLS_KEY_PATH=/etc/ssl/private/fwd.key
$ git commit -m "Add awesome feature"

Contribute to EXLO

Open source thrives on community contributions. Here's how you can help make EXLO better.

Report Issues

Found a bug? Open an issue on GitHub with steps to reproduce.

$ gh issue create

Submit PRs

Fork the repo, make changes, and submit a pull request.

$ git checkout -b feature/awesome

Improve Docs

Help us improve documentation and tutorials.

$ vim docs/README.md

Join Discord

Connect with other contributors and maintainers.

$ discord.gg/fwd-rs
>CONTRIBUTING.md

1. Fork the repository and create your branch from `main`.

2. If you've added code that should be tested, add tests.

3. Ensure the test suite passes with `cargo test`.

4. Make sure your code follows the existing style (`cargo fmt`).

5. Issue that pull request!

$ whois --community

Join the Community

Connect with developers who are building and using EXLO around the world.

GitHub Stars

Show your support by starring the repository on GitHub

[ ★ STAR ON GITHUB ]