# Factorio Server Hosting - everything RE:NODE has published

> A Factorio server on RE:NODE: plans, how the panel runs it, and every tutorial RE:NODE has published about it.

Generated from https://www.renode.space/game-servers/factorio, the live catalogue, the deploy docs, the panel guides and the RE:NODE blog. English. Source of truth for anything that changes: https://www.renode.space/game-servers/factorio.

Contents: what it is, plans and prices, panel how-to, tutorials, rules for the assistant.

## What it is

Factorio servers. The map is generated on first boot, autosaves every ten minutes by default, and mods drop straight into the mods folder.

- Genres: Casual, Indie, Simulation, Strategy
- Developer: Wube Software LTD.
- Released: 14 Aug, 2020
- Steam: https://store.steampowered.com/app/427520/

### What comes with every Factorio server

- Configured before you see it: The install runs, the configuration is written and the server starts. No first-boot checklist, and nothing left on a default password shared with every other Factorio server on the internet.
- The real console: Live output, command input and the server's own logs - not a filtered summary. Web-server noise is folded behind a counter you can switch off.
- Files and SFTP: A full file manager with an editor, plus SFTP credentials. Upload mods, edit configs, pull a world down to your machine.
- 2-2 backup slots: Taken on demand or on a schedule, restored with a button. Deleting a server takes its backups with it, on purpose.
- 1 port allocated: Add and remove ports yourself from the Network tab, including the query and RCON ports where the game wants them.
- People on the same server: Invite friends or staff with granular permissions - console only, files only, no billing - through subusers, roles and teams.

### Which Factorio plan do you need?

Memory is what decides whether a server holds together, so start there. The Starter tier gives 1 GB and 1 vCPU, which suits a private group. The Advanced tier at 3 GB is where most public servers sit, and Premium at 6 GB exists for the servers that stay full.

Storage matters more than people expect once mods and backups are involved - plans here run from 5 GB to 30 GB of NVMe. Moving up or down a tier later does not rebuild your world; it changes the limits on the container you already have.

If you are not sure, take the middle tier. It is cheaper to move up after a busy weekend than to spend one explaining lag to your players.

More game servers: https://www.renode.space/ai/game-servers.md

### General questions

### Getting started

**How quickly is my server ready?**

Game, app, web and database servers are created the moment payment clears, usually inside a minute. The game or runtime is installed and started for you, and the console is live in your browser while it happens. VDS and dedicated servers are prepared by hand and delivered within 24 hours.

**Do I need to configure anything before it works?**

No. The install runs, the configuration is written, and admin passwords are generated for your server rather than shared with everybody else's. The exception is four games whose publisher issues a credential to a person - those say so on the shop before you pay, and ask for it on a Setup tab afterwards.

**Which games need a key from me?**

Counter-Strike 2 needs a Steam game-server token, Don't Starve Together a Klei cluster token, FiveM a Cfx.re licence, and DayZ, Project Zomboid, 7 Days to Die, Arma 3 and Unturned need a Steam account or token of your own. We cannot create any of them and we never share one between customers. Your server is built immediately and the installation waits until you paste yours in.

**Can I try before buying?**

There is no free tier. The entry plans start at $1.50 a month precisely so that trying something costs about as much as a coffee.

**Can Claude or ChatGPT set my project up?**

Yes, and the panel gives it what it needs. On a server's Console tab, pick a purpose and press Connect AI: the panel copies a private link with the runtime, the port the code must read from SERVER_PORT, the code path, the GitHub branch, the databases and the limits. Paste it into Claude, ChatGPT or any assistant that can open links; the same link followed by /mcp works as an MCP server URL. It stops by itself after 7 days unused. You can also connect Claude, or any MCP client, to your whole account at https://panel.renode.space/api/client/mcp. Linked repositories get a pre-flight check that shows what will break before a deploy, no AI needed. No password or token is ever shown to the assistant - the AI setup page explains it all.

### Running the server

**Do I get full file access?**

Yes - a complete file manager with an in-browser editor, plus SFTP credentials. There is no plan on which the file manager is disabled or read-only.

**Can I install mods and plugins?**

Yes. Upload them through the file manager or SFTP, or use the game's own workshop support where it has any. Nothing here whitelists which mods you are allowed to run.

**Can other people help me run it?**

Yes. Invite subusers with granular permissions - console only, files only, no billing - or build a team with a role and grant it access to several servers at once. Permissions are a union, so nobody loses access they were given elsewhere.

**What happens if my server runs out of memory?**

New servers are configured so the kernel stops the container and it restarts clean, rather than swapping and dragging the whole machine down. If a server restarts repeatedly we warn you on the server page and open a support ticket before anything is suspended - you get told twice before it stops.

**Is the CPU limit a hard limit?**

Yes, and it cannot be breached: the container is throttled to the share you bought. A server sitting at 100% is slow, not broken, and is never suspended for it.

### Backups and safety

**Are backups included?**

Every plan carries backup slots - two on the entry tiers, more further up. Take them on demand or on a schedule, and restore with a button rather than a support ticket.

**Where are backups stored?**

Off the machine they protect. A backup sitting on the same disk as the thing it is insuring covers you deleting your world and covers nothing at all about the disk failing.

**What happens to my backups if I cancel?**

Deleting a server deletes its backups with it, deliberately and including locked ones. Download anything you want to keep first - the panel lets you.

### Billing

**How do I pay?**

PayPal, card, your wallet balance, or bank transfer. Every method produces a proper invoice you can download or print, with our details and the bank account on it while it is unpaid.

**Can I pay in Georgian lari?**

The panel displays every figure in lari at the National Bank of Georgia's published rate, marks converted figures as approximate, and always shows the amount that will actually be charged. Invoices stay in the currency they were raised in, because an invoice is a demand for a specific amount.

**What happens when my subscription is due?**

An invoice is raised and emailed to you seven days before expiry, and again on the day. Paying it settles that same document rather than raising a second one.

**Can I upgrade or downgrade later?**

Yes, and it does not rebuild anything. Changing plan changes the limits on the container you already have - your world, files and database stay exactly where they are.

**Do you offer refunds?**

There is no automatic refund button. If a server cannot do what it was sold to do, open a ticket and we will sort it out - including refunding you. We would rather fix the plan than argue about the policy.

### Support and the honest bits

**How do I get help?**

Open a ticket from the panel - it reaches every member of staff and every administrator, not a queue aimed at nobody in particular. Attach a screenshot if it helps; attachments are private to your ticket rather than sitting at a guessable public URL. Discord is there for faster, less formal questions.

**Where are the servers?**

Germany, on hardware we run. That is one location: if you need players in another region on a low ping, say so before buying rather than after.

**Is there an uptime guarantee?**

We measure node availability every five minutes and report it in the panel rather than printing a number with four decimal places we have not earned. If something is down you will usually hear it from us first.

**Who actually runs this?**

A small team that writes the panel, the shop and the automation itself. When something is wrong the fix is a code change, which is why the list of things wrong keeps getting shorter.

## Plans and prices

Read from the live catalogue at 2026-10-15 01:45 UTC. Prices are in US dollars per month; checkout also takes Georgian lari and bills for 1, 3, 6, 12 or 24 months. Prices change - re-check on https://www.renode.space/game-servers/factorio or in the panel shop at https://panel.renode.space before quoting one.

| Plan | Price / month | Memory | CPU | NVMe disk | Databases | Backups | Ports |
|---|---|---|---|---|---|---|---|
| Starter | $5 | 1 GB | 1 vCPU | 5 GB | 1 | 2 | 1 |
| Standard | $8 | 2 GB | 1.5 vCPU | 10 GB | 1 | 2 | 1 |
| Advanced | $11 | 3 GB | 2 vCPU | 15 GB | 1 | 2 | 1 |
| Pro | $14 | 4 GB | 2.5 vCPU | 20 GB | 1 | 2 | 1 |
| Premium | $18 | 6 GB | 3 vCPU | 30 GB | 1 | 2 | 1 |


## Panel how-to

From the panel guides at https://www.renode.space/guides.

### Ordering a server

Ordering takes about a minute and happens in three screens: find what you want to run, pick a plan, and pay. Pay by card or PayPal and the server is set up the moment the payment goes through - you can watch it install in its console.

- Takes: About a minute
- Pay with: Card, PayPal or bank transfer
- Billed for: 1, 3, 6, 12 or 24 months
- Prices in: US dollars or Georgian lari

Open the shop and find what you want to run:

1. Sign in to the panel and open the shop. The tabs along the top are the product lines: VDS, Game Servers, App Hosting, Web Hosting and Databases.
2. Find your game - there is a search box - and press View plans. The card already shows the lowest price and the range of memory on offer.

Compare the plans and pick one:

3. Every plan lists its memory, CPU and NVMe storage, roughly how many players it suits, and what is included - updates, backup slots, file and SFTP access.
4. Press Get Started on the one you want. Not sure? Start smaller: you can move to a bigger plan later without losing your world.

Choose how long, then pay:

5. Pick a billing period - 1, 3, 6, 12 or 24 months. The total for the whole period is shown before you pay, so there are no surprises.
6. Pay with PayPal, or press Debit or Credit Card - paying by card does not need a PayPal account. The server is created as soon as the payment completes.

Paying by bank transfer instead: Prefer to pay from your bank? Choose bank transfer at checkout. The server is set up once the payment arrives, usually the next working day.

1. Switch the payment tab to Bank transfer. The account details for Bank of Georgia and TBC Bank appear, each with a Copy button.
2. Press Order & get invoice, then pay that invoice from your banking app, quoting the reference on it.

After you pay:

