{"id":112972,"date":"2026-06-06T18:34:29","date_gmt":"2026-06-06T15:34:29","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/"},"modified":"2026-06-06T18:34:29","modified_gmt":"2026-06-06T15:34:29","slug":"noderunner","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/","title":{"rendered":"NodeRunner"},"content":{"rendered":"<p># NodeRunner \ud83d\ude80<\/p>\n<p>> **Run your Node.js Discord bot directly inside your Minecraft server \u2014 no VPS, no extra hosting, no SSH.**<\/p>\n<p>NodeRunner is a Paper plugin that manages a Node.js process as a child of your Minecraft server. It handles everything automatically: downloading Node.js, installing dependencies, restarting on crash, live log streaming via a web dashboard, and Discord notifications \u2014 all from one `config.yml`.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udd95 What&#8217;s new in 1.4.0<\/p>\n<p>### Java 25 &#038; Build Modernization<br \/>\n&#8211; **Upgraded to Java 25** \u2014 compiled with Java 25 bytecode for the latest JVM performance and language features.<br \/>\n&#8211; **Gradle 9.5.1** \u2014 build system upgraded from Gradle 8.x to 9.5.1 for native Java 25 support.<br \/>\n&#8211; **Virtual thread executor** \u2014 the dashboard HTTP server now uses `newVirtualThreadPerTaskExecutor()` for non-blocking I\/O scaling on Java 25.<br \/>\n&#8211; **`plugin.yml` api-version** updated to `1.21` to match the target platform.<\/p>\n<p>### Compatibility<br \/>\n&#8211; **Minecraft 1.21.x \u2013 26.1.x** \u2014 compiled against Paper 1.21.1 API, which is forward-compatible with all Paper versions through 26.1.x.<\/p>\n<p>Existing configs remain fully compatible \u2014 no config changes required.<\/p>\n<p>&#8212;<\/p>\n<p>## \u2728 Features<\/p>\n<p>### \u26a1 Zero-Touch Node.js Setup<br \/>\nNo Node.js on your server? No problem. NodeRunner auto-detects your OS and CPU architecture and downloads the correct **Node.js LTS binary** on first launch. Works on Linux (x64 &#038; ARM64), macOS, and Windows. Downloaded once (~30MB), cached forever.<\/p>\n<p>### \ud83d\udce6 Automatic Dependency Installation<br \/>\nGot a `package.json`? NodeRunner runs `npm install` automatically before launch whenever `node_modules` is missing. No manual intervention needed.<\/p>\n<p>### \ud83d\udd01 Crash Recovery &#038; Loop Protection<br \/>\nYour bot is monitored constantly. On crash, NodeRunner waits a configurable delay and restarts it. If it crashes too many times within a short window, **crash-loop protection** halts retries and alerts you \u2014 no infinite restart spam.<\/p>\n<p>### \ud83d\udda5\ufe0f Live Web Dashboard<br \/>\nA built-in, password-protected control panel accessible from any browser:<br \/>\n&#8211; **Live log streaming** via Server-Sent Events (no page refresh)<br \/>\n&#8211; **Start \/ Stop \/ Restart \/ npm install** buttons<br \/>\n&#8211; Real-time status, uptime, PID, restart count, and **memory usage**<br \/>\n&#8211; **stdin input bar** \u2014 send commands directly to the bot process<br \/>\n&#8211; **Multi-bot selector** \u2014 switch between bots from the dashboard (auto-detected)<br \/>\n&#8211; Color-coded log output with auto-scroll toggle<br \/>\n&#8211; **CSRF protection** on all mutating endpoints<br \/>\n&#8211; **Brute-force login protection** \u2014 lockout after 5 failed attempts<\/p>\n<p>### \ud83d\udd14 Discord Webhook Notifications<br \/>\nGet pinged in Discord when your bot starts, stops, crashes, or when npm install runs \u2014 via a standard webhook URL. No bot token required. Every event type is individually toggleable.<\/p>\n<p>### \ud83c\udfae In-Game Commands<br \/>\nFull control from the Minecraft console or in-game via `\/nodebot`. No SSH session needed just to restart your bot.<\/p>\n<p>### \ud83e\udd16 Multiple Bot Support<br \/>\nRun more than one Node.js bot simultaneously \u2014 each with its own process, log file, and independent crash recovery. Control each bot individually with `\/nodebot start <name>`, `\/nodebot stop <name>`, etc.<\/p>\n<p>### \ud83d\udccc Node.js Version Pinning<br \/>\nPin a specific Node.js major version (e.g. `&#8221;22&#8243;`) instead of always downloading the latest LTS. Useful if your bot requires a specific runtime version.<\/p>\n<p>### \ud83d\udcbb stdin Passthrough<br \/>\nSend input directly to the bot process from the web dashboard without restarting it \u2014 useful for bots that accept console commands via stdin.<\/p>\n<p>### \ud83d\udcca Memory Monitoring<br \/>\nThe web dashboard shows live memory usage (RSS) of the bot process, read directly from `\/proc\/<pid>\/status` on Linux.<\/p>\n<p>### \ud83d\udd17 TunnelMC Integration<br \/>\nIf TunnelMC is installed and has an active tunnel on the dashboard port, NodeRunner will print the public URL to console when the bot starts \u2014 purely informational, TunnelMC is never auto-started.<\/p>\n<p>### \ud83d\udc0b Pterodactyl Compatible<br \/>\nFully tested on Pterodactyl panels. Uses `.tar.gz` for Node.js extraction (no `xz` dependency), and correctly injects the node binary into the process PATH for npm compatibility inside containers.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udce5 Installation<\/p>\n<p>1. Drop `NodeRunner.jar` into your `plugins\/` folder<br \/>\n2. Start the server once to generate config files<br \/>\n3. Place your bot code in `plugins\/NodeRunner\/bot\/` (needs `index.js` + `package.json`)<br \/>\n4. Set your bot token and any other secrets under `env:` in `config.yml`<br \/>\n5. Restart, or run `\/nodebot start`<\/p>\n<p>NodeRunner handles the rest \u2014 Node.js download, `npm install`, and bot launch all happen automatically.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcc2 File Structure<br \/>\n&#8220;`text<br \/>\nplugins\/<br \/>\n  NodeRunner\/<br \/>\n    config.yml          \u2190 All plugin settings<br \/>\n    bot\/                \u2190 Your bot code goes here<br \/>\n      index.js<br \/>\n      package.json<br \/>\n    logs\/<br \/>\n      bot.log           \u2190 Live output (rotates at 5MB, keeps 3 backups)<br \/>\n      bot-<name>.log    \u2190 Per-bot log files when using multiple bots<br \/>\n    nodejs\/             \u2190 Auto-downloaded Node.js binary (don&#8217;t touch)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udfae Commands &#038; Permissions<\/p>\n<p>**Permission:** `noderunner.admin` *(default: OP)*<\/p>\n<p>| Command | Description |<br \/>\n| :&#8212; | :&#8212; |<br \/>\n| `\/nodebot start [name]` | Start the bot (or a specific bot by name) |<br \/>\n| `\/nodebot stop [name]` | Stop the bot (or a specific bot by name) |<br \/>\n| `\/nodebot restart [name]` | Restart the bot (or a specific bot by name) |<br \/>\n| `\/nodebot status [name]` | Show status of all bots or a specific one |<br \/>\n| `\/nodebot install [name]` | Force re-run `npm install` |<br \/>\n| `\/nodebot reload` | Reload `config.yml` |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udf10 Web Dashboard<\/p>\n<p>Access at `http:\/\/<your-server-ip>:8080` (port is configurable).<\/p>\n<p>Password protection is enabled by default \u2014 **change the default password in `config.yml` before going public.**<\/p>\n<p>> **Pterodactyl users:** The dashboard needs a second allocated port. Ask your host to add one, or use TunnelMC or a Cloudflare Tunnel to expose it without one.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd14 Discord Webhook Setup<\/p>\n<p>1. Go to your Discord channel \u2192 **Edit Channel \u2192 Integrations \u2192 Webhooks \u2192 New Webhook**<br \/>\n2. Copy the Webhook URL<br \/>\n3. Paste it into `config.yml` under `discord.webhook.url`<br \/>\n4. Set `discord.webhook.enabled: true`<br \/>\n5. Restart or run `\/nodebot reload`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udc0b Pterodactyl Notes<\/p>\n<p>NodeRunner is fully tested on Pterodactyl. Keep in mind:<\/p>\n<p>&#8211; The plugin uses `.tar.gz` for Node.js to avoid the `xz` dependency missing in most container images<br \/>\n&#8211; If a previous install failed, delete `plugins\/NodeRunner\/nodejs\/` and restart to re-download<br \/>\n&#8211; Set your bot token and other secrets via `env:` in `config.yml` \u2014 do **not** hardcode them in your bot files<br \/>\n&#8211; The dashboard needs a separate allocated port \u2014 ask your host to add one<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcca Compatibility<\/p>\n<p>| | |<br \/>\n| :&#8212; | :&#8212; |<br \/>\n| **Minecraft** | Paper 1.21.x \u2013 26.1.x |<br \/>\n| **Java** | 25+ (compiled with Java 25) |<br \/>\n| **OS** | Linux, macOS, Windows |<br \/>\n| **Architectures** | x64, ARM64 |<br \/>\n| **Hosting** | Self-hosted, Pterodactyl, any VPS |<\/p>\n<p>> **\u26a0\ufe0f Java 25 Required:** The JAR is compiled with Java 25 and uses virtual threads. Your server must run **Java 25 or higher**. **Paper 1.21.x+ with Java 25** is the recommended and fully tested setup.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd17 Related<\/p>\n<p>**TunnelMC** \u2014 Expose any server port to the internet via ngrok tunnels. Pairs perfectly with NodeRunner to make the web dashboard publicly accessible without needing an extra port allocation.<\/p>\n<p>**PyRunner** \u2014 The Python equivalent of this plugin. Run a Python Discord bot alongside your Minecraft server.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcc4 License<\/p>\n<p>**All Rights Reserved** \u2014 This plugin and its source code are proprietary. You may not copy, redistribute, modify, or decompile this software without explicit written permission from the author.<\/p>\n<p>&#8212;<\/p>\n<p>*Developed by Spider*<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Run your Node.js Discord bot directly alongside your Minecraft server! Features auto-setup, live web dashboard, and in-game controls<\/p>\n","protected":false},"featured_media":112973,"template":"","meta":{"_minecraft_slug":"noderunner","_minecraft_project_id":"YL9bPIyR","_minecraft_author":"spider2742","_minecraft_license":"LicenseRef-All-Rights-Reserved","_minecraft_downloads":19,"_minecraft_follows":1,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"noderunner.zip","_minecraft_size_bytes":297480,"_minecraft_version_count":5,"_minecraft_updated_at":"2026-05-15T22:42:11.908525Z","_minecraft_date_created":"2026-04-10T23:52:35.534595Z","_minecraft_date_modified":"2026-05-14T12:28:19.667092Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/noderunner","_minecraft_icon_attachment_id":112973,"_minecraft_imported_at":"2026-06-06T15:34:30+00:00","_minecraft_import_hash":"1127801a69a2c957be419935d6b0b4df","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,125,126,127,128,129,123,92],"mod_loader":[130,131,132,133,134],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82,83,167,163],"class_list":["post-112972","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bukkit","mod_category-folia","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-technology","mod_category-utility","mod_loader-bukkit","mod_loader-folia","mod_loader-paper","mod_loader-purpur","mod_loader-spigot","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-26-1","minecraft_version-26-1-1","minecraft_version-26-1-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>NodeRunner - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NodeRunner - Minecraft\" \/>\n<meta property=\"og:description\" content=\"Run your Node.js Discord bot directly alongside your Minecraft server! Features auto-setup, live web dashboard, and in-game controls\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/\",\"name\":\"NodeRunner - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp\",\"datePublished\":\"2026-06-06T15:34:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/noderunner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"NodeRunner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NodeRunner - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/","og_locale":"en_US","og_type":"article","og_title":"NodeRunner - Minecraft","og_description":"Run your Node.js Discord bot directly alongside your Minecraft server! Features auto-setup, live web dashboard, and in-game controls","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/","name":"NodeRunner - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp","datePublished":"2026-06-06T15:34:29+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/noderunner-icon-a397549f12f945a0656da8515280c83c187101dd_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/noderunner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"NodeRunner"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/112972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/112973"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=112972"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=112972"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=112972"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=112972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}