EcliTunnel is a TCP tunnelling system built into EcliPanel. It lets users expose a locally running service (a game server, a development API, any TCP service) to the internet through a public port allocation managed by the panel. The system is made up of two Rust agents — a client agent that runs on the user’s machine and a server agent that runs on a publicly reachable host — along with a control plane hosted in the EcliPanel backend.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/thenoname-gurl/EcliPanel/llms.txt
Use this file to discover all available pages before exploring further.
Tunnels are controlled by the
tunnels feature flag. If the flag is disabled, the Tunnels navigation item is hidden and all /api/tunnel/* endpoints are inaccessible.How tunnels work
The control plane (backend WebSocket) coordinates enrollment, approval, and allocation, but tunnel data travels directly between the server agent and the client agent — it does not flow through the backend:Device enrollment
Both client and server agents must be enrolled and approved before they can connect. The enrollment flow is:Start enrollment
The client agent calls
POST /api/tunnel/device/start to begin enrollment and receives a user code.Approve in the panel
A panel admin or the device owner approves the device via
POST /api/tunnel/device/approve in the dashboard at /dashboard/tunnels.Running the client agent
Build and run the client agent from thetunnel/client directory:
Run with a new allocation
After approval, start the agent and request a public tunnel allocation in the same command:
--verbose before the subcommand:
Running the server agent
The server agent must be enrolled with an admin JWT and then run as a long-lived process:Managing allocations from the CLI
Use theallocations subcommand to list, close, or delete your current tunnel allocations interactively:
- Press
cto close an allocation (removes the active tunnel but keeps the record) - Press
dto permanently delete an allocation
API endpoints
The following REST endpoints back the tunnel dashboard and the Rust agents:| Endpoint | Description |
|---|---|
GET /api/tunnel/allocations | List tunnel allocations visible to you |
GET /api/tunnel/devices | List your enrolled devices |
POST /api/tunnel/device/approve | Approve a pending device |
DELETE /api/tunnel/devices/:id/delete | Delete a device |
POST /api/tunnel/devices/:id/regenerate-token | Rotate a device’s access token |
POST /api/tunnel/device/start | Begin device enrollment (used by the Rust agent) |
GET /api/tunnel/device/poll | Poll for enrollment approval (used by the Rust agent) |
Self-hosting the server agent
When self-hosting, set theTUNNEL_PUBLIC_HOST environment variable on the backend to the public hostname of your server agent host. The panel constructs the public endpoint shown to users as <TUNNEL_PUBLIC_HOST>:<allocated_port>.
Make sure TUNNEL_PUBLIC_HOST resolves in DNS to the machine running your server agent before starting any agents.