StackNest Documentation

Everything you need to get better generations, cleaner outputs, and a smoother path from prompt to deployed plugin.

Best place to start

If you are new, read Your first plugin, copy the prompt template, then come back to validation if you want to improve a result.

What is StackNest?

StackNest is an AI development tool for Minecraft server plugins, Fabric/Forge/NeoForge mods, and related server workflows. You describe what you want in plain English — for example “a Fabric mod that adds a /heal command and a glowing apple item” or “a plugin that rewards players when they vote” — and StackNest generates the code, metadata, and validation feedback.

You do not need to be a Java expert to get started. The goal is to shorten the path from idea to working plugin or mod, then give you enough tooling to refine, validate, and deploy with confidence.

Quick start

Head to the app, describe your plugin in one or two clear sentences, and hit Generate. Simple requests are usually faster; larger multi-feature plugins may take longer while validation finishes.

Discord bot hosting

StackNest also includes hosted Discord bots at /bots. You can generate a bot with AI or upload your own Python .py file (or a .zip archive), then deploy and manage it in one place.

Custom bot upload

Uploaded bots follow the same hosted runtime flow as generated bots, including lifecycle controls and log viewing.

Generating mods with AI

In addition to server plugins, StackNest can generate Fabric, Forge, and NeoForge mods from a single prompt. Mod generation runs through the same AI pipeline as plugin generation, but produces mod-specific source files instead of a compiled server plugin.

What you get from a mod generation:

Mods are compiled server-side

StackNest runs a real Gradle build for every mod generation using the official Fabric Loom / ForgeGradle / NeoGradle toolchain. If compilation succeeds you get a downloadable .jar — drop it straight into your mods/ folder. If the build has errors, StackNest automatically retries with targeted corrections before returning the result.

Fabric, Forge & NeoForge

Fabric
Lightweight modern mod loader
The most actively developed loader for recent Minecraft versions (1.14+). Uses fabric.mod.json, the Fabric API, and Mixins. Recommended for most new mods on 1.20+. StackNest injects live PaperMC/Adventure doc context into Fabric generations.
Forge
Classic loader — largest ecosystem
The original major mod loader with the largest existing mod library. Uses mods.toml and @Mod annotations. Good choice when you need to depend on other Forge mods. Works on 1.20.1 and earlier as well as recent releases.
NeoForge
Modern Forge fork (1.20.2+)
A community fork of Forge that cleaned up the API and improved build tooling. Recommended over Forge for new projects targeting 1.20.2 or later. Uses the same @Mod pattern with neoforge.mods.toml and net.neoforged.* imports.

Your first mod

  1. Switch to Mods mode In the generator at /app, click the Mods pill at the top of the composer. The control strip will change to show mod options.
  2. Choose your loader and MC version Select Fabric, Forge, or NeoForge and pick the Minecraft version you are targeting. Give your mod a name.
  3. Select feature chips (optional) Toggle chips like Custom items, Commands, Event listeners, or Config file to add those patterns to your generation.
  4. Describe your mod Write what the mod should do, e.g. “A Fabric 1.21 mod that adds a /heal command and a custom glowing apple item.” The more detail, the better the output.
  5. Download your compiled .jar When the build succeeds, click the Download .jar button and drop the file into your server’s mods/ folder. If compilation did not succeed, the full source files are still available so you can build locally with ./gradlew build.

Skript generation

Skript is a scripting plugin for Paper that lets you add game logic in plain-English syntax — no Java compilation needed. StackNest generates complete .sk script files using the Skript 2.x rule set.

How to generate a Skript

  1. Click the Skript pill On the generator at /app, click Skript in the mode pills row. The composer strips down to just a text box — no loader or version selector needed.
  2. Describe what you want Write what the script should do, e.g. “A /sethome and /home command that saves each player’s home location and teleports them back to it.”
  3. Download and install Save the generated .sk file into your server’s plugins/Skript/scripts/ folder. Run /sk reload all or restart the server.
