Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
TunnelMC 🌐
Expose any local port to the internet via ngrok or cloudflared — no port allocations needed. Includes a full browser-based management dashboard.
TunnelMC is a Bukkit/Spigot/Paper plugin that automatically downloads and manages ngrok and/or cloudflared, creates tunnels for any local port, and broadcasts the public URL to console and online OPs the moment the tunnel is ready.
🆕 What's New in 1.2.0
Cloudflared Support
Every tunnel now has its own provider field. Choose ngrok or cloudflared per tunnel, or mix them in the same config.
Cloudflared quick tunnels — zero account setup, random *.trycloudflare.com URL, HTTP only. Great for dashboards and web services.
Cloudflared named tunnels — paste a Cloudflare Zero Trust token and your custom hostname. Persistent URL, any protocol you've configured in Cloudflare.
Multiple ngrok Accounts
Each ngrok tunnel now has its own authtoken field (required for ngrok v3). Authtokens are passed as a CLI flag instead of writing to the global ngrok config, so you can run tunnels from completely different ngrok accounts at the same time.
Per-Tunnel Region
Each ngrok tunnel can set its own region, overriding the global default.
Web Dashboard
A full browser-based management dashboard on port 8090 (local only). From it you can:
- View all tunnels — status, URL, uptime, restarts
- Start / stop / restart tunnels individually
- Create, edit, and delete tunnels live — no server restart needed
- Download ngrok and cloudflared binaries with one click
- Edit all global settings
Auto-Expose on First Run
If no tunnels are configured, TunnelMC automatically downloads cloudflared and creates a quick tunnel to the dashboard on first startup so you can access it from anywhere right away.
Per-Tunnel Auto-Start
Each tunnel has its own auto-start field. Set it to true to start a tunnel on server boot even when global auto-start is off. The default dashboard tunnel ships with auto-start: true.
✨ Features
🌐 Two Tunnel Providers — ngrok and cloudflared, configurable per tunnel. Mix them freely.
🔑 Multiple ngrok Accounts — Each ngrok tunnel has its own authtoken (required for v3). Run different accounts simultaneously.
🚀 Zero-Setup Quick Tunnels — Cloudflared quick tunnels work out of the box with no account.
📌 Custom Domains — Cloudflared named tunnels give you persistent custom hostnames via Cloudflare Zero Trust.
🖥️ Web Dashboard — Full management UI. Create/edit/delete tunnels live, download binaries, change settings — all from a browser.
⚡ Auto-Download — Detects OS and CPU arch, downloads the right binary on first use. Cached forever after.
🔔 Instant URL Broadcast — URL goes to console and all online OPs the moment the tunnel is ready.
🎮 Full Command Support — /tunnel with tab completion for everything.
🔁 Auto-Restart & Crash Loop Protection — Tunnels restart after failure. Stops retrying if it fails too many times in a short window.
🩺 Health Checks — ngrok tunnels get API-level checks; cloudflared tunnels get process-alive checks.
🐋 Pterodactyl Compatible — Tunnels are outbound connections, so no extra port allocations are ever needed.
📥 Installation
- Drop
TunnelMC.jarintoplugins/ - Start the server — TunnelMC generates config and auto-exposes the dashboard via cloudflared if no tunnels are configured
- Open the printed URL in your browser
- Configure tunnels from the dashboard, or edit
config.ymland run/tunnel reload
⚙️ Configuration
auto-start: false
default-region: "us" # fallback region for ngrok tunnels
notify-ops: true
auto-restart: true
restart-delay-seconds: 10
max-restarts: 5
crash-window-seconds: 60
health-check-interval-seconds: 30
dashboard:
enabled: true
port: 8090
bind-address: "127.0.0.1"
password: "changeme"
auto-expose-on-first-run: true
tunnels:
# Cloudflared quick tunnel — no account, random URL, HTTP only
- name: "dashboard"
port: 8090
provider: "cloudflared"
auto-start: true
# ngrok HTTP tunnel with its own account token
- name: "noderunner"
port: 8080
provider: "ngrok"
protocol: "http"
region: "us"
authtoken: "your-ngrok-token-here"
# ngrok TCP tunnel from a different account
- name: "gameserver"
port: 25565
provider: "ngrok"
protocol: "tcp"
region: "eu"
authtoken: "another-account-token"
# Cloudflared named tunnel — persistent custom domain
- name: "mc"
port: 25565
provider: "cloudflared"
token: "your-cloudflare-zero-trust-token"
hostname: "mc.yourdomain.com"
🎮 Commands & Permissions
Permission: tunnelmc.admin (default: OP)
| Command | Description |
|---|---|
/tunnel start [name] |
Start all or a specific tunnel |
/tunnel stop [name] |
Stop all or a specific tunnel |
/tunnel restart [name] |
Restart all or a specific tunnel |
/tunnel url [name] |
Show public URL(s) |
/tunnel status |
Show all tunnel status |
/tunnel download ngrok |
Download ngrok binary |
/tunnel download cloudflared |
Download cloudflared binary |
/tunnel dashboard |
Show dashboard port info |
/tunnel reload |
Reload config and restart tunnels |
📋 Provider Comparison
| ngrok | Cloudflared Quick | Cloudflared Named | |
|---|---|---|---|
| Account required | ✅ free | ❌ none | ✅ free |
| HTTP tunnels | ✅ | ✅ | ✅ |
| TCP tunnels | ✅ | ❌ | ✅ |
| Persistent URL | paid only | ❌ | ✅ |
| Multiple accounts | ✅ per-tunnel | — | — |
⚠️ Free Plan Notes
ngrok free: one active tunnel at a time, random URL on each restart, bandwidth limits. Authtoken is required for all ngrok v3 tunnels. Per-tunnel authtokens let you use multiple free accounts to work around the one-tunnel limit.
Cloudflared quick tunnels: HTTP only, random *.trycloudflare.com URL, no bandwidth limits.
Cloudflared named tunnels: require a Cloudflare account (free), any protocol, persistent custom domain.
🐋 Pterodactyl
No extra port allocations needed — tunnels are outbound connections only. The dashboard also binds locally and doesn't need an allocated port.
Slow download? TunnelMC will warn after 30 seconds with manual install steps. Place the binary at plugins/TunnelMC/ngrok/ngrok or plugins/TunnelMC/cloudflared/cloudflared and restart.
📊 Compatibility
| Platforms | Bukkit, Spigot, Paper, Purpur |
| Minecraft | 1.13+ |
| Java | 21+ |
| OS | Linux, macOS, Windows |
| Arch | x64, ARM64 |
🔗 Related
NodeRunner — Run a Node.js Discord bot inside your Minecraft server.
PyRunner — Run a Python Discord bot inside your Minecraft server.
TunnelMC pairs perfectly with both — a cloudflared quick tunnel to port 8080 makes their dashboards publicly accessible with zero port allocation.
Developed by Spider