- The server appears under My Servers and installs itself. Open it to watch the install in the console.
- Your orders, invoices and subscriptions are under Finances in the side menu.
- Stuck at any step? Open Support in the side menu and raise a ticket.

### The console

Live output, a command line, power controls and the resource graphs. It is the server's own output rather than a filtered summary - if the game prints it, you see it.

- Start, stop, restart and kill, with the current state always visible.
- Command history with the arrow keys, and tab completion for common commands.
- Web-server noise - the internet knocking on doors that are not there - is folded behind a count you can switch off. A real error always prints.
- Graphs for memory, CPU and disk against your limits, so whether it is the plan or the mod is answerable.

### Files and SFTP

A complete file manager with an editor in the browser, plus SFTP credentials for the tools you already use. Upload a modpack, fix a config, pull a world down to your machine.

- Drag files in, or upload a folder. Archives can be unpacked in place.
- Edit any text file with syntax highlighting and save without downloading it.
- PDFs and images preview in the panel rather than downloading first.
- SFTP on the same credentials - use FileZilla, WinSCP or your editor's remote mode.

### Backups

Take one before you try something. Restore it when the something goes wrong. Lock the ones that matter so they are not rotated away.

- Slots on every plan - two on the entry tiers, more further up.
- Take one on demand, or on a schedule you set.
- Download any backup to your own machine.

> Important: Deleting a server deletes its backups, including the locked ones. A lock stops you removing a backup by accident; it is not a claim on the disk after the server is gone. Download what you want to keep before you cancel.

### Subusers, roles and teams

Give somebody the console without giving them your files, or the files without your billing. Three separate ideas, kept apart deliberately.

- A role holds permissions - what may be done.
- A team holds people.
- A grant joins a team to a server with a role, so adding a moderator to the team gives them the same access everywhere at once.
- Invite by link, by a join code, or by email address - and require approval on the codes if you would rather vet people.
- Access can be time-boxed, and expiry stops working immediately rather than overnight.

### Scheduled tasks

Restart nightly, back up before the restart, announce it to players first. Tasks run in order with delays between them, so a schedule can be a small routine rather than one action.

- Send a console command - a warning to players, a save, a world flush.
- Take a backup.
- Power actions: start, stop, restart.

### Games that need a key from you

A few games want a credential their publisher issues to a person - a Steam game-server token, a Steam account that owns the server files, a Klei cluster token, a Cfx.re licence. We cannot create one and we never share one between customers.

> Note: Those games say so on the shop before you pay. Your server is built immediately, and the game installation is held until you paste the value into a Setup tab, because installing without it produces a server with no game files in it and no explanation.

## Tutorials

4 posts, newest first. Each one follows in full after the list.

