Curate tModLoader mods for your server

Manage a modded Terraria server the right way — the mods folder, enabled.json, matching every client, and the version pairing that makes or breaks a join.

tModLoader is Terraria with mods, and hosting it well is mostly about bookkeeping: which mod files are on the server, which are switched on, and — the part people forget — making sure every player is running the exact same set. Get the folder and the enabled list right and your modded world just works; get the versions crossed and nobody can connect. This guide keeps you on the happy path.

At a glance
You need A Terraria server on the tModLoader flavor (see the Terraria quickstart)
Plan Any — tModLoader runs on the free plan
Time About fifteen minutes

The two things that control your mods

A tModLoader server decides what to load from two places, both inside the mods folder (~/mods on your server, reachable in the File Manager):

Piece What it is
The .tmod files The mods themselves, one file per mod, sitting in the mods folder
enabled.json A list of which mods are actually turned on

Here's the trap: a .tmod file in the folder is present, not enabled. If enabled.json is missing or a mod isn't listed in it, that mod won't load — even though the file is right there. Both pieces have to agree.

Set up your mods

  1. Get the mod files. Each tModLoader mod is a .tmod file. Put the mods you want into the server's ~/mods folder with the File Manager (or SFTP for a big batch).

  2. List them in enabled.json. This file is a plain JSON array of mod internal names (the mod's own identifier, not its display name):

    [
      "CalamityMod",
      "ThoriumMod"
    ]

    Add a mod's internal name to turn it on; remove it to turn it off without deleting the file.

  3. Restart the server. Watch the Console — tModLoader lists each mod as it loads, and names any that fail. A clean load ending in the server ready for players means your set is good.

💡 Tip: Not sure of a mod's internal name? It's shown in the console as tModLoader loads (or fails to load) it, and in the mod's own listing. The internal name is what goes in enabled.json — the display name won't match.

The rule that decides every join: everyone matches

This is the whole game with modded multiplayer:

⚠️ Heads up: Every player must be on the same tModLoader version as the server, running the same mods at the same versions. A mismatch — even one mod, even one version off — stops that player from joining.

Two layers have to line up:

  • tModLoader itself. The server and every client must be the same tModLoader build. tModLoader tracks Terraria's version, so "we're all on the latest" is usually the simplest rule. Mods built for one tModLoader version may refuse to load on another.
  • The mod set. The server advertises which mods it needs. When someone joins without them, tModLoader can download the server's mods to that client so their set matches — but only when the tModLoader versions already agree. That download is the reason you rarely have to hand every friend a folder of files; get the server right and clients fall in line.

Because of this, changing mods is a group decision, not a quiet server tweak — announce it, and expect everyone to update together.

Editing your mod list later

  • Add a mod: drop its .tmod in ~/mods, add its internal name to enabled.json, restart, and have players rejoin (they'll pull the new mod).
  • Remove a mod: take its name out of enabled.json (and optionally delete the file), restart. Note that removing a mod that added blocks or items can leave holes in an existing world — test big changes on a copy first.
  • Update a mod: replace the .tmod with the newer version and restart. Everyone updates the same mod on their end too, or the versions cross and joins break.

🎯 Good to know: Your modded world lives in the server's files and survives restarts, stops, and the free-plan sleep — but a reinstall or switching games wipes it. Take a backup before big mod surgery; on free, backups save to your own Google Drive.

Verify it works

Two signals: the Console loads every mod in enabled.json without errors and reaches the ready state, and a friend on the matching tModLoader version can connect and see the modded content. If someone bounces off the server, it's almost always a version or mod-set mismatch — check that first.

Troubleshooting

  • A mod isn't loading — it's in the folder but not in enabled.json, or its internal name is misspelled there. The console names what it did and didn't load.
  • A player can't join — their tModLoader version or mod set doesn't match the server's. Get everyone on the same tModLoader build; let the client download the server's mods on join.
  • enabled.json won't parse — it's JSON, so a stray comma or missing quote breaks it. It must be a clean array of quoted internal names.
  • World looks broken after removing a mod — that mod's blocks/items are gone from a world that used them. Restore a backup or keep the mod.

For building your own mods, deeper server flags, and the current mod-management tooling, see tModLoader's official documentation at docs.tmodloader.net.


Next steps

Was this guide helpful?