Standalone Process Wrapper · Not a Plugin

One Wrapper.
Everything Managed.

Run Node.js bots, Python bots, multiple Minecraft servers, and tunnels (ngrok, cloudflared, playit.gg) from one process — with a single web dashboard you can manage, and share access to, from anywhere. Works self-hosted or on Pterodactyl, even when the Minecraft server itself is stopped.

3-in-1Bots + MC + Tunnels
Self-Hostedor Pterodactyl
3Tunnel Providers
What it does

Everything your server needs to run, in one process

PteroWrapper is the combined functionality of NodeRunner, PyRunner, and TunnelMC — compiled into a single wrapper that makes running and managing a server genuinely easy, whether it's self-hosted on a home machine or running on Pterodactyl.

🖥️
Manage It — and Share Access — From Anywhere
A sidebar-driven web UI — live status, real log viewers with severity filtering, add/edit/delete for every bot, server, and tunnel, categorized settings — all from a browser. Pair it with a tunnel and you can check on or hand console access to a friend or co-admin without SSH, RDP, or Pterodactyl at all — works exactly the same self-hosted as it does in a container.
🤖
Multi-Bot Management
Run multiple Node.js and Python bots at once, each with independent start/stop/restart, crash-loop protection, and its own live console.
⛏️
Multiple Minecraft Servers
Spawn one or more servers as child processes with full stdin/stdout piping. On Pterodactyl, port and JVM memory auto-detect from the container's allocation when left blank — set them explicitly for local hosting.
🌐
Three Tunnel Providers
ngrok, cloudflared, and playit.gg, configurable per tunnel. Mix them freely; add/edit/delete live from the dashboard.
🔁
Crash-Loop Protection
Every managed process shares one windowed crash-restart policy — retry with a delay, stop retrying if it fails too often too fast.
📦
Zero-Config Start
Auto-downloads Node.js, creates Python venvs, auto-downloads tunnel binaries, accepts the Minecraft EULA — all on first use.
💬
Two-Way Discord Control
Optional plugin — /node, /python, /mc, /tunnel, and /status slash commands, with per-command permissions (specific roles and users, or everyone). Kept as a separate ~16MB download so it doesn't bloat the base install for everyone else — grab it from the section below.
Getting started

Set up in four steps

No plugins/ folder — PteroWrapper is the process, whether that's a Pterodactyl egg or just java -jar on your own machine.

1
Download PteroWrapper.jar. Self-hosting? Run java -jar PteroWrapper.jar. On Pterodactyl, upload it, then either rename it to match your egg's "Server Jar File" startup variable (often server.jar) or just change that variable to PteroWrapper.jar — either way, no need to touch the startup command itself, which most panels won't let you edit anyway.
2
Start the server — PteroWrapper generates config.yml on first run and, if no tunnels are configured, auto-exposes the dashboard via a cloudflared quick tunnel.
3
Open the printed URL and log in.
4
Add bots, Minecraft servers, and tunnels from the dashboard — or edit config.yml directly and run reload from the console.
minecraft: servers: - name: "survival" jar-file: "server.jar" port: "" # blank = read $SERVER_PORT jvm-args: "" # blank = derive from $SERVER_MEMORY auto-start: true tunnels: entries: - name: "dashboard" port: 8080 provider: "cloudflared" auto-start: true node: bots: - name: "discord-bot" entry-file: "bots/discord/index.js" auto-start: true
Optional add-on

Two-way Discord control, as a separate plugin

A real Discord bot — /node, /python, /mc, /tunnel, and /status slash commands, with per-command permissions. Kept out of the base install (the Discord library it needs adds ~16MB that most people don't want) — grab it separately only if you use it.

1
Download discord-plugin.jar and place it in a pterowrapper-plugins/ folder next to PteroWrapper.jar — create the folder if it doesn't exist. Named differently from a Minecraft server's own plugins/ folder on purpose, so the two never collide.
2
In the dashboard's Settings tab, enable the bot and paste your bot token and Discord server (guild) ID — a one-click "Download & Install" button is right there too, if you'd rather skip step 1.
3
Grant permissions per command from the same tab — every command is denied to everyone until you explicitly allow it, so nothing is open by default. Roles, specific users, or "everyone" — mix freely per command.
discord: bot: enabled: true token: "..." guild-id: "..." permissions: node-start: [everyone] mc-restart: - "role:123456789012345678"
Prefer the terminal

Full control from the console too

Everything the dashboard can do is also a console command — Pterodactyl's console or a plain terminal, same commands either way.

CommandDescription
statusShow every managed service's status
node <start|stop|restart|list> [name]Control Node.js bots
py <start|stop|restart|list> [name]Control Python bots
mc <start|stop|restart|send> [name]Control Minecraft servers
tunnel <start|stop|restart|list> [name]Control tunnels
tunnel playit <claim|status|unlink>Link/check/unlink a playit.gg account
reloadReload config.yml and re-sync tunnels

Runs anywhere Java does

Java 25+
🎮Any MC server jar
🐧Linux
🍎macOS
🪟Windows
💻Self-Hosted
🐋Pterodactyl-native