- [Factorio server commands, bans and RCON](https://www.renode.space/blog/factorio-server-commands-and-admin) (2026-10-07): Every Factorio multiplayer admin command, permission groups to stop griefing, useful Lua console snippets, RCON setup and what using /c does to achievements.
- [Factorio Space Age multiplayer server](https://www.renode.space/blog/factorio-space-age-multiplayer-server) (2026-10-07): Run Space Age on a Factorio headless server: enabling the expansion, who needs to own it, planets and platforms as surfaces, RAM, UPS and save size.
- [Factorio headless server: setup and admins](https://www.renode.space/blog/factorio-headless-server-guide) (2026-09-21): Run a Factorio headless server properly: the download, creating a map, every server-settings.json key, ports, admins, RCON, autosaves and the errors people hit.
- [Factorio mods and UPS on a megabase server](https://www.renode.space/blog/factorio-mods-and-ups-performance) (2026-09-21): How mods get onto a Factorio server, why every client needs the same list, what really costs UPS, and how to measure a save with the headless benchmark flag.

---

### Factorio server commands, bans and RCON

Published 2026-10-07 by RE:NODE Team. https://www.renode.space/blog/factorio-server-commands-and-admin

A Factorio server is administered through slash commands typed in game by an admin, or into the server console, which always has full rights. Admins come from `server-adminlist.json` or `/promote`; bans and whitelist entries are written to their own JSON files; `/config` changes server settings live; and permission groups, opened with `/permissions`, decide what each class of player is allowed to do - which is the real defence against griefing on a public map. Lua commands through `/c` and `/sc` can do almost anything, at the price of permanently disabling achievements on that save. RCON exposes all of it over TCP for bots and scripts. This post is the full reference, with the permission setup and Lua snippets worth having.

The basics - installing the headless server, `server-settings.json`, ports and autosaves - are in the [Factorio headless server guide](https://www.renode.space/blog/factorio-headless-server-guide). This post goes deeper on running the server once people are on it.

#### Who is an admin, and how they become one

There are three ways to have admin rights:

1. **The server console.** Anything typed into the server's standard input - the console box on a panel - runs with full rights. It is the one place that can never be locked out.
2. **The admin list.** `server-adminlist.json`, passed with `--server-adminlist`, is a JSON array of factorio.com usernames. Listed players are admins as soon as they join.
3. **`/promote`.** An existing admin, or the console, promotes a player. The server writes them into the admin list file so it survives restarts.

server-adminlist.json:

```json
["alice", "bob_builds"]
```

The names are factorio.com account names, and they are only trustworthy if `require_user_verification` is `true` in `server-settings.json`. With verification off, anyone can connect claiming any name - including an admin's. Leave it on.

Do not hand-edit the list files while the server runs. The server writes them back when you use `/promote`, `/ban` or `/whitelist`, and your edit is overwritten.

#### The admin command reference

Commands start with a slash. In the server console the slash is required too - text without one is sent as chat from `<server>`.

##### Moderation

| Command | What it does |
| --- | --- |
| `/kick <player> <reason>` | Disconnects a player |
| `/ban <player> <reason>` | Bans and writes `server-banlist.json` |
| `/unban <player>` | Lifts a ban |
| `/banlist add <player>` | Edits the ban list directly; also `remove`, `get`, `clear` |
| `/mute <player>` | Stops a player chatting |
| `/unmute <player>` | Reverses it |
| `/mutes` | Lists muted players |
| `/purge <player>` | Removes that player's messages from the chat log |
| `/whitelist add <player>` | Edits the whitelist; also `remove`, `get`, `clear` |

The whitelist file is only enforced if the server was started with `--use-server-whitelist`. Banning works on the account name, so a banned player cannot rejoin with the same factorio.com account.

##### Admin management and players

| Command | What it does |
| --- | --- |
| `/promote <player>` | Makes a player admin |
| `/demote <player>` | Removes admin |
| `/admins` | Lists admins |
| `/players` | Lists players; `/players online` or `/players count` |
| `/admin` | Opens the admin window: players, bans, whitelist |
| `/permissions` | Opens the permission groups editor |
| `/open <player>` | Opens another player's inventory |
| `/swap-players <a> [b]` | Swaps characters between players |
| `/delete-blueprint-library <player>` | Deletes an offline player's stored blueprint library |

`/admin` is the window most admins use day to day: a list of players with buttons for kick, ban, mute and promote, and tabs for the ban list and whitelist. The commands do the same thing from the console, where there is no window.

`/delete-blueprint-library` is for one specific problem: every player's blueprint library is stored in the save, and on a long-running public server, hundreds of players who visited once can bloat the save with libraries nobody will use again. It works only on players who are offline.

##### Server and information

| Command | What it does |
| --- | --- |
| `/server-save` | Saves now |
| `/config get <key>` | Reads a server setting |
| `/config set <key> <value>` | Changes it immediately |
| `/time` | How long the map has been running |
| `/seed` | The map seed |
| `/evolution` | Enemy evolution and its causes |
| `/version` | Game version |
| `/help` | Lists commands, or details one |

`/config` keys use hyphens where the JSON file uses underscores: `max-players`, `game-password`, `afk-auto-kick`, `allow-commands`, `autosave-interval`, `max-upload-slots`, `only-admins-can-pause`, `visibility-public` and the rest. So `/config set game-password new-secret` changes the join password for the next person who connects, without a restart. The setting is not written back to `server-settings.json`, so update the file too if the change should survive.

##### Chat

`/shout` (or `/s`) sends to every player regardless of team, `/whisper <player>` (or `/w`) sends privately, and `/reply` (or `/r`) answers the last whisper. Admins see the same chat as everyone else; there is no hidden staff channel.

#### Permission groups: the real anti-grief tool

Bans deal with a griefer after the fact. Permission groups stop a new player doing damage in the first place. Every player belongs to exactly one permission group, and each group allows or forbids individual input actions - building, deconstructing, opening other players' inventories, importing blueprints, editing train schedules and around two hundred others.

By default everyone is in `Default`, which can do everything. The common public-server pattern is to restrict `Default` and move people you trust into a group that is not restricted:

| Group | Who | What is forbidden |
| --- | --- | --- |
| `Default` | New and unknown players | Deconstruction planner, blueprint import, train and wire edits |
| `Trusted` | Regulars | Nothing, or only permission editing |
| Admins | Staff | Admins manage groups via `/permissions` |

The easiest way to build this is the `/permissions` window, which lists every action as a checkbox per group and lets you drag players between groups. It is also possible from the Lua console, which is useful for setting a fresh map up the same way every time:

```lua
/sc local d = game.permissions.get_group("Default")
d.set_allows_action(defines.input_action.deconstruct, false)
d.set_allows_action(defines.input_action.import_blueprint_string, false)
d.set_allows_action(defines.input_action.edit_permission_group, false)
local t = game.permissions.create_group("Trusted")
t.add_player("alice")
```

The names in `defines.input_action` are the internal names of each action, and they change from time to time between game versions; the Factorio Lua API documentation lists the current set. A group made with `create_group` starts with every action allowed, so you only need to forbid things.

> [!TIP]
> The deconstruction planner is the griefer's favourite tool: one drag can mark a whole base for removal, and construction bots do the rest within seconds. Forbidding it for `Default` stops most damage on a public server before it starts.

For the wider question of how to run staff and rules, see [server rules, moderation and staff](https://www.renode.space/blog/server-rules-moderation-and-staff).

#### Lua commands: /c, /sc and /mc

`/c` (or `/command`) runs a line of Lua with access to the full game API. It is the most powerful tool an admin has and the one most likely to cause regret.

| Prefix | Behaviour |
| --- | --- |
| `/c <lua>` | Runs the Lua; the command is shown to all players |
| `/sc <lua>` | Silent - runs without announcing the command |
| `/mc <lua>` | Runs it and reports how long it took |

Who can use them is controlled by `allow_commands` in `server-settings.json`: `true`, `false` or `admins-only`. On anything other than a private game for friends, it should be `admins-only`.

> [!WARNING]
> Running any Lua command permanently disables achievements on that save, for everyone. The game asks you to repeat the first command to confirm. `/editor` and `/cheat` have the same effect. On a server where people care about achievements, agree before anyone types `/c`.

A few lines that are worth knowing, all real API calls:

```lua
-- How many players are connected
/sc game.print(#game.connected_players)

-- Teleport a named player to a position on Nauvis
/sc game.get_player("bob_builds").teleport({0, 0}, "nauvis")

-- Reveal a 1000x1000 area around the origin for your force
/sc game.forces.player.chart("nauvis", {{-500, -500}, {500, 500}})

-- Kill all enemy units currently on the map
/sc game.forces.enemy.kill_all_units()

-- Remove all pollution from a surface
/sc game.surfaces["nauvis"].clear_pollution()
```

One gotcha catches everyone using the server console: `game.player` means the player who typed the command. In game that is you. In the server console or through RCON, there is no such player, and `game.player` is `nil`. Use `game.get_player("name")` instead.

`/editor` switches an admin into the map editor in place, which is as powerful as it sounds and disables achievements too. `/cheat` unlocks recipes and gives cheat mode; its options have changed between versions, so check `/help cheat` before using it.

#### RCON: commands from scripts and bots

RCON lets a program send commands to the server over TCP. It is enabled with two launch arguments:

```bash
$ ./bin/x64/factorio --start-server-load-latest \
    --server-settings ./data/server-settings.json \
    --rcon-port 27015 --rcon-password "a-long-random-string"
```

`--rcon-bind <address:port>` binds to a specific address instead. Factorio speaks the standard Source RCON protocol, so any RCON client works - `rcon-cli`, `mcrcon`, most Discord bot libraries - and every command in this post is accepted.

| Port | Protocol | Purpose |
| --- | --- | --- |
| `34197` | UDP | Game traffic |
| `27015` (example) | TCP | RCON, any port you choose |

Chat sent through RCON appears in game as from `<server>`. Lua commands sent through RCON print their output back to the RCON client if they use `rcon.print` rather than `game.print`:

```lua
/sc rcon.print(#game.connected_players)
```

RCON is a full admin channel with a password and nothing else - no rate limit, no second factor. Use a long random password, add the RCON port only if something actually uses it, and never reuse the password elsewhere. On RE:NODE, extra ports are added on the Network tab, so an RCON port exists only when you add one. [RCON, safely](https://www.renode.space/blog/rcon-safely) goes through the failure modes.

#### Logs: knowing what happened

`--console-log <file>` writes the chat and server events to a file, with tags such as `[JOIN]`, `[LEAVE]`, `[CHAT]`, `[KICK]` and `[BAN]`. That is the record you need when a player says they were kicked for nothing, and it is easy to search.

For griefing investigations there is also action logging. `/toggle-action-logging` turns on a log of individual player actions - building, mining, opening containers - written to the server log. It is verbose, so switch it on when you have a problem and off when you have the answer. [Logs worth keeping](https://www.renode.space/blog/logs-worth-keeping) covers how long to keep logs and why.

#### Settings that save admin work

A few `server-settings.json` settings that remove whole categories of admin trouble:

| Setting | Recommended | Why |
| --- | --- | --- |
| `require_user_verification` | `true` | Names are real factorio.com accounts |
| `allow_commands` | `admins-only` | No Lua for ordinary players |
| `only_admins_can_pause_the_game` | `true` | Nobody pauses a public game |
| `afk_autokick_interval` | `30` | Frees slots, in minutes; `0` is off |
| `max_players` | Set it | Admins can join a full server anyway |
| `game_password` | Set it on private servers | Easy to change live with `/config` |

On RE:NODE the settings file is in place on the first boot with a game password generated for the server, the console is unfiltered so every command and join appears in it, and the Schedules tab can send console commands on a cron expression - `/server-save` before a nightly backup, for example. [Scheduled tasks worth having](https://www.renode.space/blog/scheduled-tasks-worth-having) has more patterns.

#### When a griefer gets through anyway

Permission groups reduce damage; they do not prevent all of it. When someone does get through - a train network rerouted into a wall, a power grid cut, a main bus pulled up - work through it in this order rather than fixing things by hand while the culprit is still online.

1. **Stop the damage.** `/ban <player> <reason>` from the console or the `/admin` window. A kick alone lets them straight back in.
2. **Stop the bots.** If they used a deconstruction planner, construction bots will keep carrying out the orders after they leave. An admin can cancel the marked deconstruction with a planner of their own, or the whole team can stand clear while you decide whether to roll back.
3. **Decide between repair and rollback.** A small amount of damage is faster to repair in place, especially with blueprints of the affected area. Anything large is faster to undo by loading an autosave from before it happened - at the cost of whatever honest progress was made in between.
4. **Roll back cleanly.** Stop the server, copy the chosen `_autosave` file over the main save or rename it so `--start-server-load-latest` picks it up, and start again. Tell players first, because their last few minutes will vanish.
5. **Close the gap.** Look at what the player was able to do, and forbid it for the group they were in.

The autosave slots are what make step 4 possible, and they rotate - with the defaults, five slots ten minutes apart cover under an hour. If the damage was done earlier than that, you need a real backup from outside the server. [Backups that actually restore](https://www.renode.space/blog/backups-that-actually-restore) explains why it is worth testing one before you need it, and on RE:NODE, backup slots are included on every Factorio plan and restored with a button.

It also helps to know who was online and when. With `--console-log` set, the join and leave lines give you a timeline in seconds, and action logging - if it was on - tells you exactly who placed or removed what. Turn it on for a while after an incident, when a second attempt is most likely.

#### Troubleshooting

**Commands do nothing in the console.** Missing slash, or `allow_commands` is `false`. Without a slash the text is chat.

**An admin lost their rights.** They are not on the admin list file, or someone used `/demote`. Promote them from the console.

**`game.player` errors in the console.** There is no player at the server console. Use `game.get_player("name")`.

**The whitelist is ignored.** The server was started without `--use-server-whitelist`.

**A `/config set` change vanished after restart.** `/config` changes the running server only. Update `server-settings.json` too.

**Achievements are gone.** Someone ran `/c`, `/editor` or `/cheat` on this save. That cannot be undone; an older save from before it still has them.

#### FAQ

##### How do I make myself admin on my own Factorio server?

Type `/promote yourname` in the server console. The console always has full rights, and the server writes you into the admin list file so it lasts.

##### Does /sc disable achievements like /c does?

Yes. Any Lua command - `/c`, `/sc` or `/mc` - disables achievements for the save. Silent only means other players are not told.

##### Can I give some players build rights but not deconstruction?

Yes, with permission groups. Forbid the deconstruct action in the group those players are in, and leave building allowed. `/permissions` shows every action.

##### Are bans per server or global?

Per server. They are stored in that server's ban list file. Copy the file to share a ban list between your servers.

##### Can a Discord bot run commands on the server?

Yes, through RCON, which accepts every command in this post. Use a long password and bind it carefully, because RCON has full admin rights.

Factorio servers on RE:NODE come with an unfiltered console where every slash command runs with full rights, the settings file in place with a generated game password, RCON ports added on the Network tab only when you need one, and Schedules that send console commands on a cron expression.

[See Factorio plans](https://www.renode.space/game-servers/factorio)

---

### Factorio Space Age multiplayer server

Published 2026-10-07 by RE:NODE Team. https://www.renode.space/blog/factorio-space-age-multiplayer-server

A Space Age multiplayer server is the normal Factorio 2.0 headless server with three expansion mods enabled - `space-age`, `quality` and `elevated-rails`. The headless package ships with the expansion's data, so the server itself needs no licence, but every player who joins must own Space Age. What changes is the scale: each planet and each space platform is a separate surface, simulated all the time, so a mature Space Age game behaves like several factories running in one tick. Plan for 4-6 GB of memory on a long game, bigger saves and longer joins, and a single CPU core that has to carry every planet at once. This post covers enabling the expansion, starting or converting a map, what each planet costs, and keeping the update rate at 60.

The headless server itself - download, `server-settings.json`, ports, admins - is covered in the [Factorio headless server guide](https://www.renode.space/blog/factorio-headless-server-guide), and the general theory of UPS and mods in [Factorio mods and UPS](https://www.renode.space/blog/factorio-mods-and-ups-performance). This post is the Space Age layer on top.

#### What Space Age is, in server terms

Space Age is the paid expansion released alongside Factorio 2.0. Technically it is delivered as three official mods that sit next to `base`:

| Mod | Adds | Who needs to own it |
| --- | --- | --- |
| `space-age` | Planets, space platforms, new science, new enemies | Every player |
| `quality` | Quality tiers for items and machines | Every player |
| `elevated-rails` | Raised rail ramps and supports | Every player |

All three are part of the paid expansion. They can be enabled independently - a server can run elevated rails and quality without the planets - but a player who does not own the expansion cannot join a server with any of them enabled.

The free 2.0 update is everything else: the engine changes, the reworked fluid system, the new rail building, the remote view and the interface improvements. A server with all three expansion mods disabled is a 2.0 base-game server, and anyone with Factorio can join it.

The headless server download from factorio.com includes the expansion's data folders - `data/space-age`, `data/quality`, `data/elevated-rails` - alongside `data/base`. There is nothing extra to download for the server.

#### Enabling the expansion on a headless server

Whether the expansion is active is decided by `mods/mod-list.json`, exactly as for any other mod:

mods/mod-list.json:

```json
{
  "mods": [
    { "name": "base", "enabled": true },
    { "name": "elevated-rails", "enabled": true },
    { "name": "quality", "enabled": true },
    { "name": "space-age", "enabled": true }
  ]
}
```

The mods do not need to be in the `mods` folder as zip files - they are loaded from `data/`. `mod-list.json` only switches them on or off. If the file does not exist yet, the server creates it on first start; in current 2.0 releases the expansion mods are enabled by default when the data is present, so check the file rather than assuming either way.

The expansion has to be enabled when the map is created if you want a Space Age game from the start:

```bash
$ cd /opt/factorio
$ ./bin/x64/factorio --create ./saves/space.zip \
    --map-gen-settings ./data/map-gen-settings.json
$ ./bin/x64/factorio --start-server-load-latest \
    --server-settings ./data/server-settings.json
```

`--start-server-load-latest` loads the newest save in `saves/`, including autosaves, which is what you want after any unclean stop. The headless guide covers the other arguments.

On RE:NODE the map is generated on the first boot and the `mods` folder is there from the start, so turning the expansion on or off is an edit to `mod-list.json` in the file manager - followed by a new map if you want it from day one.

> [!NOTE]
> Check the exact version. Client and server must run the same 2.0.x build, expansion or not. Steam updates players automatically; the headless server only updates when you download the new package. Update both together.

##### Starting fresh, or adding Space Age to an existing map

You have two choices for a group that already has a 2.0 base-game map:

**Start a new Space Age map.** Everyone goes through the expansion's progression from the start, and the map is generated with the expansion's changes to Nauvis from the beginning. This is what most groups do.

**Enable the expansion on the existing save.** Factorio supports loading a base-game save with the expansion turned on: the new technologies appear in the tree and the other planets become reachable as your research gets there. Your existing Nauvis base is kept. Take a backup before you do it, because there is no clean way back - once a save has been loaded with the expansion and played, disabling the expansion again removes everything that came from it.

Saves from 1.1 also load in 2.0, with migrations. Mods are the problem there: many 1.1 mods were never updated for 2.0, and a 1.1 save that depends on one cannot move forward without dropping that mod. [Factorio mods and UPS](https://www.renode.space/blog/factorio-mods-and-ups-performance) explains why removing a content mod from a save is so destructive.

#### Surfaces: why one Space Age game is several factories

A surface in Factorio is a separate map. A 1.1 game had one, Nauvis. A Space Age game has one for each planet you have reached and one for each space platform you have built.

```diagram
title: One Space Age server, many surfaces, one tick
server = Headless server | one game tick
nauvis = Nauvis | biters, main base
vulcanus = Vulcanus | demolishers
fulgora = Fulgora | scrap, lightning
gleba = Gleba | spoilage, pentapods
platforms = Space platforms | each is a surface
server -> nauvis
server -> vulcanus
server -> fulgora
server -> gleba
server -> platforms
```

Two facts follow.

**Every surface is simulated all the time.** The factory on Vulcanus keeps producing while every player is on Nauvis. A platform keeps travelling and fighting asteroids with nobody aboard. That is necessary for the game to work, and it means the cost of a Space Age game is the sum of all its bases, not the one the players are looking at.

**All surfaces share one update.** There is one game tick for the whole server. If the Gleba base is expensive enough to push the tick past 16.67 milliseconds, the whole game - every planet, every platform - slows down for everyone. A slow planet slows the universe.

Space platforms deserve their own mention. A platform is a moving factory: hub, asteroid collectors, crushers, thrusters, turrets and whatever production you put on it. Platforms in transit are fighting asteroids continuously. A few are cheap; thirty forgotten platforms parked in orbit, still collecting and crushing asteroids into full hubs, are not.

#### What each planet costs

The planets are not equally expensive. Each has a mechanic that shows up on the server in its own way.

| Surface | What costs | What helps |
| --- | --- | --- |
| Nauvis | Biters, pollution, the main base | Same as 1.1: fewer bots, sensible defences |
| Vulcanus | Large mining and foundry builds | Big drills and foundries mean fewer entities |
| Fulgora | Scrap recycling chains, lightning | Compact recycling, attractors where needed |
| Gleba | Spoilage on items, agriculture, pentapod attacks | Short, fast production lines, less buffering |
| Aquilo | Heating networks, cryogenics | Keep heat pipe networks tidy |
| Platforms | Asteroid collection, turrets, thrusters | Fewer, purposeful platforms |

Gleba is the planet most likely to surprise a server. Many of its products spoil over time, so items carry spoil timers, and long buffers full of perishable goods are both wasteful and work for the simulation. Gleba bases that run short and fast are better for the game and for the server.

The 2.0 engine helps in places. The fluid system was rewritten to be cheaper and more predictable, and large new machines - foundries, electromagnetic plants, big mining drills - do far more per entity than their 1.1 equivalents. A Space Age factory built with the new buildings can be smaller in entity count than a 1.1 factory of the same output.

#### Memory, saves and joining

| Stage | RAM | Save size | Notes |
| --- | --- | --- | --- |
| Nauvis only, early game | 1-2 GB | 5-20 MB | Like a 2.0 base game |
| Two or three planets | 2-4 GB | 20-60 MB | First platforms running |
| All planets, several platforms | 4-6 GB | 60-150 MB | Typical long game |
| Large late game, many platforms | 6 GB+ | 150 MB+ | Measure, do not guess |

Memory grows with every surface, because Factorio keeps the whole map of every surface in memory. Exploring a planet with radar charts more of it, and charted map data stays.

Saving needs more memory, briefly, than running. A server at 90% of its limit is most likely to reach it during an autosave. On RE:NODE a container that hits its memory limit is stopped and restarted clean rather than swapping - fine for the machine, but it loses everything since the last autosave. RE:NODE's Factorio plans run from 1 GB to 6 GB, which covers most Space Age groups; a very large late game can outgrow the top tier, and the memory graph will show it coming. [When to upgrade your plan](https://www.renode.space/blog/when-to-upgrade-your-plan) has the signs.

Saves matter for joining too. A player joining downloads the whole save - every surface - and then catches up to the current tick. A 100 MB save on a modest connection takes a while, and the catch-up takes longer if the server is near its tick budget. On a busy server, lower `max_upload_slots` in `server-settings.json` so joins happen one or two at a time and each is faster.

#### Keeping UPS at 60

UPS - updates per second - is the only performance number that matters for Factorio, and the server has 16.67 ms per tick to update every surface. The single-threaded rule from 1.1 still applies: more cores do not raise UPS; a faster core does.

Measure before you change anything. The headless binary can run a save as fast as possible and report time per tick:

```bash
$ ./bin/x64/factorio --benchmark ./saves/space.zip \
    --benchmark-ticks 1000 --benchmark-runs 3 --benchmark-verbose all
```

With the expansion, the breakdown in verbose mode covers every surface together, so a planet that is suddenly expensive shows up as a jump in the relevant subsystem. [Factorio mods and UPS](https://www.renode.space/blog/factorio-mods-and-ups-performance) has the full benchmark method.

Then, in roughly this order:

1. **Retire unused platforms.** Every platform is a surface. Deconstruct the ones you no longer need instead of parking them.
2. **Use the new big machines.** Foundries, electromagnetic plants and big mining drills replace many old entities with one.
3. **Shorten Gleba lines.** Less buffering of spoiling goods.
4. **Rein in bots on Nauvis.** A main bus of bots costs far more than belts, as it always did.
5. **Fewer radars.** Remote view does not need radars everywhere.
6. **Restart regularly** so memory stays flat. [Restart schedules that help](https://www.renode.space/blog/restart-schedules-that-help) has the timing argument.

Remote view, which lets players look at any planet or platform, is rendered by each player's own machine. It costs the client frame rate, not the server's tick, so a player complaining of low frame rate while viewing Fulgora is describing their PC.

#### Server settings worth revisiting for Space Age

A few `server-settings.json` keys behave differently in a Space Age game:

| Key | Default | Space Age consideration |
| --- | --- | --- |
| `auto_pause` | `true` | With nobody connected, platforms stop mid-trip and planets stop producing. Usually what you want |
| `autosave_interval` | `10` | Bigger saves take longer to write; do not push it too high to compensate |
| `autosave_slots` | `5` | Five copies of a big save use real disk space |
| `max_upload_slots` | `5` | Lower it on a big save so joins finish faster |
| `afk_autokick_interval` | `0` | Players on long platform trips are sometimes AFK on purpose |

The `/config set` console command changes most of these on a running server - `/config set max-upload-slots 2` takes effect immediately. The console reference is in [Factorio server commands and admin](https://www.renode.space/blog/factorio-server-commands-and-admin).

#### Playing together across planets

Space Age changes how a group plays on one server, and a few of those changes are worth knowing before the first rocket.

Players spread out. Early on everyone is on Nauvis; by the mid game it is normal to have one player on Vulcanus building foundries, another on Fulgora sorting scrap and a third riding a platform between them. That is fine for the server - it simulates every surface anyway - but it means any one player can make a mess on a planet nobody else is watching. Permission groups and a clear agreement on who owns which planet save arguments later.

Travel takes real time. A platform trip between planets is a journey measured in minutes, and a player aboard is out of reach of the rest of the factory until it arrives. With `auto_pause` on, a trip started just before everybody logs off simply waits for the next session.

Space platforms are shared property. Any player on the force can change a platform's schedule, its requests and what it builds, which is the multiplayer version of somebody rerouting the trains. Agree on platform names and purposes, and treat changing another player's platform the way you would treat moving their belts.

#### Backups before every update

Factorio 2.0 is still receiving patches, and Space Age saves contain a lot of state that migrations have to carry forward. Before every update of the headless server, take a copy of the save. Before enabling the expansion on an existing map, take a copy. Before adding or removing a mod, take a copy.

Autosaves are not backups: they live next to the save on the same disk and they rotate. [Backups that actually restore](https://www.renode.space/blog/backups-that-actually-restore) makes the case for real copies that you occasionally test. On RE:NODE, backup slots are included on every Factorio plan, stored off the machine and restored with a button, and the Schedules tab can send `/server-save` as a console command and take a backup straight after, on a cron expression.

#### FAQ

##### Does the Factorio headless server need a Space Age licence?

No. The headless download includes the expansion's data and runs without a licence. Each player who joins a server with any of the expansion mods enabled must own Space Age.

##### Can players without Space Age join a Space Age server?

No. They can join only a server with `space-age`, `quality` and `elevated-rails` all disabled - a 2.0 base-game server.

##### Can I add Space Age to our existing 2.0 map?

Yes. Enable the three mods in `mod-list.json` and load the save; the new technologies and planets become available. Back up first, because disabling the expansion again later removes everything it added.

##### Why did the whole game slow down after we settled Gleba?

All surfaces share one game tick. If one planet's base is expensive, the tick takes longer for everyone. Run the benchmark, then look at long buffers of spoiling products and the size of the Gleba base.

##### How much RAM does a Space Age server need?

2-4 GB through the first planets, 4-6 GB for a long game with every planet and several platforms. Watch the memory graph during autosaves, when use briefly peaks.

Factorio plans on RE:NODE run from 1 GB to 6 GB, with the headless server installed, the map generated on first boot and `mod-list.json` editable in the file manager to turn the expansion on. Backup slots are on every plan for the copy you take before each update.

[See Factorio plans](https://www.renode.space/game-servers/factorio)

---

### Factorio headless server: setup and admins

Published 2026-09-21 by RE:NODE Team. https://www.renode.space/blog/factorio-headless-server-guide

The Factorio headless server is a separate download from factorio.com, not the Steam copy of the game with the graphics switched off. It is about 57 MB compressed and under 300 MB installed, it needs no graphics driver and no Steam account, and it will happily run a four-person map inside 1 GB of memory. Everything about it is configured by one JSON file and a handful of command-line arguments. This guide covers all of it: the install, creating a map, every key in `server-settings.json`, the port, the admin files, RCON, and the autosave behaviour that decides how much progress a crash costs you.

#### What a Factorio headless server is

Factorio's multiplayer is deterministic lockstep. The server does not send you the state of the world; it collects everybody's inputs, stamps them with a tick number, and sends that back out. Every machine - server and clients - then runs the identical simulation and arrives at the identical result. That single design decision explains most of what follows:

- **Bandwidth per player is tiny.** You are sending key presses, not entity positions. A busy eight-player game is a few tens of kilobytes per second in each direction.
- **Joining is expensive.** A new player has to be given the entire map before they can start simulating it. That is one burst of the whole save file, which is why the settings file has upload limits in it.
- **Everyone runs the same mods, at the same versions, or nobody connects.** There is no such thing as a client-side-only mod in Factorio. A mod changes the simulation by definition.
- **The server needs to keep up on its own.** If the server cannot hit 60 updates per second, the whole game slows down for everybody. Clients that fall too far behind are dropped and have to re-download the map.

The headless build has no renderer, no audio and no sprite atlas, which is why its memory use is much lower than the desktop game's on the same save. It cannot take screenshots, it cannot run the map editor, and it cannot show you a GUI mod's settings window - the practical consequences of that are in the mods section below.

#### Requirements and resource usage

Factorio is one of the least demanding games to host until it suddenly is not. A fresh map with four people is trivial. The same map three hundred hours later, with a thousand trains and forty thousand bots, will pin one core.

| Stage | RAM | CPU | Notes |
| --- | --- | --- | --- |
| New map, 1-4 players | 1 GB | 1 core | Comfortable for a first playthrough |
| Mid game, 4-8 players | 2 GB | 1.5 cores | Trains running, first rocket in sight |
| Large base, 8-16 players | 3-4 GB | 2 cores | Save files past 40 MB |
| Space Age or a big overhaul pack | 4-6 GB | 2+ cores, fast ones | Several surfaces multiply everything |
| Megabase | 6-8 GB | The fastest single core you can buy | Clock speed is the only thing that helps |

- **CPU**: the update loop is effectively single-threaded. Core count buys you almost nothing past two; clock speed and cache buy you everything. A server that has fallen to 45 updates per second cannot be fixed by adding cores.
- **Disk**: the install is under 300 MB. Save files start around 2-5 MB and grow with the explored area - 20-40 MB is a normal mid-game figure, and megabases pass 100 MB. Multiply by your autosave slot count, because they all live on disk at once.
- **Network**: low and steady, with a spike every time somebody joins. If a player's download of the map is slow, that is `max_upload_in_kilobytes_per_second` doing what you told it to.

Memory is the one that surprises people, because Factorio holds the entire map in RAM and never lets go. Exploring with radar, adding a second surface, or turning on a mod that generates terrain will all push it up permanently. If the container is stopped at its memory limit mid-game you lose everything since the last autosave, so size for where the base is going rather than where it is. The general point in [CPU vs RAM for game servers](https://www.renode.space/blog/cpu-vs-ram-for-game-servers) applies squarely here: find out which one you are actually running out of before buying more of the other.

#### Installing it and creating a map

The headless package is not on Steam and there is no SteamCMD app id for it. You download it from factorio.com directly. `stable` gives you the current stable build; substitute `latest` for the experimental branch if your group is on one.

```bash
$ curl -L -o factorio-headless.tar.xz \
    https://factorio.com/get-download/stable/headless/linux64
$ tar -xJf factorio-headless.tar.xz -C /opt
$ /opt/factorio/bin/x64/factorio --version
```

The package is self-contained. Its `config-path.cfg` ships with `use-system-read-write-data-directories=false`, which means saves, mods, config and logs all live under `/opt/factorio` rather than in `~/.factorio`. That is worth knowing before you go looking for a save file in the wrong place.

```text
/opt/factorio/
  bin/x64/factorio          the server binary
  config/config.ini         generated on first run
  data/                     base game data and the example JSON files
  mods/                     mods go here
  saves/                    save files and autosaves
  factorio-current.log      the log, with factorio-previous.log beside it
```

Four example files ship in `data/`: `server-settings.example.json`, `map-gen-settings.example.json`, `map-settings.example.json` and `server-whitelist.example.json`. Copy the ones you want rather than editing the examples in place, because a game update will overwrite them.

A headless server cannot generate a map on start the way a Minecraft server does. You create the save first, as a separate command:

```bash
$ cd /opt/factorio
$ cp data/server-settings.example.json data/server-settings.json
$ cp data/map-gen-settings.example.json data/map-gen-settings.json
$ ./bin/x64/factorio --create ./saves/world.zip \
    --map-gen-settings ./data/map-gen-settings.json \
    --map-settings ./data/map-settings.json
```

`map-gen-settings.json` holds the things you choose on the new-game screen: terrain and ore frequency, size and richness, water, starting area, cliff settings and the enemy base parameters. `map-settings.json` holds the things that keep changing while the game runs: pollution diffusion, enemy evolution and expansion, path finding budgets and steering. Both are optional - leave them out and you get default settings - but they can only be set at creation time for the map generation half, so it is worth a minute now.

Then start the server:

```bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \
    --server-settings ./data/server-settings.json \
    --server-adminlist ./data/server-adminlist.json \
    --port 34197 --console-log ./logs/console.log
```

`--start-server-load-latest` is the argument you actually want on a hosted server, because it loads the newest file in `saves/` including autosaves. That means a restart after a crash picks up the most recent autosave instead of the save you named three weeks ago.

> [!WARNING]
> `--create` on a path that already exists overwrites it without asking. If you are scripting a start command, never leave `--create` in it. That is the single most common way people delete a Factorio map.

On a panel-based host you do not type any of this. The install is done for you and the same arguments appear as fields on the Startup tab - on RE:NODE the map is generated on the first boot, and the settings file is already in place with a game password generated for the server.

#### server-settings.json line by line

This is the whole configuration. The example file is heavily commented with `_comment_` keys, which the server ignores, so you can delete them or leave them.

| Key | Default | What it does |
| --- | --- | --- |
| `name` | - | The name in the public server list |
| `description` | - | The second line in the list |
| `tags` | `[]` | Search tags for the list, an array of strings |
| `max_players` | `0` | `0` is unlimited. Admins can join a full server anyway |
| `visibility.public` | `true` | Publishes to the official matching server |
| `visibility.lan` | `true` | Broadcasts on the local network |
| `username` / `password` | - | Your factorio.com login, required for `public` |
| `token` | - | Use instead of `password`, from your factorio.com profile |
| `game_password` | - | What players must type to join |
| `require_user_verification` | `true` | Only clients with a valid factorio.com account |
| `max_upload_in_kilobytes_per_second` | `0` | `0` is unlimited. Caps map transfers to joining players |
| `max_upload_slots` | `5` | How many players can be downloading the map at once |
| `minimum_latency_in_ticks` | `0` | Artificial latency floor. One tick is about 16 ms |
| `max_heartbeats_per_second` | `60` | Network tick rate, minimum 6, maximum 240 |
| `ignore_player_limit_for_returning_players` | `false` | Old hands get in past `max_players` |
| `allow_commands` | `admins-only` | `true`, `false` or `admins-only` |
| `autosave_interval` | `10` | Minutes between autosaves |
| `autosave_slots` | `5` | Autosaves are cycled through this many files |
| `afk_autokick_interval` | `0` | Minutes of inactivity before a kick. `0` never kicks |
| `auto_pause` | `true` | Pause the game when nobody is connected |
| `auto_pause_when_players_connect` | `false` | Pause while somebody is downloading the map |
| `only_admins_can_pause_the_game` | `true` | Stops anyone pausing a public game |
| `autosave_only_on_server` | `true` | Clients do not also write autosaves |
| `non_blocking_saving` | `false` | Forks to save without freezing the game. Experimental |

The four `segment_size` keys at the bottom control how long network messages are split up as the player count changes. Leave them alone unless you are debugging connection drops on a large public server; raising them increases the server's upload requirement and can make things worse for players on poor connections.

Four of these decide whether your server behaves well:

**`visibility.public` with `username` and `token`.** A public server has to authenticate against factorio.com. Get the token from your profile page on factorio.com and put it in `token`, not your account password. If the credentials are wrong the server still starts and still works for direct connections - it just logs a matching-server error and never appears in the list. People spend an hour on firewall rules for what is a typo in a token.

**`auto_pause`.** On by default, and correct for almost every private group: with nobody connected the game stops advancing, so biters do not evolve and pollution does not spread while you sleep. Turn it off only if you want the factory running unattended, and remember that a paused server still uses its memory.

**`allow_commands`.** `admins-only` is the sensible default. Any use of `/c` permanently marks the save as having used commands, which disables achievements for everyone on it. `/silent-command` and `/measured-command` count too.

**`autosave_interval`.** Ten minutes is the default and it is a reasonable trade. Saving a large map blocks the game for a moment - a noticeable freeze on a megabase - so the temptation is to raise it. Resist: the interval is exactly how much progress an unclean stop costs.

#### Ports, joining and the public list

| Port | Protocol | Purpose |
| --- | --- | --- |
| `34197` | UDP | Game traffic. The only port the game itself needs |
| `27015` | TCP | RCON, if you enable it. Any port will do |

Factorio uses one UDP port and nothing else. There is no separate query port, which makes it one of the simplest games to firewall - and also means a TCP-only rule will silently produce a server that runs and cannot be reached. [Game server ports explained](https://www.renode.space/blog/game-server-ports-explained) covers why that mistake is so common.

```diagram
title: How a player finds and joins a Factorio server
client = Factorio client | 2.0.x
matching = factorio.com | matching server
server = Headless server | UDP 34197
save = Save file | sent on join
client -> matching : browse public games
matching -> client : address and tags
client -> server : direct UDP
server -> save : autosave every 10 min
server -> client : map transfer
```

There are three ways in:

1. **Direct connect.** Multiplayer, then Connect to address, then `203.0.113.10:34197`. Always works, needs no factorio.com login on the server, and is the first thing to test.
2. **The public list.** Needs `visibility.public`, valid credentials and `require_user_verification` left on. New servers appear within a minute or two.
3. **LAN.** `visibility.lan` broadcasts on the local network only. Irrelevant on a hosted server.

Joining is not instant. The client downloads the whole save, which on a mature map is tens of megabytes, then catches up to the current tick. If that catch-up takes too long the join fails and retries. Lowering `max_upload_slots` to `2` or `3` on a busy server makes each individual join faster at the cost of queueing them.

#### Admins, whitelist and bans

Three JSON files, all plain arrays of factorio.com usernames, all passed as arguments:

server-adminlist.json:

```json
["kovarex", "Rseding91"]
```

```bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \
    --server-settings ./data/server-settings.json \
    --server-adminlist ./data/server-adminlist.json \
    --server-banlist ./data/server-banlist.json \
    --server-whitelist ./data/server-whitelist.json \
    --use-server-whitelist
```

The whitelist is only enforced when `--use-server-whitelist` is present; the file alone does nothing. The ban list accepts either bare usernames or objects with a `username` and a `reason`. All three are written back by the server when you use the matching console commands, so do not hand-edit them while the server is running or your change will be overwritten on the next `/ban`.

Usernames here are factorio.com account names, which is why `require_user_verification` matters: with verification off, anyone can claim any name and your admin list becomes decorative.

#### Console commands and RCON

The headless server reads commands from standard input, which on a panel is the console box. Anything an in-game admin can type works there, without the leading slash being optional - use the slash.

| Command | What it does |
| --- | --- |
| `/players` | Lists players, with `online` or `count` as an argument |
| `/admins` | Lists the admin list |
| `/promote <name>` | Makes a player an admin for this session and file |
| `/demote <name>` | Removes admin |
| `/kick <name> <reason>` | Kicks |
| `/ban <name> <reason>` | Bans and writes the ban list |
| `/unban <name>` | Unbans |
| `/banlist` | Prints or edits the ban list |
| `/whitelist add\|remove\|get\|clear` | Manages the whitelist |
| `/mute <name>` | Stops a player using chat |
| `/server-save` | Saves immediately, without waiting for the autosave |
| `/config get <key>` | Reads a live setting |
| `/config set <key> <value>` | Changes one, without a restart |
| `/time` | How long the map has been running |
| `/evolution` | Current enemy evolution factor and what is driving it |
| `/seed` | The map seed |
| `/version` | Build number |

`/config` is the one worth memorising, because it changes `server-settings.json` values on a running game. The keys use hyphens rather than the JSON underscores: `allow-commands`, `autosave-interval`, `autosave-only-on-server`, `afk-auto-kick`, `game-password`, `ignore-player-limit-for-returning-players`, `max-players`, `max-upload-slots`, `max-upload-speed`, `non-blocking-saving`, `only-admins-can-pause`, `require-user-verification`, `visibility-lan`, `visibility-public`. So `/config set max-players 12` takes effect immediately and `/config get game-password` tells you what the password actually is when nobody can remember.

RCON is enabled with two arguments and speaks the standard Source RCON protocol over TCP, so `rcon-cli`, `mcrcon` and every Discord bridge that supports Minecraft will talk to it:

```bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \
    --server-settings ./data/server-settings.json \
    --rcon-port 27015 --rcon-password "a-long-random-string"
```

RCON has no rate limiting and no second factor, and anything sent through it runs as an admin. Never expose it to the internet on a guessable password - [RCON, safely](https://www.renode.space/blog/rcon-safely) goes through the failure modes properly.

#### Saves, autosaves and updates

Factorio writes `_autosave1.zip` through `_autosave5.zip` in `saves/`, cycling through the slots. On a busy map the save itself is a visible stutter for every player, which is the price of the safety.

- **A clean stop saves.** Sending the process an interrupt, or pressing Stop on a panel, writes the map before exiting. Watch for the save line in the log before you assume it is done.
- **A kill does not.** Killing the container, running out of memory, or a host crash loses up to one full autosave interval.
- **`--start-server-load-latest` is the safety net.** Without it, a restart loads the named file and silently ignores three hours of autosaves.
- **Autosaves are not backups.** They are on the same disk as the save they protect, and slot cycling means an unnoticed corruption is overwritten within an hour. Take real copies somewhere else, and restore one occasionally to prove it works - that is the entire argument of [backups that actually restore](https://www.renode.space/blog/backups-that-actually-restore).

Updating is a manual download of the new headless package and an unpack over the top; there is no auto-updater in the headless build, and the client and server must be on exactly the same version to connect. On RE:NODE the backup slots included on every Factorio plan cover the "before I update" copy, and the Schedules tab can run a daily backup and a weekly restart on a cron expression without you being there.

Mods live in `mods/` as `.zip` files named `ModName_1.2.3.zip`, with `mods/mod-list.json` deciding which are enabled. When a client joins a modded server the game offers to download and enable the matching mods automatically, so players do not need to install anything by hand as long as the mods are on the official portal. The details, including what mods do to update rates, are in [Factorio mods and UPS on a server](https://www.renode.space/blog/factorio-mods-and-ups-performance).

#### Troubleshooting

**The server is not in the public list.** Almost always the factorio.com credentials. Check the log for a matching-server error, confirm `visibility.public` is `true`, and use the token from your profile rather than your password. Test with a direct connect first: if that works, the server is fine.

**"Map version is not compatible" or an outright version mismatch.** The client updated and the server did not. Both must be the exact same build. If you run mods, update them before the server, not after.

**Players time out while joining a large map.** Raise `max_upload_in_kilobytes_per_second` if you set it, or lower `max_upload_slots` so fewer transfers share the pipe. A player who has already joined once downloads only the difference, so the first join is always the worst.

**Everybody is at 45 updates per second.** The server cannot simulate the map fast enough. Nothing about the network will fix it. That is the whole subject of the [mods and UPS](https://www.renode.space/blog/factorio-mods-and-ups-performance) post.

**The server restarts every few minutes.** Usually the memory limit on a container being reached during a save, because saving briefly needs more memory than running does. Look at whether the restarts cluster around the autosave interval, then either raise the limit or set `non_blocking_saving` off if you turned it on. [Why your game server keeps restarting](https://www.renode.space/blog/why-your-game-server-keeps-restarting) covers reading the pattern.

**The map reset to a fresh start.** A `--create` left in the start command, or a start command pointing at a save path that does not exist. The old file is usually still in `saves/`.

**Commands do nothing.** `allow_commands` is `admins-only` and you are not on the admin list, or you are typing into the console without the slash.

#### FAQ

##### Do I need to own Factorio to run a headless server?

No. The headless package is a free download and the server needs no licence. You need a factorio.com account only to publish the server to the public list, and each player obviously needs their own copy of the game.

##### Can I run the headless server from my Steam install?

No. Steam ships the full game, which is a different build with graphics. You can host from inside the game, but that ties the map to one person's machine and pauses when they leave. The headless package is the separate, correct download.

##### How many players can a Factorio server hold?

`max_players` defaults to unlimited and the practical ceiling is the simulation, not the player count. Twenty people on a modest base is fine. The same twenty on a megabase will not be, because every client has to keep up with the same update rate.

##### Where do I find the join password?

`/config get game-password` in the console prints it, and `game_password` in `server-settings.json` sets it. Changing it with `/config set game-password` takes effect immediately without a restart.

##### Why did we lose fifteen minutes after a crash?

The map is written on the autosave timer, not continuously. Anything after the last autosave existed only in memory. Lower `autosave_interval`, use `--start-server-load-latest` so restarts pick up the newest file, and stop the server cleanly when you can.

##### Does the server need the same mods as the clients?

Yes, exactly the same mods at exactly the same versions. Factorio has no client-side-only mods, because every mod changes the simulation. The client will offer to sync automatically with anything published on the mod portal.

Factorio servers on RE:NODE start from 1 GB with the map generated on the first boot, autosaves every ten minutes by default, and mods dropped straight into the `mods` folder over SFTP or the file manager. Backup slots are on every plan, the console is unfiltered, and the Schedules tab runs your daily backup on a cron expression.

[See Factorio plans](https://www.renode.space/game-servers/factorio)

---

### Factorio mods and UPS on a megabase server

Published 2026-09-21 by RE:NODE Team. https://www.renode.space/blog/factorio-mods-and-ups-performance

A Factorio server has one performance number and it is UPS: updates per second, target 60. Below 60 the game itself runs slow - conveyor belts move slower, furnaces smelt slower, the clock in the corner drifts behind real time - for everybody connected, and no amount of bandwidth or memory fixes it. UPS is decided by how long one simulation tick takes on one CPU core, and mods are the fastest way to make that tick longer. This post covers getting mods onto a headless server correctly, the rule that catches everyone (every client runs the identical list), what actually eats the tick budget, and how to measure a save instead of guessing.

#### UPS is the number that matters, not FPS

Factorio runs its simulation at a fixed 60 updates per second. That gives the server 16.67 milliseconds to update every entity on every surface, once. If it finishes in 9 ms, the game runs at 60 UPS with headroom to spare. If it takes 22 ms, the game runs at roughly 45 UPS and everything in the world happens at three quarters of normal speed.

FPS is a separate, client-side number: how often your machine draws the world. A headless server has no renderer at all, so it has no FPS. This is the first thing to establish when somebody says the server is laggy, because the three common complaints have three different causes:

- **Everything is slow, for everyone, including the clock.** That is UPS. The server cannot simulate fast enough.
- **My game stutters but the factory runs normally.** That is client FPS, on their machine.
- **My character rubber-bands, other people look fine.** That is their connection, not the server.

The same distinction runs through [what tick rate actually means](https://www.renode.space/blog/what-tick-rate-actually-means) for other games. Factorio is unusual only in that the simulation rate and the game's sense of time are the same thing, so losing UPS is losing real speed rather than losing smoothness.

Because the update loop is effectively one thread, the only hardware that raises UPS is a faster core. Adding vCPU to a Factorio plan buys you headroom for saving, networking and the odd background task, and nothing else. This is the clearest case of the point made in [CPU vs RAM for game servers](https://www.renode.space/blog/cpu-vs-ram-for-game-servers): the two are not interchangeable and only one of them is your bottleneck.

#### Installing mods on a headless server

Mods are zip files in the `mods/` directory of the install, named exactly `Name_Version.zip` - `Krastorio2_1.4.0.zip`, not `Krastorio2.zip` or `Krastorio2 (1).zip`. The version in the file name must match the version inside the mod's `info.json`, because that is how Factorio resolves dependencies.

```text
/opt/factorio/mods/
  mod-list.json
  mod-settings.dat
  Krastorio2_1.4.0.zip
  flib_0.15.0.zip
  stdlib_1.4.6.zip
```

The headless build has no mod browser, so there are two practical routes. Download the zips from mods.factorio.com in a browser and upload them, or - the route that actually scales - build the mod list in a single-player game on your own machine, where the in-game manager resolves dependencies for you, and then copy the whole `mods` folder up. Uploading over SFTP or a file manager is the same job either way; [SFTP and the file manager](https://www.renode.space/blog/sftp-and-the-file-manager) has the connection details if you have not done it before.

Dependencies are declared in each mod's `info.json` and the server refuses to start if one is missing, printing the name and version range it wanted. That error is the single most useful thing in the log during a mod install, so read it rather than reinstalling things at random. A leading `?` in a dependency means optional, `!` means incompatible, and `~` means the mod is required but does not affect load order.

Mods go in the same folder whichever host you are on. On RE:NODE the `mods` folder is there from the first boot and mods drop straight into it over SFTP or the in-browser file manager, which also unpacks archives in place.

#### mod-list.json, versions and mod-settings.dat

`mods/mod-list.json` decides which of the zips present are actually loaded. It is written by the game and safe to edit by hand:

mods/mod-list.json:

```json
{
  "mods": [
    { "name": "base", "enabled": true },
    { "name": "elevated-rails", "enabled": true },
    { "name": "quality", "enabled": true },
    { "name": "space-age", "enabled": true },
    { "name": "flib", "enabled": true },
    { "name": "Krastorio2", "enabled": false }
  ]
}
```

Two things to notice. `base` is a mod and is always in the list. And the Space Age expansion is delivered as three separate mods - `space-age`, `quality` and `elevated-rails` - which can be enabled independently, so a server can run elevated rails without the rest of it.

Disabling a mod here is not the same as deleting the zip. Disabled mods are still checked for version conflicts on start but are not loaded. Deleting a content mod that a save already uses is a different and much more dangerous operation, covered below.

`mods/mod-settings.dat` holds every mod's settings. It is a binary file, so you cannot edit it with a text editor, and the headless server has no settings GUI. The only sane way to change a startup setting is to load the identical mod set in a single-player game on your own machine, set everything there, and upload the resulting `mod-settings.dat`. Runtime-global settings can be changed in game by an admin; startup settings cannot be changed at all without a restart, because they alter prototypes.

> [!WARNING]
> Removing a content mod from a map is permanent. Factorio will offer to delete every entity, item and recipe that mod provided and carry on. There is no undo, and the things it deletes are load-bearing parts of somebody's factory. Take a copy of the save first, every time.

#### Mod sync, desyncs and the identical-list rule

Factorio has no concept of a client-side-only mod. Every mod is part of the simulation - even one that only adds a GUI runs Lua that all machines must run identically - so the server and every client must have the same mods at the same versions, with the same startup settings. The game enforces this: a mismatch is refused at the join, with a list of what differs.

That sounds worse than it is, because the client will fix it for you. When a player joins a modded server the game offers to download and enable exactly what the server has, straight from the official mod portal, and to disable anything extra. The two cases where that fails are mods that are not published on the portal - a personal script, a mod pulled from a GitHub release - and mods that were removed from the portal after you installed them. Those must be distributed by hand.

Desyncs are the other side of determinism. If one machine's simulation diverges from the server's, Factorio detects it, drops that client, writes a desync report and makes them re-download the map. In vanilla this is rare enough to be a bug worth reporting. With mods it is usually a mod doing something non-deterministic, and the game will often tell you so plainly in the log - calling `math.random()` outside an event, for example, is invalid precisely because different machines would get different numbers.

If a particular mod desyncs one player repeatedly, the useful information is in the desync report the game writes, and the mod's author is the person who can read it. What you can do from the server side is make sure everyone is on the same mod versions, and stop the mods updating underneath you - which is the argument for pinning them, below.

#### What actually costs UPS

The tick budget is spent almost entirely on updating active entities. Anything asleep is nearly free; Factorio is aggressive about putting idle inserters, machines and belts to sleep. So the question is never "how big is my base" but "how many things are doing something every tick".

| Cost | Why | What helps |
| --- | --- | --- |
| Logistic robots | Each flying bot updates every tick, plus charging | Belts or direct insertion at scale |
| Radars | Continuous sector scanning, per radar | Keep two or three, not thirty |
| Combinators | Each one updates every tick, always | Clocks and latches instead of per-tick maths |
| Biters and pollution | Diffusion per chunk, pathfinding on attack | Fewer, larger walls; reduce expansion |
| Trains | Cheap while rolling, expensive when repathing | Fewer, longer trains; simpler junctions |
| Entity count generally | Everything above, multiplied | Beacons and modules, so fewer machines do more |
| Extra surfaces | Every surface is simulated, all the time | Do not keep dead platforms or unused planets |

Three of these deserve more than a table row.

**Bots versus belts.** A logistics network that moves a thousand items a second with bots is doing far more work per tick than a set of belts moving the same thing, because each bot is an individual entity with a position and a charge state, and belts use a highly optimised transport-line representation where a compressed run of items is close to free. Bots are wonderful for construction, for low-throughput logistics and for anything irregular. They are the wrong tool for a main bus. Direct insertion - machine to machine, no belt and no bot at all - is cheaper than either.

**Beacons and productivity.** The cheapest entity is the one that does not exist. Twenty beaconed assemblers producing what eighty unbeaconed ones would is not just a space saving; it is sixty fewer entity updates, sixty fewer inserters and a shorter belt network. This is why megabases look the way they do.

**Mod Lua.** A mod that registers a handler on the per-tick event and does real work in it pays that cost sixty times a second forever, on top of the entities it adds. Overhaul packs are usually well written about this; small convenience mods are the ones that quietly cost 2 ms a tick. The benchmark below will tell you which, because you can run the same save with and without a mod.

#### Measuring it with the benchmark flag

Guessing is a waste of an afternoon. The headless build can run a save as fast as the CPU allows, with no clients and no rendering, and report how long a tick took:

```bash
$ cd /opt/factorio
$ ./bin/x64/factorio --benchmark ./saves/world.zip \
    --benchmark-ticks 2000 --benchmark-runs 3 \
    --benchmark-verbose all --mod-directory ./mods
```

`--benchmark-ticks` is how many ticks to simulate, `--benchmark-runs` repeats the whole thing so you can see the variance, and `--benchmark-verbose all` adds the per-system breakdown: entity update, transport lines, circuit network, trains, electric network, fluids, robots and the rest. `--mod-directory` lets you point at a different mods folder, which is exactly how you test "what does this mod cost me" - benchmark the save twice, with two folders.

Read the average milliseconds per tick against the 16.67 ms budget. Under 10 ms is comfortable. Between 12 and 16 ms the server will hold 60 UPS on a quiet machine and drop below it when something else on the box is busy. Over 16.67 ms the game is already running slow.

Two caveats. A benchmark runs the save deterministically forwards, so it measures the factory rather than the players; twelve people opening map view and placing blueprints add work it will not see. And a benchmark on your own desktop tells you about your desktop's CPU, not the server's. Run it on the machine that will host the map if you can - the panel console will take the command, because it is the same binary.

In the graphical client, `F4` opens the debug settings and `F5` toggles the debug overlay, where the time usage panel gives you the same per-system breakdown live. Connected to a multiplayer game, that shows your own machine's work, but the UPS figure is the shared one.

#### Overhaul packs, Space Age and memory

Big mod packs change the sizing conversation entirely. Krastorio 2, Bob's and Angel's, Industrial Revolution 3, Pyanodons and the various space overhauls all add prototypes, recipes and often whole new surfaces. The effect on a server is threefold: the game takes longer to load at start, memory use goes up permanently, and the tick gets more expensive per entity because there are more entity types in play.

Space Age is the official version of this. Every planet you settle is another surface, simulated whenever anything on it is active, and a platform in transit is another one again. A five-surface Space Age game is closer to running five servers than one, and 4-6 GB is a realistic figure rather than a generous one.

Memory behaves differently from UPS and people mix the two up. More memory does not raise your update rate. What it buys is the ability to hold a bigger map, more surfaces and more mod prototypes without the container being stopped at its limit. Factorio also needs more memory momentarily while saving than while running, which is why a server that is fine for an hour dies exactly on an autosave. On RE:NODE hitting the memory limit stops the container and restarts it clean rather than letting it swap, which is the right behaviour for a game like this - but a restart mid-tick costs you everything since the last autosave, so it is worth sizing above the peak rather than at it. [When to upgrade your plan](https://www.renode.space/blog/when-to-upgrade-your-plan) is the general version of that judgement.

Before committing a long run to a pack, check which game version it supports. The 2.0 rewrite broke a great many mods and some large packs took a long time to come back; a map started on a mod that is then abandoned is a map you cannot update.

#### Getting UPS back on a slowing server

In rough order of how much they return for the effort:

1. **Benchmark first.** Find out which system is expensive before changing anything. Half of all Factorio "optimisation" is aimed at the wrong subsystem.
2. **Delete surplus radars.** A handful of radars covering the base is fine. Thirty spread across the map for visibility is a real cost with no gameplay value; use map pings and a few scouted chunks instead.
3. **Cut idle bots.** Look at the logistics network tab: bots that are permanently in the air are the expensive ones. Reducing the number of roboports in a network, or replacing a high-throughput bot link with a belt, moves the needle.
4. **Turn off what you do not use.** Disable enemy expansion in `map-settings.json`, or go peaceful, if the biter game is not the point of your run. Pollution diffusion and pathfinding are genuinely expensive on a large polluted map.
5. **Beacon and module the big production blocks.** Fewer machines doing more is the structural fix.
6. **Look at combinator spaghetti.** Per-tick arithmetic across hundreds of combinators adds up. Gate it behind a clock.
7. **Restart the server weekly.** Not a UPS fix, but it keeps memory flat and gives you a clean save point. The Schedules tab can do it - see [restart schedules that help](https://www.renode.space/blog/restart-schedules-that-help).

And then stop. A server sitting at 60 UPS with 6 ms to spare does not need optimising, and rebuilding a working base for a number nobody can perceive is how groups lose interest in a map. Optimise when the clock drifts, not before.

If UPS is fine but the server still feels wrong, the problem is elsewhere: a noisy neighbour on shared hardware, a network path with jitter, or a client that cannot keep up. [Shared CPU and noisy neighbours](https://www.renode.space/blog/shared-cpu-and-noisy-neighbours) covers the first, and [latency, jitter and packet loss](https://www.renode.space/blog/latency-jitter-and-packet-loss) the second.

#### Updating mods without breaking the save

Mods on the portal update whenever their authors publish, and there is no dependency lock file. On a server that matters, treat the mods folder as pinned state:

1. Take a backup of the save and a copy of the whole `mods` folder before touching anything. A backup nobody has restored is a hypothesis, so restore one occasionally - [backups that actually restore](https://www.renode.space/blog/backups-that-actually-restore) makes the case at length.
2. Update one mod at a time when you can, and read its changelog for migration notes.
3. Start the server and watch the log through the load. Migration scripts run once, on the first load after an update, and errors there are the ones that corrupt a save.
4. Tell players to sync from the server rather than updating from the portal themselves, so the versions cannot drift apart.

When a mod update does break the map, the fix is almost always to put the old zip back, not to remove the mod. [What to do when a mod update breaks](https://www.renode.space/blog/what-to-do-when-a-mod-update-breaks) has the full procedure, and [keeping a modded server clean](https://www.renode.space/blog/keeping-a-modded-server-clean) covers the hygiene that stops you needing it.

#### FAQ

##### How many mods can a Factorio server run?

There is no limit and the count is the wrong measure. Fifty small quality-of-life mods can cost less than one overhaul pack. What matters is how many entities the resulting map has and how much Lua runs every tick, which the benchmark flag will tell you in a minute.

##### Why is my server at 45 UPS when the CPU graph shows 40%?

Because the graph is averaging across cores. Factorio uses one of them for the simulation, and that one is at 100%. A four-core allocation with a single-threaded workload will always look under-used while being completely saturated.

##### Do players need to install the mods themselves?

No, as long as the mods are on the official portal. On joining, the client offers to download and enable exactly what the server runs and disable anything extra. Mods from outside the portal have to be sent to players by hand.

##### Can I add a mod to a map that is already running?

Adding is usually safe; removing is not. A new mod's content simply appears. Removing one deletes every entity it provided, permanently. Back the save up before either, and never remove an overhaul pack from a live map.

##### Does more RAM increase UPS?

No. Memory lets the server hold a bigger map without being killed; it does not make a tick shorter. Only a faster CPU core, or a cheaper factory, does that.

##### What is a realistic UPS target for a big base?

Sixty, and you should design to stay there. Serious megabasers accept less because they are chasing a production figure, but for a group playing together the moment the clock slows down the game stops feeling right, so treat 60 UPS as the constraint and build within it.

Factorio plans on RE:NODE run from 1 GB to 6 GB with NVMe storage, so a heavy mod pack has room to load. Mods go straight into the `mods` folder over SFTP or the file manager, the console is unfiltered so you can read migration errors as they happen, and every plan includes backup slots for the copy you take before a mod update.

[See Factorio plans](https://www.renode.space/game-servers/factorio)

## Rules for the assistant

- Never ask the user for a password, token, API key or `.env` contents, and tell them not to paste one into this chat. Describe where a secret goes instead.
- Secrets reach the server through the panel: `.env` is uploaded through the Files tab, startup variables are set on the Startup tab. `.env` never goes in the repository.
- An app server has exactly one reachable port. Read it from `SERVER_PORT` (also `PORT` when the panel starts a linked repository) and bind `0.0.0.0`; never hard-code a port.
- On every panel-managed server (everything except VDS and dedicated servers, which come with full root) only `/home/container` persists, and the process runs unprivileged: no root, `sudo`, `apt`, `systemd` or Docker.
- Memory is a hard limit; a process that reaches it is killed with no error message. Suggest a bigger plan only after ruling out a leak.
- Do not suggest changing the server's startup command or image to work around a code problem - fix the code or the repository.
- Prices and plans above were read when this file was generated. Send the user to the page linked at the top before quoting a price as current.
- For a specific server, the panel's Connect AI link (Console tab) gives the exact runtime, port, path and branch. Prefer it over these general rules when the user has one.
- If something here does not answer the question, the full deploy docs are at https://www.renode.space/llms-full.txt and support is at https://www.renode.space/contact.
