Only show guides for your app
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 |
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.
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).
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.
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.
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:
Because of this, changing mods is a group decision, not a quiet server tweak — announce it, and expect everyone to update together.
.tmod in ~/mods, add its internal name to enabled.json, restart, and have players rejoin (they'll pull the new mod).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..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.
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.
enabled.json, or its internal name is misspelled there. The console names what it did and didn't load.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.For building your own mods, deeper server flags, and the current mod-management tooling, see tModLoader's official documentation at docs.tmodloader.net.