Skript requirements

Your server must have the Skript plugin (2.x, latest stable) installed on a Paper server. Skript does not work on Fabric, Forge, or Vanilla.

What StackNest enforces for Skript

✓ Good Skript prompt

A Skript with /sethome and /home commands. /sethome saves the player’s current location to a global variable keyed by their UUID. /home teleports them back to that location, or tells them they have no home set. Add a 5-second cooldown on /home.

Datapack generation

Vanilla datapacks let you modify game behaviour without a plugin or modloader — using only JSON files, .mcfunction scripts, and folder conventions that Minecraft reads natively.

StackNest generates a complete datapack file tree for MC 1.21+ and labels each file with its intended path, so you know exactly where to place it.

How to generate a datapack

  1. Click the Datapacks pill On the generator at /app, click Datapacks. A MC version dropdown appears — pick the version you are targeting.
  2. Describe your datapack Explain what it should do: “Give players the Speed II effect when they eat a golden carrot. Remove it after 30 seconds.”
  3. Install the output Create a folder inside your world’s datapacks/ directory with the namespace name. Drop the generated files into the correct sub-paths (each file in the output starts with a comment showing its path). Run /datapack enable "file/<name>" and /reload.

What StackNest generates for datapacks

No compile step for datapacks or Skript

Unlike plugins, Skript scripts and datapacks are not compiled by StackNest — Minecraft itself parses them at load time. If a datapack or Skript has a syntax error, check the server console for the specific line that failed.

Your first plugin

  1. Create a free account Go to /app and sign up with your email. Verify your email — you'll get a confirmation link.
  2. Describe your plugin Type what you want in the prompt box. Be specific — the more detail you give, the better the result. See Writing better prompts.
  3. Wait for generation Click Generate. StackNest writes your plugin, validates it, and attempts automatic corrections when needed. This usually takes 15–60 seconds, but larger plugins can take longer.
  4. Download your JAR Once generated, click Download JAR. Drop the .jar file into your server's plugins/ folder and restart.

Writing better prompts

The quality of your plugin depends heavily on how clearly you describe it. Here are the key things to include:

Prompt template

Use this structure when you want more reliable results:

Build a Paper 26.1 plugin.

Main features:
- [feature 1]
- [feature 2]

Commands:
- /example

Permissions:
- example.use for regular players
- example.admin for admins

Config:
- message text should be configurable
- cooldown should default to 30 seconds

Storage / integrations:
- use YAML / SQLite / Vault / LuckPerms

Notes:
- make this Folia-compatible if needed
- keep messages formatted with Adventure components

Prompt examples

Too vague — usually produces a basic result

Make a chat plugin

✓ Clear — generates exactly what you want

Create a plugin that prefixes all chat messages with the player's rank from LuckPerms. Ops see chat in gold, regular players in white. Add a /togglechat command that lets players mute global chat for themselves.

Too vague

Economy plugin

✓ Clear

A simple economy plugin with /balance to check your money, /pay <player> <amount> to send money, and /setbalance <player> <amount> for admins (requires economy.admin permission). Starting balance is 500. Store data in a YAML file.

Pro tip

Mention the target platform (e.g. "Paper 26.1" or "Paper 1.21.x compatibility") and any specific APIs you want to use. If you need Folia support, say so explicitly — it uses a different scheduler.

Platform overview

Minecraft server software comes in many flavours. Choosing the right one affects what features your plugin can use.

