Vanilla, TShock or tModLoader: which one to run
These are three separate server programs. You pick one per world, and the choice decides what your players have to install.
The vanilla server is Re-Logic's own. It ships inside the Windows install of the game and is also a free download from terraria.org. Players join with the normal game, nothing extra. It has a password, a ban list and a handful of console commands, and that is the whole admin toolkit. It is the right choice for a private world shared with people you trust.
TShock is a replacement server for the unmodified game. Players still join with the normal Terraria client, but the server gains user accounts, groups with permissions, protected regions, item bans, anti-cheat checks and server-side characters. It is the right choice the moment the address is public, because the vanilla server cannot stop a stranger from walking in with any items they like.
tModLoader is how you run content mods. It is a separate free app on Steam, and its developers describe it and Terraria as two completely separate games for multiplayer purposes: a tModLoader client will not connect to a non-tModLoader server, and a vanilla client cannot join a tModLoader one. Every player needs tModLoader installed.
Versions are the thing to check before you commit. As of October 2026 the official wiki lists the vanilla server at 1.4.5.8, the current TShock release, 6.2.1, is built for 1.4.5.8, and tModLoader's stable branch is based on Terraria 1.4.4.9 content. A TShock server has to match the game version your players have, so update TShock when the game updates. tModLoader players are on tModLoader's own version, not on the vanilla one.
- Vanilla: unmodified game, no extra installs, minimal admin tools
- TShock: unmodified game for players, full admin and permission system on the server
- tModLoader: content mods, and every player must run tModLoader
- One build per world: pick before you generate or upload it
RAM by world size and player count
There is no official table of memory by world size, so here is what the primary sources do say. The official wiki's server requirements give 500 MB of free memory for a small world and add that the figure depends on world size and the number of players. The TShock documentation says TShock generally needs at least 1 GB. tModLoader publishes no figure, because the answer is set by which mods you load.
World size is the part you can reason about. A small world is 4200 by 1200 tiles, a medium one 6400 by 1800 and a large one 8400 by 2400. That makes a large world exactly four times the tile count of a small one, and a medium world a little over twice. The wiki notes that small worlds generate, save and load faster, and that large ones need more memory.
Player count matters less than people expect. The config accepts a maxplayers value from 1 to 255, but that is a limit on connections, not a promise of how the server will feel with that many people on it. For a modded server, add your mods one group at a time and watch memory during mod loading and world generation, which is where a heavy list shows itself first.
- Vanilla, small world: about 500 MB free, per the official wiki
- Medium world: a little over 2 times the tiles of a small one
- Large world: 4 times the tiles of a small one
- TShock: at least 1 GB, per its documentation
- tModLoader: no official figure, it depends on the mod list
The port, the config file and the world file
The server runs on TCP port 7777 by default. Change it with port= in the config or -port on the command line, and if you host at home, forward it on your router. Players choose Multiplayer, then Join via IP, and type the address and port.
Settings live in a plain text file, usually called serverconfig.txt, which you pass to the server with -config. Without one, the server asks its questions interactively on every start. Lines beginning with # are comments.
The world is a single file ending in .wld. Set world= to its full path and the server loads it and starts. If nothing exists at that path and autocreate is set, the server generates a new world there instead, which is the usual explanation for a world that seems to have reset: the file name or folder did not match, so a fresh one was created beside it. The size, seed, name and difficulty options only apply when a world is being created.
Shutting down properly matters. The console command exit saves the world and stops the server. exit-nosave stops it without saving, and save writes the world at any time. The wiki notes that the server auto-saves from time to time, and that since 1.4.5.0 it also saves when the last player leaves.
- world=: full path to the .wld file to load
- autocreate=: 1 small, 2 medium, 3 large, used only if no world is found
- worldname=, seed=, difficulty=: applied at creation. Difficulty is 0 normal, 1 expert, 2 master, 3 journey
- maxplayers=: 1 to 255
- port=: 7777 by default
- password=: the join password
- worldpath=: the folder where world files are stored
- secure=1: additional cheat protection
- motd= and banlist=: the welcome message and the ban list file
TShock setup basics: the setup code, groups and permissions
Download the release that names your Terraria version from the TShock releases page and unzip it into one folder. TShock runs on the .NET runtime instead of the old Mono setup, on Windows, Linux and macOS. The documentation was written for TShock 5 and names .NET 6, while the current TShock 6 source targets .NET 9, so install the runtime the release you downloaded asks for.
Start TShock.Server and answer the startup questions. On first run it creates a folder called tshock that holds config.json, the main configuration file, sscconfig.json for server-side characters, and tshock.sqlite, the database of accounts, groups and regions. The documentation is blunt about that last file: lose it and you set TShock up again.
The first-run setup code is how you become the owner. It is printed in the server console, and you use it from inside the game.
After that, access is managed through groups. Each group holds a list of permissions, which are named nodes such as tshock.admin.ban, and each permission unlocks specific commands. Unregistered players land in the group named guest and newly registered accounts in the group named default, and TShock also creates vip, newadmin, admin, trustedadmin and owner. Groups are managed with the /group command and protected areas with /region. If you want everyone to have an account before they can play, turn on RequireLogin in config.json. If you want the server, not the player, to hold inventories, set Enabled to true in sscconfig.json: with server-side characters on, players start from an inventory you define and keep it only on your server.
- Join the server and read the setup code from the console
- Type /setup followed by the code in game chat to become a temporary admin
- Create your account: /user add yourname yourpassword owner
- Log in: /login yourname yourpassword
- Type /setup once more to switch the setup system off
- Add plugins by placing them in the ServerPlugins folder
tModLoader: mods must match on the server and the clients
A tModLoader server is the tModLoader app run with its server script, start-tModLoaderServer.sh on Linux and macOS or start-tModLoaderServer.bat on Windows. For a headless Linux machine the project provides a management script, manage-tModLoaderServer.sh, which installs either through SteamCMD with a Steam login or straight from the GitHub release, plus a Docker setup. It listens on 7777 like the vanilla server and reads the same style of serverconfig.txt, with a few options of its own such as modpath and modpack.
Mods reach a server through two small files. In the game, enable the mods you want, open Workshop, then Mod Packs, and save the enabled mods as a new mod pack. Its folder contains install.txt, which lists the Workshop mods to download, and enabled.json, which lists what is switched on. Put both in the server's Mods folder. The official instructions are specific: without install.txt no mods are installed, and without enabled.json none are enabled, and enabled.json has to include every mod you want, including ones you copied in by hand as .tmod files.
On the player side, the tModLoader version has to match the server exactly. If it does not, the client reports that it is not using the same version as the server. When the versions agree and the mod lists differ, tModLoader shows the changes it needs and can download missing mods from the server and reload before joining. A player can switch automatic downloading off, or accept only mods signed by the mod browser, and in those cases they have to get the mods themselves.
Mods are tied to the tModLoader version they were built for. The stable branch is what most players use, and Steam's beta branches also offer 1.4.3-legacy and 1.3-legacy for mods that were never updated. Whichever branch you choose, the server and every player have to be on the same one.
Moving a single-player world to a server
Find the world on the PC that has it. On Windows, vanilla worlds are in Documents\My Games\Terraria\Worlds. On Linux they are in ~/.local/share/Terraria/Worlds and on macOS in ~/Library/Application Support/Terraria/Worlds. tModLoader keeps its own save folder inside the Terraria one, named tModLoader for the current stable branch, with its own Worlds folder. If the world is stored in Steam Cloud, move it off the cloud in the game's world list first so the file exists on disk.
A vanilla world is one .wld file. A tModLoader world is two: the .wld and a .twld with the same name that holds everything the mods saved. Upload both, and point world= at the .wld, which is what the tModLoader instructions specify.
Characters do not need moving. Terraria lets players bring their own character from single-player to any server, so everyone arrives with the character they already have. That is convenient among friends and is exactly what server-side characters in TShock are for when it is not.
Keep the world on the build it came from. A world with mod data belongs on a tModLoader server with the same mods enabled. Check versions as well before moving a world between vanilla and tModLoader, since the two are currently on different versions of the game.
- Stop the server before uploading
- Upload the .wld, plus the matching .twld for a modded world
- Set world= to the full path of the uploaded .wld
- Make sure the file name matches exactly, or autocreate will generate a new world
- Start the server and confirm it loaded your world, not a fresh one
Backups
A Terraria world is small enough that there is no excuse for not having copies. The simplest backup is the right one: use save in the console or stop the server with exit, then copy the .wld, and the .twld on a modded server, somewhere that is not the server. Do it before every game update, before changing the mod list and before updating TShock.
The game keeps a previous copy next to the world with .bak added to the name, and tModLoader does the same for the .twld. tModLoader also keeps dated zip backups of worlds and players in a Backups folder inside its Worlds and Players folders, and its wiki explains restoring them: copy the current files aside first, then extract the newest zip over them and work backwards if that one fails too.
TShock has its own schedule. By default it copies the world every 10 minutes into tshock/backups and keeps each copy for 240 minutes, both adjustable in config.json with BackupInterval and BackupKeepFor. That covers a bad save or a griefed afternoon. It does not cover losing the machine, so keep an off-server copy too, and include tshock.sqlite, since that file is your accounts, groups and regions.