Concepts
Mods & modpacks

Mods & modpacks

TrueTick supports the full spread of Minecraft server software, plus per-server mod/plugin management and one-shot modpack installs.

Cores & loaders

The type field on a server selects its software:

CategoryCoresAdds via
Plugin serversPAPER, PURPURBukkit/Spigot/Paper plugins (plugins/)
Mod loadersFABRIC, FORGE, NEOFORGEmods (mods/)
ProxyVELOCITYVelocity plugins (plugins/), uploaded as .jar files — not from the catalog
VanillaVANILLAnothing: Vanilla runs no plugins or mods

Plugin servers take .jar plugins; mod loaders take mods. Modded cores require at least 4 GB RAM. Change a server's core/version while it's stopped with updateVersion(id, { type, version }).

Adding mods & plugins

Attach a project from Modrinth or CurseForge (CurseForge requires an operator API key to be configured). The platform resolves and installs the right file, and keeps the install manifest tidy across restarts.

The examples add Chunky (opens in a new tab) to my-smp, the Paper 1.21.1 server from the Quickstart: a Paper server takes plugins, and Chunky has Paper builds. On a Fabric or NeoForge server, add a mod the same way — lithium, for example.

// Add Chunky from Modrinth: the newest stable build for the server's core and Minecraft version
await client.mods.add("my-smp", { source: "modrinth", projectId: "chunky" });
 
// Pin a specific version: a version number or ID from the project's Modrinth versions page
// (Chunky 1.4.28 is built for Paper on Minecraft 1.20.5–1.21.4)
await client.mods.add("my-smp", {
  source: "modrinth",
  projectId: "chunky",
  versionSpec: "1.4.28",
});
 
// List, then remove
const mods = await client.mods.list("my-smp");
await client.mods.remove("my-smp", { source: "modrinth", projectId: "chunky" });
truetick mods add my-smp --source modrinth --project chunky --version 1.4.28
truetick mods list my-smp
truetick mods remove my-smp --source modrinth --project chunky

On CurseForge, projectId is the numeric project ID shown on the project's page, and a pinned versionSpec is a numeric file ID — the number at the end of the file's page URL.

When the server has a concrete Minecraft version (not LATEST or SNAPSHOT), a Modrinth add also writes the project's required dependencies as entries of their own, skipping any the server already has: adding Chunky to a Fabric server adds Fabric API too. They show up in mods.list, and the server's audit log (GET /v1/servers/{id}/audit) records each one as "added as a dependency of" the project that brought it in. A Modrinth mod marked client-side only, such as Sodium, is refused on Fabric, Forge and NeoForge servers — each player installs it in their own game. Catalog adds are refused on a Velocity proxy: nothing installs catalog entries there, so upload the plugin's .jar instead (see Deploy a plugin).

Adding/removing mods rewrites the desired mod set; the change is reconciled the next time the server starts (or restart to apply immediately). Your own manually-uploaded jars are preserved — only the managed manifest entries are reconciled.

Browsing for projects? The catalog endpoints (/v1/catalog/projects, /v1/catalog/modpacks) let you search Modrinth/CurseForge by query, server type, and Minecraft version without owning a server yet. They take the same x-api-key as every other endpoint, and they are not part of the versioned API Reference yet.

Modpacks (autoinstall)

You can create a server directly from a modpack — the platform pre-installs the whole pack before the server is billable. Supply the modpack platform, reference, and version when creating:

curl -X POST https://api.truetick.gg/v1/servers \
  -H "x-api-key: $TRUETICK_API_KEY" \
  -H "content-type: application/json" \
  -d "{
    \"id\": \"atm10\", \"name\": \"atm10\",
    \"hostname\": \"atm10.truetick.gg\", \"container\": \"mc_atm10\", \"addr\": \"\",
    \"accountId\": \"$ACCOUNT_ID\",
    \"ramMb\": 8192, \"type\": \"NEOFORGE\",
    \"modpackPlatform\": \"modrinth\",
    \"modpackRef\": \"all-the-mods-10\",
    \"modpackVersion\": \"latest\"
  }"

During the pre-install the server is in the installing state. Install time isn't metered — you're not charged for the download/setup, only for runtime once it's up. If a pack fails to install, the server enters install_failed and exposes installError; you can fix inputs and retry the install (…:retry-install) without recreating the server.

⚠️

Large modpacks take longer to cold-start (modded servers get up to a 10-minute start window) and need more RAM. Size the server accordingly — 8192+ MB is sensible for a big pack.