Server Setup
Want to host Thunder for your group? Here is how to get a server running without making a meal of it.
Panel hosting
Use the published pterodactyl.json egg, keep the packwiz URL in place, and let the startup scripts handle sync.
Standalone Linux
If you have curl, the Linux installer gets you most of the way there in one command and can fetch a local Temurin 21 runtime if Java is missing.
Standalone Windows
Run the PowerShell installer in an empty folder and it will even fetch Temurin 21 for you if Java is missing.
The scripts do the boring bits for you
The official install and startup scripts fetch Forge, pull in packwiz-installer-bootstrap, and keep the server aligned with the published metadata. That means far less manual copying and far fewer "which mods do I need?" headaches.
Import the egg and let it get on with it
Import the egg
Download pterodactyl.json from the latest stable Thunder release and import it through your panel.
Create the server
Pick Java 21, keep the supplied packwiz URL, and set the panel memory to match the sort of player count you expect. The startup script will derive a heap from that automatically unless you fill in Exact JVM Memory.
Start it
The egg installs Forge, then runs startup with sync enabled so the pack stays aligned with the published metadata.
Bootstrap a server with one command
You need curl and a normal Linux userspace with tar and gzip. If Java 17 or 21 is missing, the installer fetches a local Temurin 21 runtime for you.
mkdir thunder-server && cd thunder-server && curl -sSfLO https://github.com/rooneyj9005/Thunder/releases/latest/download/install.sh && bash install.sh
After accepting the EULA, start the server with bash startup.sh. If you want the script to size the heap from a known server allocation, use bash startup.sh --memory 8192. If you want a fixed heap instead, use bash startup.sh --jvm-memory 7168.
Run the PowerShell installer in an empty folder
If Java 17 or 21 is missing, the script downloads Temurin 21 automatically before installing the rest of the server.
.\install.ps1
Set-Content -LiteralPath eula.txt -Value "eula=true" -Encoding ASCII
.\startup.ps1
That gives you the same general flow as Linux without needing a separate Java install first. Optional memory control works the same way here: .\startup.ps1 -MemoryMiB 8192 derives a heap from the total server allocation, while .\startup.ps1 -JvmMemoryMiB 7168 pins the heap exactly.
Where the metadata lives
The public docs live on thunder.john.rooney.scot, but the packwiz metadata itself is served separately from packwiz.thunder.john.rooney.scot. That split is deliberate. The docs explain things. The packwiz host keeps sync and update tooling pointed at a stable source.
What it actually manages
Thunder uses exact indexed paths, not folder-wide management.
- If a specific path is listed in
index.toml, packwiz can restore the pack version of that exact file on sync. - If another file sits next to it but is not indexed, packwiz generally leaves that file alone.
- So "this folder contains managed files" is not the same thing as "everything in this folder belongs to the pack".
If you disable updates and customise pack-managed files, you are effectively keeping a local fork. That can be perfectly reasonable, but it stops being the official pack state.