How much machine does a world need?
Less than a gaming PC, but more than the bare minimum once your town grows. The only official numbers are a Windows minimum for the default 72x72 map: a Core i5-class Intel processor or the AMD equivalent, 4 GB of memory and 1 GB of disk, with SSD storage recommended when your laws lean heavily on the database. The wiki says the needs change with world size, and that the process runs on a single CPU core, quoting a Strange Loop developer.
| Your plan | What to think about |
|---|---|
| Default map, a handful of friends | The official minimum is your starting point |
| Larger map | Needs grow with world size, per the wiki; give memory headroom |
| Busy economy and many laws | Put the world on SSD, as the wiki recommends |
| Mods | Every start compiles them, and one error stops the server (from the wiki's Unchecked troubleshooting page) |
That right-hand column is our advice built on the wiki's notes, not a published sizing chart. The safest approach is to start sensibly and watch how hard the server works on a busy evening.
What to have ready
- A 64-bit x86 machine running Ubuntu 24.04, which you reach with your own SSH login. We found no ARM build mentioned in the official pages, and Valve's Ubuntu steps for SteamCMD need x86 packages, so we'd steer clear of ARM; that is our conclusion, not Strange Loop's.
- Your player ID. Admin rights need your Steam64 ID or SLG ID. Your in-game name will not work.
- A world name and, if you want a private group, a password. Whitelisted players skip the password.
- A quiet hour each night if you want automatic backups the way we set them up below, because the server stops briefly while the copy is made.
Up and running in an evening
- Turn on the firewall before anything listens, letting your SSH session through first, then open the two player ports. We also open 3000 over TCP because the wiki's Linux example does; its setup page links that to mod downloads but isn't certain.
- Add Valve's multiverse source and 32-bit x86 support, which SteamCMD needs on Ubuntu, plus
libgdiplusandlibc6-dev, the two packages the server's own install.sh would add. - Create an
ecoserveraccount so the game never runs as root. The final line installs SteamCMD and pauses on Valve's licence screen, so it's the last thing you paste.
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow OpenSSH
sudo ufw --force enable
sudo ufw allow 3000/udp
sudo ufw allow 3001/tcp
sudo ufw allow 3000/tcp
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y libgdiplus libc6-dev
sudo useradd -m -s /bin/bash ecoserver
sudo apt install steamcmd
Now fetch the server, make your three settings files from the templates that ship with it (locked to mode 600, so a password is private from the moment you add it), and describe the service to systemd. Each line after the download runs only when EcoServer actually arrived. We took the three file names from the wiki's rule that every config has a .template twin; after the download, look with sudo ls /home/ecoserver/eco/Configs to be sure they match. If a template is missing the loop says which one and stops, and pasting the block a second time leaves your existing settings files alone. It ends by opening Network.eco for you to edit.
sudo -u ecoserver bash -c 'cd /home/ecoserver && /usr/games/steamcmd +force_install_dir /home/ecoserver/eco +login anonymous +app_update 739590 validate +quit'
sudo test -x /home/ecoserver/eco/EcoServer && sudo -u ecoserver bash -c 'cd /home/ecoserver/eco/Configs || exit 1; for c in Network Users Difficulty; do test -e $c.eco && continue; test -e $c.eco.template || { echo "no $c.eco.template, stopping"; exit 1; }; install -m 600 $c.eco.template $c.eco; done; mkdir -p ../Mods/UserCode; ls -l *.eco'
sudo test -x /home/ecoserver/eco/EcoServer && sudo tee /etc/systemd/system/eco-world.service > /dev/null <<'EOF'
[Unit]
Description=Eco world
Wants=network-online.target
After=network-online.target
[Service]
User=ecoserver
Group=ecoserver
WorkingDirectory=/home/ecoserver/eco
Environment=DOTNET_BUNDLE_EXTRACT_BASE_DIR=/home/ecoserver/.net
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/ecoserver/eco +login anonymous +app_update 739590 +quit
ExecStart=/home/ecoserver/eco/EcoServer
TimeoutStartSec=1800
TimeoutStopSec=300
Restart=always
RestartSec=15
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo test -e /home/ecoserver/eco/Configs/Network.eco && sudo -u ecoserver nano /home/ecoserver/eco/Configs/Network.eco
After setting up Users.eco (next section), start the world, but only if the firewall is on, the download worked and your settings files exist: sudo ufw status | grep -qw active && sudo test -x /home/ecoserver/eco/EcoServer && sudo test -e /home/ecoserver/eco/Configs/Users.eco && sudo systemctl enable --now eco-world. Generating a brand-new world can take a while on first launch, the wiki says, so give it time and follow along with journalctl -u eco-world -f.
We made a few calls of our own in that unit. The leading - on the update line means a failed update still lets the world start; a hung one is cut off by TimeoutStartSec after 30 minutes (our margin rather than an official number), and that start fails. Restart=always brings the server back after it exits; the wiki's examples use on-failure. Stopping the service sends SIGTERM; according to the wiki, that signal makes the server save before it exits, and we allow five minutes for it. The home folder is spelled out because %h in a system-wide unit means root's home.
Making yourself admin and setting the rules
Everything is a text file in the Configs folder. Stop the server before you edit one: changes need a restart to apply, and the troubleshooting page of the wiki warns that the server saves its own settings into those files on shutdown, wiping edits made while it ran. That page is marked Unchecked, meaning the wiki's admins haven't reviewed it yet, but stopping first costs nothing. Leave the files ending in .template alone; updates overwrite them.
| File | What you set there |
|---|---|
| Users.eco | Admins: your Steam64 ID or SLG ID, in the list format the template already uses. Also WhiteList, BlackList and MuteList |
| Network.eco | Name, PublicServer (off by default), Password, DefaultSlots (-1 means no limit) and the four ports |
| Difficulty.eco | The meteor (HasMeteor, MeteorImpactInDays 30), daily play limits (ExhaustionEnabled, HoursPlayedPerDay) and the craft, weight and growth multipliers |
Once you're an admin, /manage whois followed by a name tells you someone's ID, and /manage admin hands out admin rights in game. Don't count on /serverui on a rented machine: according to the wiki's chat command list, its window appears just for someone at the server itself.
Keeping the private parts private
Port 3001 is supposed to be reachable. It serves the web pages behind Eco's law system, and Strange Loop's patch notes also mention a Web UI map. Two keys in Users.eco, APIAuthToken and APIAdminAuthToken, would let a program into that Web UI without a game account, the second with admin powers. The wiki asks you to keep both secret, and notes a clean 14.1.1 file no longer contains them; keep them blank, along with AllowDebugCalls set to false.
RCON, the remote console on TCP 3002, is switched off until you give it a password with RconPassword. Every command sent through it runs as a server admin, and only one console can be connected at once. The wiki's protocol description puts the password into the login packet as plain ASCII text, which we read as crossing the network unencrypted. So if you use it, set RconIPAddress to 127.0.0.1, keep 3002 closed, and run your RCON client on the server itself after logging in with your own SSH account. Typing a password as part of a command leaves it in your shell history and visible in ps.
Never lose your world
Everything about your world sits in Storage: Game.eco, Game.db and a folder of backups. The server makes those backups by itself; Backup.eco ships switched on, saving every half hour and keeping ten weekly, three daily, twenty-four hourly and two from the last hour. Because they sit on the same disk as the world, add a copy of your own. This schedule stops the world at 04:30 server time (a clean, saved stop), packs up Storage, Configs and any mods you added under Mods/UserCode, then starts it again. Players are disconnected for that moment, and the start also checks for updates.
# /etc/cron.d/eco-world-backup (create the folder first: sudo install -d -m 700 /srv/world-backups)
30 4 * * * root bash -c 'umask 077; systemctl stop eco-world && tar -czf /srv/world-backups/world-$(date +\%F).tar.gz -C /home/ecoserver/eco Configs Storage Mods/UserCode; systemctl start eco-world' > /srv/world-backups/last-run.log 2>&1
50 4 * * * root find /srv/world-backups -name 'world-*.tar.gz' -mtime -1 | grep -q . && find /srv/world-backups -name 'world-*.tar.gz' -mtime +14 -delete
The second line only clears out old archives when a new one has appeared in the past day. Copy those archives to a different machine with rsync -a (leave out --delete, so an empty folder can never erase your off-site copies). You manage the server; we keep the hardware and the network running.
Bringing a world back takes three steps:
- Make sure the archive is real:
sudo test -s /srv/world-backups/world-DATE.tar.gz && sudo gzip -t /srv/world-backups/world-DATE.tar.gz && sudo tar -tzf /srv/world-backups/world-DATE.tar.gz > /dev/null && echo ok. No ok, no restore. - Stop the world with
sudo systemctl stop eco-world, then run this single line. It first backs up the present state to pre-swap.tar.gz and checks it; the old folders go only once both archives pass, and then the backup is unpacked: `sudo bash -o pipefail -c 'cd /home/ecoserver/eco || exit 1; W=/srv/world-backups; gzip -t $W/world-DATE.tar.gz && tar -tzf $W/world-DATE.tar.gz > /dev/null && tar -czf $W/pre-swap.tar.gz Configs Storage Mods/UserCode && gzip -t $W/pre-swap.tar.gz && tar -tzf $W/pre-swap.tar.gz > /dev/null && rm -rf Configs Storage Mods/UserCode && tar -xzf $W/world-DATE.tar.gz && chown -R ecoserver:ecoserver /home/ecoserver/eco && echo swapped'`. No swapped, no celebration: read the error first. - Run
sudo systemctl start eco-world, log in and look around. Remove pre-swap.tar.gz once you're happy.
Updates without surprises
This isn't built into Eco: our service file above has SteamCMD fetch the newest server every time the world starts, so you rarely fall behind. That matters: hotfix 14.1.1 fixed a flaw that allowed bank account data on servers to be tampered with. Most updates keep your save working; the wiki says Strange Loop will tell you in the announcement if a world needs anything special, and Update 14.2 says outright that 14.1 worlds migrate fully. Two cautions: the wiki's main setup page says an update may wipe configuration files, and its Unchecked troubleshooting page adds that mods made for an older version may break. Check Strange Loop's announcement whenever a major version lands, and if you'd rather wait, put a # in front of the ExecStartPre line and run sudo systemctl daemon-reload until you're ready. A restored backup gives you back your world and settings but not the older game build.
The server that fits
Our bare metal servers for game hosting put your world on a physical machine that is yours alone, on a network port that isn't shared with any other customer at the access switch, with whichever operating system you pick. A server that's already racked is ready in about 30 minutes; payment verification can add time. If you'd like to see what's waiting right now, the instant servers page lists it, and there's no long-term contract to sign.
Choose a rack server or a blade so you get a remote console: if a firewall rule ever locks you out, you can still reach the machine through it. The m510 and m710x are the only cartridges that have one. With sites in Amsterdam, Bucharest, Miami, New York and San Francisco on our data center map, you can place the world close to most of your players, and help is there around the clock by live chat, email and phone.
A rented server isn't always the answer. If your group only plays while the host is around, Host a World inside the game is enough. Planning a factory-building world next? Our Satisfactory hosting guide works the same way.
Questions people ask
- Do I need a Steam account to download the Eco server?
- No. Valve's dedicated server list marks app 739590 as downloadable with an anonymous SteamCMD login, and the wiki's commands use
login anonymous. If you bought Eco through a Strange Loop Games account, or linked your Steam account to one, the server files are also on the Account page of the Eco website. - Why can't my friends see the world in the server browser?
PublicServeris false until you change it in Network.eco. If it's on and the world still doesn't show, the wiki suggests adding it by hand: in the game, use the + under Your Worlds and type the server's IP with :3000.- Can one server host two Eco worlds?
- Yes. Give it its own install folder, its own Configs and its own service file, and move all four ports in its Network.eco (game, web, RCON and Steam) to unused numbers such as 3010 to 3013. Then open its game and web ports in the firewall.
- Is there a control window like on Windows?
- Not remotely. The wiki's chat command list says
/serveruishows its window to a local user only. On a rented Linux server you stop the world, change the files, then bring it back up. - What happens if a mod breaks the server?
- Mods placed in Mods/UserCode are compiled each time the server starts, and the wiki's troubleshooting page (marked Unchecked) says one compile error stops it, with the file and line shown in the log. Remove or fix that file and start again; adding mods one at a time makes the culprit obvious.