Startup parameters are the arguments on the command line that launches a game server: which world to load, which port to listen on, how much memory to use, which mods to load and where to write logs. Some games are configured almost entirely this way (Valheim has no config file at all), others use the command line only for the essentials and keep everything else in a config file, and the syntax varies by engine - -flag value for Unity and Bohemia games, +convar value for Source and Rust, ?Option=Value for Unreal, --option for Factorio. On a panel you rarely type the line yourself: it is assembled from a template and the variables on the Startup tab. Knowing what the template turns into, and which flags matter for your game, is what lets you fix a server that will not start or does not do what its settings say.
This post explains the syntaxes, how panel startup variables become a command line, real launch lines for the common games, which wins when a flag and a config file disagree, and the mistakes that cause most startup failures.
Startup parameters versus config files#
Every game server has two places settings can live, and it pays to know which a game uses for what.
- The command line is read once, as the process starts. It typically holds things the server needs before it can read anything else: the port, the world or save to load, the config file's path, the memory size, the mod list.
- Config files are read after startup, often again on map change or on a reload command. They hold the long list of gameplay settings.
The split differs by game. Valheim puts everything on the command line. Minecraft puts almost nothing there besides memory and the jar, and keeps the rest in server.properties. Source games accept almost any console variable either way. DayZ and Arma 3 take the config file's path, the port and the mod list on the command line, and everything else in the .cfg. Before changing a setting, find out where the game expects it - a value in the wrong place is not an error, it is silently ignored.
The four syntaxes#
| Style | Example | Used by |
|---|---|---|
-flag value or -flag=value | -port=2302, -batchmode | Unity, Bohemia (Arma, DayZ), Java options, Valheim |
+command value | +map de_inferno, +server.port 28015 | Source engine, Rust, FiveM |
?Option=Value | TheIsland?listen?MaxPlayers=20 | Unreal Engine map URLs |
--long-option value | --start-server saves/world.zip | Factorio and other conventional Linux programs |
The + prefix in Source and Rust has a specific meaning: it runs a console command or sets a console variable at startup, exactly as if typed into the server console. A - option is a launch option read by the engine before the console exists. So in a Source game, -port 27015 sets the network port during engine start, and +map de_dust2 is the console command map de_dust2 issued once the engine is ready. Getting the prefix wrong is a common reason a parameter does nothing.
Unreal's ? options are appended to the first argument, the map, with no spaces: MapName?listen?Port=7777. Separate -Option=Value flags follow after a space. Many Unreal-based games accept some settings in both places and document only one.
How a panel builds the command line#
On a Pterodactyl-based panel, each game is defined by an egg that contains a startup template. The template uses placeholders in double braces, and the panel fills them from the variables shown on the Startup tab and from values the system sets itself.
java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}} noguiWhen the server starts, {{SERVER_JARFILE}} becomes whatever the Startup tab says, say server.jar, and the rest is filled from the system's own environment variables:
| Variable | Set from | Meaning |
|---|---|---|
SERVER_MEMORY | The plan's memory limit | In megabytes |
SERVER_PORT | The primary port allocation | The port the game should listen on |
SERVER_IP | The primary allocation's address | Often 0.0.0.0 inside the container |
| Egg variables | The Startup tab | Whatever the egg defines: world name, branch, password |
Egg authors decide which variables a user may see and which they may edit. A variable that is visible but not editable - the port is the usual example - is set by the host because changing it would break the mapping between the container and the outside world. Extra ports added on the Network tab are not used automatically: the game only listens on them if a variable, a flag or its config file tells it to, which is why a query or RCON port you just added often needs one more setting. Game server ports explained covers which ports each game needs.
On RE:NODE the Startup tab holds the game variables and environment variables for the server, and passwords such as admin and RCON passwords are generated per server when it is built. How eggs work in general is in Pterodactyl panel explained.
Launch lines by engine#
Java: Minecraft and proxies
$ java -Xms4G -Xmx4G -XX:+UseG1GC -jar paper.jar --noguiEverything before -jar is an option for the Java virtual machine: heap size, garbage collector, system properties. Everything after the jar name is an argument for the server itself. Putting a JVM option after the jar, or a server argument before it, means it is ignored or rejected. nogui and --nogui both turn off the old server window; on a headless host there is nothing to show it on anyway. Heap sizing and collector flags are a topic of their own in Minecraft JVM flags and Java versions.
Unity: Valheim, Rust, 7 Days to Die, Unturned
Nearly every Unity server is started with -batchmode (no interactive window or input) and -nographics (no graphics device at all), plus -logFile <path> to decide where output goes. The game's own options follow:
$ ./valheim_server.x86_64 -nographics -batchmode -name "Longship Crew" \ -port 2456 -world "Midgard" -password "herring-barrel-42" -crossplay$ ./RustDedicated -batchmode -logfile rust.log +server.port 28015 \ +server.level "Procedural Map" +server.seed 1234 +server.worldsize 4000 \ +server.maxplayers 100 +server.hostname "Example Rust" \ +server.identity "main" +rcon.port 28016 +rcon.password "change-me" +rcon.web 1$ ./7DaysToDieServer.x86_64 -logfile output_log.txt -quit -batchmode \ -nographics -configfile=serverconfig.xml -dedicated$ ./ServerHelper.sh +InternetServer/MyServerRust shows the Source-style + convention on a Unity engine: every +server. and +rcon. argument is a console variable. Unturned's +InternetServer/MyServer names the server's folder under Servers/, where its own Commands.dat holds the rest. The Valheim dedicated server guide has the full table of Valheim's flags.
Unreal Engine: Palworld, The Isle, Abiotic Factor, Satisfactory
$ ./PalServer.sh -port=8211 -players=32 -useperfthreads \ -NoAsyncLoadingThread -UseMultithreadForDSPalworld documents the three thread flags as improving performance on multi-core machines, -port and -players as the obvious, and -publiclobby as the switch that lists the server as a community server. Most of its gameplay settings are not flags at all but live in PalWorldSettings.ini. Other Unreal servers follow the same shape: a map URL with ? options, then -Port=, -QueryPort=, -log and game-specific flags. Each game's documentation is the authority, because two Unreal games rarely share more than the engine's own flags.
Source engine: CS2, TF2, Garry's Mod, CS 1.6
$ ./cs2 -dedicated -port 27015 +map de_inferno +game_type 0 +game_mode 1 \ +sv_setsteamaccount <GSLT>$ ./srcds_run -game tf -console -port 27015 +map ctf_2fort \ +maxplayers 24 +sv_setsteamaccount <GSLT>$ ./srcds_run -game garrysmod -console -port 27015 +maxplayers 32 \ +gamemode sandbox +map gm_construct +host_workshop_collection <id>-game names the game folder (tf, garrysmod, cstrike). -console gives a text console. +game_type and +game_mode together choose the CS2 mode - 0 and 1 is competitive, 0 and 0 casual, 1 and 2 deathmatch. -tickrate, familiar from CS:GO and Counter-Strike: Source guides, does nothing on CS2, which runs a fixed 64-tick server with sub-tick input. The CS2 specifics are in CS2 server commands and cvars.
Bohemia: Arma 3 and DayZ
$ ./arma3server_x64 -port=2302 -config=server.cfg -cfg=basic.cfg \ -profiles=profiles -name=server -mod="@CBA_A3;@ace" -serverMod="@admintools"$ ./DayZServer -config=serverDZ.cfg -port=2302 -profiles=profiles \ -mod="@CF;@Community-Online-Tools" -dologs -adminlog -netlog -freezecheckThe mod list is semicolon-separated and order matters: dependencies first. -serverMod loads mods the server needs but clients do not. -profiles decides where logs and the RPT file go. A single missing @ folder named in -mod stops the server, so this parameter is the first suspect when a Bohemia server dies after a mod change.
Everything else
# Factorio$ ./bin/x64/factorio --start-server saves/world.zip \ --server-settings data/server-settings.json --port 34197# Terraria$ ./TerrariaServer -config serverconfig.txt -port 7777# Project Zomboid$ ./start-server.sh -servername main -adminpassword "change-me"# FiveM$ ./run.sh +exec server.cfg +set onesync onProject Zomboid's memory is not on its command line; it is the -Xmx value inside ProjectZomboid64.json, which the start script reads. FiveM's +exec server.cfg runs the config file as console commands, which is why server.cfg is written as a list of commands rather than key-value pairs - see FiveM server.cfg explained.
When the command line and the config file disagree#
When the same setting appears in both places, the one applied last wins, and that is not always the command line.
- Source games execute
server.cfgwhen a map loads, which is after the command line has been processed. A+sv_passwordon the command line is therefore overwritten by ansv_passwordline inserver.cfg, every map change. - Rust also reads
server/<identity>/cfg/server.cfgduring startup, so a convar set both there and on the command line has two sources, and which one you end up with is not worth guessing. Pick one. - Valheim has nothing to disagree with: the command line is the configuration.
- Unreal games vary. Some take command-line values over ini values, some the reverse, and some ignore one source for particular settings. Test with a value you can see in the server browser.
The safe habit is to keep each setting in exactly one place. If the panel's startup variables set the port and the password, delete those lines from the config file rather than keeping them "in sync".
Memory flags and the container limit#
Memory flags interact with the plan's limit in a way that catches people out. A container has a hard memory ceiling; a Java server's -Xmx is only its heap, and the JVM needs memory beyond the heap for its own code, threads, buffers and native libraries. Setting -Xmx to the whole plan leaves no room for that overhead, and the process is ended by the limit under load.
A safe rule for Java servers is a heap of roughly 85-90% of the container on larger plans, and a little lower on small ones, where the fixed overhead is a bigger fraction. Unity and Unreal servers have no equivalent flag; their memory is whatever the game needs, and the only lever is the game's own settings.
On RE:NODE a server that reaches its memory limit is stopped and restarted clean rather than left to swap, so an oversized heap shows up as unexplained restarts rather than a slow server. Why your game server keeps restarting has the signature to look for.
Secrets on the command line#
Passwords, RCON passwords, Steam game server tokens and licence keys often end up as startup parameters. That works, with three cautions:
- Logs repeat them. Many games print their full command line at startup, so the password appears in every log file. Remove it before sharing a log.
- Other users of the panel can see them. Anyone with permission to view the Startup tab sees the values. Give moderators console access, not startup access.
- Names are public. Valheim refuses to start when the password appears in the server name, for good reason - the name is in the public list.
Where a game lets a secret live in a config file instead, that is often the better place; where it does not, treat the startup variables as sensitive. Environment variables and secrets covers the general practice.
Troubleshooting a startup line#
The errors that come from parameters are distinctive:
- The server ignores a setting. Wrong prefix (
-where+was needed), wrong place (command line for a setting the game only reads from its config), or a config file overriding it later. - "Unknown option" or the server prints its help and exits. A typo, or an option from another game or an older version. Factorio and Java both do this.
- The world resets to new. The world, save or identity name in the parameters does not match the folder on disk, so the server created a fresh one.
- Arguments split in the wrong place. A value with a space, such as a server name, without quotes.
-name Longship CrewpassesCrewas a separate, meaningless argument. - The port is already in use. The game is told one port by the command line and another by its config, and tries to open both, or a second server copied the first's line.
- A mod is not found. Bohemia
-modpaths are relative to the server folder and case-sensitive on Linux.@aceand@ACEare different folders.
Read the very first lines of the console when a startup change misbehaves. Most servers echo the parameters they received, and comparing that line to what you intended finds most of these in seconds. How to read a server console covers what to look for.
FAQ#
What do startup parameters do on a game server?
They are the arguments the server is launched with: port, world, memory, config file location, mod list, log path. Some games are configured entirely through them; most use them for the essentials and read the rest from a config file.
What is the difference between - and + in launch options?
In Source games and Rust, - options are read by the engine during startup, while + arguments are console commands or variables run once the server is ready. Using the wrong prefix usually means the setting is silently ignored.
Why does my server ignore a setting I put in the startup line?
Either the game reads that setting only from its config file, or the config file sets it again later and overrides the command line. Keep each setting in one place and check the first console lines to see what the server actually received.
Can I add my own flags on a panel?
That depends on the egg: many expose an "additional arguments" style variable, others only the variables their authors defined. Where the startup command itself is not editable, the game's config file is usually the place for extra settings.
Should Xmx be the same as my plan's memory?
No. Java needs memory beyond its heap, so a heap equal to the whole limit leaves the process nowhere to put the rest. Leave roughly 10-15% headroom, more on small plans.




Comments
Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.