Paper
Soft-fork of Spigot — most popular
The most widely used server software. Extends Bukkit/Spigot with extra APIs and performance improvements. Best choice for most plugins.
Purpur
Fork of Paper — extra configurability
Builds on Paper with many extra gameplay options and toggles in the config. Fully compatible with Paper plugins — just tick the "Purpur" tag when uploading to the gallery.
Bukkit / CraftBukkit
The original plugin API
The oldest API layer. Almost everything runs on it, but it's the most limited. Only choose this if you need maximum compatibility with very old servers.
Folia
Paper fork — threaded regions
Splits the world into independently ticking regions for multi-core performance. Plugins must use Folia's scheduler — standard Paper/Bukkit plugins will not work. Tell StackNest "make this Folia-compatible" when generating.
Spigot
Fork of Bukkit — long-standing
Adds performance tweaks and extra BungeeCord hooks over Bukkit. Mostly superseded by Paper today, but still widely deployed.
Velocity
Proxy server
A high-performance proxy that connects multiple backend servers. Plugins here control cross-server behaviour (chat bridging, server switching, etc.) — not individual world plugins.
BungeeCord / Waterfall
Proxy server (older)
The older proxy standard. Mostly replaced by Velocity for new projects, but still used in many networks. BungeeCord plugins can't run on Velocity and vice versa.

Which platform should I choose?

I want to…Use
Make a plugin for a standard survival/creative serverPaper (default)
Use extra config options (mob behaviour, etc.)Purpur
Run on a large multi-core serverFolia (with "Folia-compatible" prompt)
Support the widest range of old serversBukkit API
Control a network of servers (hub, survival, skyblock…)Velocity or BungeeCord
Build a quick automation script instead of a full Java pluginSkript (Skript mode)
Add game logic without Java or a plugin frameworkDatapacks (Datapack mode)

How generation works

When you hit Generate, StackNest goes through several steps automatically:

  1. Your prompt is sent to the AI — it writes Java code and descriptor files based on what you described.
  2. For paid plans: Smart Assembly — before the main generation pass, a quick AI analysis step identifies which advanced features your plugin needs (Vault, SQLite, GUI click handlers, Folia scheduler, PDC storage, repeating tasks, etc.). Pre-validated Java code blocks for those features are injected directly into the prompt. This significantly reduces the chance of API mistakes, because boilerplate comes from tested templates rather than being generated from scratch.
  3. For plugins: the code is compiled — the plugin is compiled against the real PaperMC API and any errors are shown.
  4. For plugins: automatic fixing — if the code has issues, StackNest retries with targeted corrections before returning the result.
  5. For mods: Gradle compile + .jar — StackNest runs a server-side Gradle build (Fabric Loom / ForgeGradle / NeoGradle). On success you get a downloadable .jar. If the build has errors, StackNest retries with corrections. The full source files are always included.
  6. For Skript: .sk file output — a complete .sk script ready to drop into plugins/Skript/scripts/. No compilation step.
  7. For datapacks: full file treepack.mcmeta, .mcfunction files, JSON tags, advancements, recipes, and loot tables. Each file is labelled with its install path.
  8. You get the output — the code, any warnings, and a download button for the compiled JAR (plugins and successfully-compiled mods) or source files (Skript, datapacks).

Architecture patterns the AI is guided to use

For complex plugins the AI follows a set of production-grade patterns, not just syntactically correct Java:

Not every plugin needs every pattern

These patterns are injected based on what the prompt asks for. A simple /heal command won’t include a write queue. A PlayerData persistence plugin will. On paid plans the Smart Assembly pipeline detects the required patterns automatically and injects pre-validated code blocks — so the AI refines them rather than generating them from scratch.

Generation time & real-time streaming

Generation typically takes 15–60 seconds. Code streams in real time — you’ll see it being written character by character as it arrives, rather than waiting for the full result. Complex plugins with many features can take longer. Please don’t close the tab while it’s working.

Validation & errors

StackNest validates your plugin at every stage before returning the result:

If warnings appear after generation they are usually minor (like an unused import) and the plugin will still work. Errors shown in red mean compilation failed — try regenerating with a more specific prompt, or describe what went wrong and the auto-heal loop will attempt a targeted fix.

What gets fixed automatically

