Documentation Index
Fetch the complete documentation index at: https://docs.grounds.gg/llms.txt
Use this file to discover all available pages before exploring further.
grounds push --target=dev; this is the offline development loop — no Grounds infra is touched, no quota is consumed, no cluster is needed.
When to use it
| Use this when | Use grounds push --target=dev when |
|---|---|
| Iterating on plugin logic alone. | You need the full forge runtime (eg. config plugin, social plugin) loaded. |
| Offline / on the train. | You want to share with a teammate. |
| You don’t want to wait for a build + deploy round-trip. | You’re testing inter-service interactions. |
| You’re new and not yet authed. | You’re testing routing, ingress, or anything network-shaped. |
groundsTestLocal is 5× faster than a cloud push (no network upload, no Kaniko, no Kube reconcile).
Requirements
- JDK 21+ on
PATH. - An internet connection on the first run (to download Paper / Velocity from
api.papermc.io). Subsequent runs are fully offline.
What happens
- Reads
grounds.yaml, findsbaseImage. - If
paperorvelocity: downloads the latest stable build of that version from PaperMC’s v2 API. Caches underbuild/grounds-test/cache/. - Sets up a server directory at
build/grounds-test/<baseImage>-<version>/. Persists between runs, so player data + world chunks survive. - For Paper: writes
eula.txt(signed) and a saneserver.propertieson first run (online-mode=false, view-distance=8, no spawn protection). Edits stick. - Drops your plugin JAR into
plugins/. java -jarstarts the server with stdin/stdout attached. Ctrl-C shuts it down cleanly.
Output
localhost:25565 (Paper) or localhost:25577 (Velocity).
Configuration
build.gradle.kts
Limitations (v0)
- Only
baseImage: paperandbaseImage: velocityare supported.minestomandserviceworkloads needgrounds push --target=dev— they’re plain JVM apps, not Minecraft servers, and we don’t ship a generic local runner. - No multi-plugin compose. Only this build’s JAR gets auto-installed; if you manually drop other JARs into
plugins/, they’ll persist between runs (the task only re-installs its own JAR each time). - Local data is just a directory. Wipe with
./gradlew clean(orrm -rf build/grounds-test/) for a fresh world.
What does not happen
- No Kaniko build. Your raw JAR is loaded directly — same as
./gradlew buildthen dropping it manually into a Paper server’splugins/. - No quota / push-history record. This task talks to no Grounds infra.
- No public URL. It’s
localhost. Usestagingif you need a sharable URL.
Combining with groundsPush
A reasonable inner-to-outer-loop:
./gradlew groundsTestLocal— iterate locally until it works.grounds push --target=dev— verify it works inside the platform’s runtime (config plugin, social plugin, etc.).grounds push --target=staging— share with a teammate.grounds promote <pushId>— release.
