Terraria Field guide

Set up a Terraria tModLoader server on Linux with the right mod pack

Prepare a tModLoader server on Linux with matching game, mod and client versions and a separate world copy.

Set up a Terraria tModLoader server on Linux with the right mod pack

Start a tModLoader server with the same engine branch and multiplayer mods as your players, then load the intended modded world. A running ordinary Terraria server cannot become a tModLoader server by receiving a folder of mods.

This guide uses the maintainer's direct Linux management script on x86-64, with direct-IP multiplayer. On 25 October 2026, the stable GitHub release is v2026.08.3.0, based on Terraria 1.4.4; preview releases are separate. Check that your chosen pack supports that release. TShock plugins, current vanilla Terraria and console/mobile clients are outside this setup.

Keep the engine, mod pack and modded world together throughout installation and maintenance.

Prepare the account and the client pack#

Use an ordinary Linux account with a writable home, sufficient disk space and permission to bind the selected port. Install Bash, curl, unzip and tar through your distribution, plus SteamCMD following Valve's installation instructions. SteamCMD is required for Workshop mods even when the engine itself comes from GitHub. Its Linux dependencies can include 32-bit libraries; do not copy another distribution's package list blindly.

The management script installs the release's .NET runtime through its launcher utilities. If those report missing native dependencies, resolve the named prerequisite for your distribution before continuing. The maintained utilities do not support ARM for this tModLoader setup. TShock's separate ARM downloads do not change that limitation.

On a working PC tModLoader client, enable the desired mods and dependencies. Under Workshop → Mod Packs, use Save Enabled as New Mod Pack, then Open Mod Pack Folder. Retain install.txt, enabled.json and the pack's tmlversion.txt when present. install.txt identifies Workshop downloads; enabled.json selects mods to load. A list of Workshop IDs alone does not enable them.

Install an explicitly selected engine#

Run these commands as the server account, outside a container. The manager detects containers and uses a different layout there:

bash
mkdir -p "$HOME/terraria-tml/Mods" "$HOME/terraria-tml/Worlds"
cd "$HOME/terraria-tml"
curl -fL -o manage-tModLoaderServer.sh \
  https://raw.githubusercontent.com/tModLoader/tModLoader/v2026.08.3.0/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/manage-tModLoaderServer.sh
chmod +x manage-tModLoaderServer.sh

Inspect the downloaded script before running it. The commands below deliberately select the checked stable tag; change it only after matching the clients and pack. Review any offer to update the management script separately from updating the engine.

bash
./manage-tModLoaderServer.sh install-tml --github --tmlversion v2026.08.3.0

The engine goes into server; persistent data remains under terraria-tml. Copy the exported install.txt, enabled.json and optional tmlversion.txt into this root's Mods directory. Put required locally distributed .tmod files there too, and include their internal mod names in enabled.json. Use files supplied by the mod author or your established pack, not renamed DLLs or TShock plugins.

Download the Workshop items:

bash
./manage-tModLoaderServer.sh install-mods

Check the result and startup logs for missing dependencies or rejected mods. Workshop downloads can change independently of the selected engine tag: pinning tModLoader does not freeze Workshop content.

Create or transfer the world under those mods#

Keep the game port restricted to your administrator's address during setup. For a first new world, run:

bash
cp -n server/serverconfig.txt serverconfig.txt
./manage-tModLoaderServer.sh start -nosteam

Check the loaded mod list, then follow the console's world-selection/new-world prompts. Generate the world with the intended content mods already active. Select the port, player count and a private joining password when asked. After a successful initial save, use the server console's exit command and wait for the process to finish.

For an existing world, stop its original server first. Copy its matching .wld and .twld into the new persistent root's Worlds directory. Restore the relevant mod configuration into its ModConfigs directory, retaining any additional mod-specific data paths. The .twld contains modded world data; copying only the vanilla world file is an incomplete transfer. Work on a copy and retain the original compatible engine/mod set.

Make the next launch select the same world#

Create serverconfig.txt beside the management script. This example assumes the account home is /home/terraria; replace the world path with the real absolute path shown by your installation. Config files do not expand $HOME:

ini
world=/home/terraria/terraria-tml/Worlds/Coop.wld
maxplayers=8
port=7777
password=REPLACE_WITH_PRIVATE_JOIN_PASSWORD

Point world at .wld, not .twld. Replace the example password and restrict access to the config file. Leave autocreate absent when loading an existing world: a mistaken path should not silently become a new playthrough. Restart with the same start -nosteam command and confirm the selected world and mods.

For public direct-IP access, permit the configured TCP port in the host firewall and VPS provider firewall. A server behind a router also needs forwarding to its stable LAN address; carrier-grade NAT needs a different reachable route. Do not expose unrelated ports or disable the entire firewall.

Prove the connection and maintain the whole instance#

Connect through Multiplayer → Join via IP in the matching PC tModLoader client. Use the server's reachable address, selected port and joining password. Verify a known world landmark and mod content. A listening socket proves less than a successful game join.

On version mismatch, compare the actual client/server tModLoader versions and stable/preview branches first, then multiplayer mod versions and dependencies. On an apparently empty world, check the configured path and process account before generating anything. Retain logs for the failed load.

Before maintenance, disconnect players, save and exit normally, then back up the entire persistent root—including Worlds, Mods, ModConfigs, configuration, Workshop content and exact working release information. Keep a copy outside the installation. Coordinate engine and mod updates with clients; install-tml changes the engine, install-mods refreshes Workshop items, and install does both. Test a copied world before allowing an updated mod set to save over your only original.

If this is one of several machines you administer, Nexardo can help manage your own infrastructure; the compatible pack and verified world remain choices for this instance.

Sources#