The auto-heal loop runs multiple targeted passes. Each pass feeds the exact compiler error or static-check failure back to the AI so the correction is precise, not a full regeneration. Most single-error cases resolve in the first pass.

Downloading your JAR

After a successful generation, click Download JAR. You'll get a .jar file ready to install:

  1. Stop your server (or let it run — hot-loading is possible but not recommended).
  2. Drop the .jar into your server's /plugins folder.
  3. Start (or restart) the server.
  4. The plugin loads automatically. Check your console for any startup errors.
File location

The plugins folder is usually at server-folder/plugins/. Any config files the plugin creates will appear inside a subfolder with the plugin's name, e.g. plugins/YourPlugin/config.yml.

Runtime plugin testing

Security scanning for uploaded JARs

When you upload an external JAR, StackNest scans its class bytecode for dangerous patterns (network connections, process execution, remote class loading) before running it. Malicious JARs are blocked and trigger a temporary 24-hour suspension on runtime testing access. The sandbox also runs Paper without any outbound network access, preventing plugins from calling home or downloading payloads.

Instead of downloading a JAR and deploying it to your own server, you can ask StackNest to boot a real Paper 26.1 server instance, load your plugin, and return a structured diagnostic report — all within the browser, in under 60 seconds. You can test both StackNest-generated plugins and plugins you have built yourself — just upload the JAR directly.

How to use it

  1. Generate a plugin as normal in the editor, or upload your own .jar using the Upload & Test JAR button in the action bar.
  2. For StackNest-generated plugins: click Test on Server in the action bar once generation succeeds (Starter and above only).
  3. A results panel slides open and streams the test output. It takes roughly 30–60 seconds.
  4. Review the stat tiles (load time, warnings, errors) and the StackNest Insights section for AI-powered fix hints.
  5. Expand Full server log for the raw Paper output if you need to dig deeper.

Plan limits

PlanTests / month
FreeNot available
Starter3
Pro10
Studio30

What the report includes

What “Passed” means

A Passed result means the plugin loaded without throwing errors and the server started cleanly. It does not test gameplay logic. Always do a manual in-game test for commands, events, and game mechanics before shipping to players.

The Gallery is a community library of plugins that users have uploaded for others to use freely.

Recommended workflow

  1. Start narrow — generate one core feature first instead of a giant all-in-one plugin.
  2. Test the basics — check commands, permissions, and startup logs on a local Paper test server.
  3. Iterate in follow-ups — add one feature at a time so the AI has a clear next step.
  4. Use the editor and log analyser — they are the fastest path when a plugin almost works but still needs cleanup.

Plans & limits

FeatureFreeStarterProStudio
Monthly generations315100300
Prompt previews2020UnlimitedUnlimited
Primary generation tierFastFastPremiumPremium + workspace features
Platform breadthCore plugin flowExpanded platform supportAll major supported targetsAll major supported targets
Plugin brandingStackNest added to outputStackNest added to outputNoneNone
Priority queueNoNoYesYes
Collaboration featuresNoNoBasicTeam-oriented
Runtime server tests / month31030

See the pricing page for full details and to upgrade.

API access Studio

Studio subscribers can generate plugins and mods over HTTP — no browser required. Pipe StackNest into CI/CD pipelines, Discord bots, server panels, or your own tooling.

Getting your API key

  1. Log in and open Profile → API Access.
  2. Click Generate key. The full key is shown once only — copy it immediately and store it securely.
  3. Use the key in an Authorization: Bearer header on every request.
Key shown once

Keys are stored as SHA-256 hashes — StackNest never holds the raw key and cannot recover it for you. If you lose it, go to Profile → API Access → Rotate key to invalidate the old key and issue a new one.

Authentication

Pass your key as a standard Bearer token. The legacy X-API-Key header is also accepted for backwards compatibility.

# Preferred
Authorization: Bearer sn_<your-key>

# Also accepted
X-API-Key: sn_<your-key>

Versioned base path

All endpoints are available under both /api/ and /api/v1/. The versioned path is recommended for new integrations — it will remain stable as the API evolves.

Endpoints

GET /api/v1/user/me

Returns your identity, plan, and monthly quota. Accepts both browser session cookies and Bearer token.

curl https://stacknests.com/api/v1/user/me \
     -H "Authorization: Bearer sn_<your-key>"
{
  "username":        "YourStudio",
  "email":           "you@example.com",
  "plan":            "studio",
  "gens_used":       14,
  "gens_remaining":  286,
  "gens_limit":      300,
  "days_until_reset": 18
}

POST /api/v1/generate

Generate a plugin (Paper, Spigot, Folia, Velocity, Skript, datapack). Each successful call counts as one generation against your monthly quota. Expect 15–120 seconds — set your HTTP client timeout accordingly and do not retry on a live request.

For Fabric, Forge, and NeoForge mods use the SSE endpoint POST /api/generate-mod-progress — it streams live progress and returns a jar_download_url in the final done event.

curl https://stacknests.com/api/v1/generate \
     -H "Authorization: Bearer sn_<your-key>" \
     -H "Content-Type: application/json" \
     -d '{"prompt":"A Paper 26.1 plugin that adds a /heal command","platform":"paper"}'
FieldRequiredDescription
promptYesDescribe what the plugin should do. Be specific about the platform version.
platformYespaper, spigot, folia, velocity, skript, datapack
preset_idNoApply a saved workspace preset to the generation.

The response includes request_id, code (Java source), plugin_name, compile_ok, gallery_id, and any warnings / errors. To download the compiled JAR, pass the returned code to POST /api/jar.

{
  "request_id":      "gen_3f8a1c",
  "success":         true,
  "code":            "...",
  "plugin_name":     "HealPlugin",
  "compile_ok":      true,
  "yml_ok":          true,
  "attempts":        2,
  "elapsed_seconds": 18.4,
  "gallery_id":      391,
  "warnings":        [],
  "errors":          []
}

POST /api/jar

Compile plugin source (from a /api/v1/generate response) into a ready-to-deploy .jar. Returns a binary file download.

curl https://stacknests.com/api/jar \
     -H "Authorization: Bearer sn_<your-key>" \
     -H "Content-Type: application/json" \
     -d '{"code":"<code from /api/v1/generate>","plugin_name":"HealPlugin"}' \
     --output HealPlugin.jar
FieldRequiredDescription
codeYesThe full code string returned by /api/v1/generate.
plugin_nameNoUsed as the JAR filename. Defaults to StackNestPlugin.

GET /api/mod-jar/<token>

Download a compiled mod JAR. The token comes from the jar_download_url field in the done event of an /api/generate-mod-progress SSE stream. Tokens are valid for 2 hours.

curl "https://stacknests.com/api/mod-jar/<token>" \
     -H "Authorization: Bearer sn_<your-key>" \
     --output my-mod-1.0.jar

Errors

All error responses follow a consistent shape. Use error for display and detail (when present) for logging.

// 401 — bad or missing key
{ "error": "Invalid API key" }

// 429 — quota exhausted
{ "error": "Monthly generation limit reached (300/month). Resets in 18 days.",
  "usage": { ... }, "upgrade_url": "/pricing" }

// 503 — AI backend temporarily unavailable
{ "error": "AI backend is unreachable right now. Please try again in 30 seconds.",
  "detail": "ConnectionError: ..." }

Retry on 5xx with exponential backoff. Do not retry 4xx — those indicate a client-side issue that a retry will not fix.

Rate limits

Studio API keys share the same monthly generation quota as browser use. There is no separate per-minute rate limit for Studio keys. If you need higher throughput, contact support.

Python quick-start

import os, time, requests

KEY  = os.environ["STACKNEST_API_KEY"]
BASE = "https://stacknests.com"

def generate(prompt, platform="paper", retries=3):
    for attempt in range(retries):
        try:
            r = requests.post(
                f"{BASE}/api/v1/generate",
                headers={"Authorization": f"Bearer {KEY}"},
                json={"prompt": prompt, "platform": platform},
                timeout=150,  # generation can take up to 120s
            )
            if r.status_code < 500:
                r.raise_for_status()
                return r.json()
            # 5xx — back off and retry
            time.sleep(2 ** attempt)
        except requests.exceptions.Timeout:
            if attempt == retries - 1:
                raise
            time.sleep(2 ** attempt)
    raise RuntimeError("Generation failed after retries")

def download_jar(code, plugin_name, out_path):
    r = requests.post(
        f"{BASE}/api/jar",
        headers={"Authorization": f"Bearer {KEY}"},
        json={"code": code, "plugin_name": plugin_name},
        timeout=60,
    )
    r.raise_for_status()
    with open(out_path, "wb") as f:
        f.write(r.content)

result = generate("Paper 26.1 plugin: /heal command with a 30-second cooldown")
print(result["request_id"], result["plugin_name"], "compile_ok:", result["compile_ok"])

if result["compile_ok"]:
    download_jar(result["code"], result["plugin_name"], f"{result['plugin_name']}.jar")
    print(f"JAR saved → {result['plugin_name']}.jar")

Key management & security

Security best practice

Store your key in an environment variable (STACKNEST_API_KEY). Never hard-code it in source files or commit it to version control. If it is accidentally exposed, rotate it immediately from your profile page.

Common issues

My plugin generated but doesn't work on the server

Check your server console for error messages when the plugin loads. Common causes:

Generation is taking a long time

Complex plugins can take up to 90 seconds. Mod generation may also take 30–60 seconds. If the page shows a spinner, it’s still working — don’t reload. If it times out, try again with a slightly simpler prompt and build up from there.

I get a compilation error in the output

This happens occasionally with very complex or unusual requests. Try:

The plugin has "StackNest" as the author — can I change it?

On the free plan, authors: [StackNest] is added to your plugin.yml automatically. You can edit the file manually to change it, or upgrade to Pro to remove this entirely.

I’ve hit my monthly limit

Free accounts get 3 plugin/mod generations per month. If you need more headroom, move to Starter, Pro, or Studio depending on how often you generate and whether you need premium tooling.

Paper 26.x & Java 25

Paper 26.1 is a major release that changes how Paper is versioned and built. Instead of the old 1.x-R0.1-SNAPSHOT Maven scheme, Paper now uses its own version numbers like 26.1.2.build.62-stable. StackNest tracks the latest stable build automatically — you do not need to do anything.

Key differences from Paper 1.x

Brigadier & command errors

If you see errors like package com.mojang.brigadier.command does not exist or cannot find symbol … CommandRegistrationEvent, the causes are:

// Paper 26.1 command registration
@Override
public void onEnable() {
    getLifecycleManager().registerEventHandler(
        LifecycleEvents.COMMANDS,
        event -> {
            Commands cmds = event.registrar();
            cmds.register(
                Commands.literal("mycommand")
                    .executes(ctx -> {
                        ctx.getSource().getSender().sendMessage("Hello!");
                        return Command.SINGLE_SUCCESS;
                    })
                    .build()
            );
        }
    );
}
Auto-maintained versions

StackNest automatically detects the latest Paper stable release from the PaperMC Maven repository. When a new stable build is published (e.g. 26.1.3.build.10-stable), the compiler target updates on the next server startup — no manual intervention needed.

Service availability

StackNest uses AI services to generate plugins. Occasionally these services may be slower or temporarily unavailable during periods of high demand.

If generation fails

If you see a "temporarily unavailable" message, the AI service is likely busy or experiencing an outage. This is not a problem with your prompt. Please wait a few minutes and try again — these issues typically resolve quickly.

Pro users get priority queue access, meaning their requests are processed before free-tier requests during high-traffic periods.