SERVER / DEPLOYMENT
Game Server Setup Guide
A complete guide to server token requests, environment variables, server visibility, and launch examples.
This guide collects the environment variables, token request workflow, and lobby visibility rules most commonly used when launching a server. The content has been updated from the latest server configuration document and reformatted for the website.
1. Overview
This manual explains how to configure and launch your own game server through environment variables in a .env file. After startup, the server automatically registers with the official lobby, and your settings determine its visibility and server type.
Note: marker-style variables such as GAME_HOST, GAME_LINK, and GAME_AUTO_RESTART are enabled as soon as they are defined. All other bool / Boolean variables should be set explicitly to true/false or 1/0.
2. Prerequisites
- You must use a cloud server (Alibaba Cloud, Tencent Cloud, AWS, or a similar provider) or a VPS virtual machine.
- Required: request a valid game authorization TOKEN (
GAME_TOKEN) from the official team. Without a TOKEN, you cannot open a public server. - Prepare a server with a public IP address that can be pinged and reached over the network, otherwise the review will be rejected.
- Install Docker and Docker Compose (recommended), or make sure the server runtime environment meets the game requirements.
- When applying for a TOKEN, send the email to
team@nextindie.cn.
Server application template · Game License and Services Agreement
I. Applicant information
User UID: [Please enter your game account user ID]
Server-bound public IP: [Please enter the unique fixed public IP address. It must respond to ping]
Server physical region: [For example: Asia, North America]
Application purpose and community size: [For example: personal server, server for a specific player community]
II. Important: Non-commercial operation commitment and compliance notice
As the operator behind this server, I have carefully read Chapter 10 of the Game License and Services Agreement and solemnly make the following legally binding commitments:
Purely non-profit nature: This server will remain strictly non-profit.
Only gratuitous donations are allowed: This server may accept only voluntary donations made out of support for the community, without compensation or any return benefit. All sponsored funds may be used only to offset the direct costs of physical hosting, such as server hardware rental, network bandwidth, and DDoS protection.
Strictly no sale of in-game assets or stats: This server will never directly, indirectly, or in disguised form sell any in-game virtual creature or dinosaur, character data, levels, stat bonuses, weapons, equipment, building materials, game tokens, or any virtual items that affect game balance.
Strictly no disguised privilege exchange: This server will never use forms such as donation lotteries, donation bonus gifts, paid custom characters or creatures, or paywalls or entry fees for joining the server or community as an exchange condition for in-game virtual goods or privileges.
No gambling mechanisms: Neither this server nor its associated communities, such as QQ groups or Discord servers, will set up loot boxes, raffles, roulette systems, or rebate mechanisms with a gambling nature involving in-game virtual goods.
III. Privacy isolation and security acknowledgement
I acknowledge and agree that the official collection of this server IP and the generation of a TOKEN are necessary for anti-cheat security and contract performance, and that this data processing complies with privacy regulations.
I undertake to keep the issued authorization TOKEN properly secured and never transfer, lease, or disclose it to any third party in any form. I bear full responsibility for any violations caused by improper management of the TOKEN or IP configuration.
I understand that sending this server application email to the official team constitutes my digital signature and unconditional acceptance of all legal terms in the Game License and Services Agreement. If I violate any of the red lines above, the official team may revoke the authorization TOKEN, blacklist the IP, and impose a platform-wide account ban and device blacklist without prior notice. 3. All configurable parameters
3.1 Basics and authorization
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_NAME | String | The Mesozoic | Server name shown in the room list |
GAME_ANNOUNCEMENT | String | None | Server announcement shown in a popup when players join. Supports \n line breaks |
GAME_PASSWORD | String | None | Server password. Leave empty for no password |
GAME_TOKEN | String | None | Game authorization TOKEN. This must be requested from the official team. Without a valid TOKEN, the server cannot register as a public server. See Section 4 for details. |
GAME_AUTO_RESTART | Presence flag | None | When this variable exists, automatic server restart is enabled to improve long-running stability |
GAME_ADMINS | String | None | Regular administrator user IDs for the server, separated by commas, for example 100001,100002,100003. |
Multilingual announcements (GAME_ANNOUNCEMENT_XX)
The server automatically matches the announcement to each player's client language. 16 language suffixes are supported: ZH (简体中文), ZHTW (繁體中文), EN (English), JA (日本語), KO (한국어), PT (Português), PTBR (Português Brasil), RU (Русский), ES (Español), FR (Français), DE (Deutsch), AR (العربية), TH (ไทย), VI (Tiếng Việt), ID (Bahasa Indonesia), TR (Türkçe).
Set them in .env as GAME_ANNOUNCEMENT_XX=content, e.g. GAME_ANNOUNCEMENT_EN=Welcome to the server!. When a language-specific announcement is not set, GAME_ANNOUNCEMENT is used as the default fallback.
After editing announcements, the server owner can run /reloadAnnounce to hot-reload them without restarting the server.
3.2 Networking and connection type
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_IP | String | 127.0.0.1 | Server bind IP address. If you want players on the internet to connect, fill in the correct public IP |
GAME_HOST | Presence flag | None | LAN mode only. When defined, the server automatically detects the machine LAN IP and ignores GAME_IP. The server becomes a LAN server and does not appear in the public server list |
GAME_PORT | Integer | 26666 | Server listen port (UDP). Make sure your firewall allows it |
GAME_MAX_PLAYERS | Integer | 64 | Maximum number of players that can be online at the same time |
GAME_GLOBAL | Boolean | true | Whether to register to the global room list. In most cases this should stay true |
GAME_PUBLIC | Boolean | false | Set to true to mark the server as public. If it stays false, the server remains private or visible only to friends |
GAME_LINK | Presence flag | None | Forces a private server (PRIVACY). Define this variable if you want a password-protected private room, optionally together with GAME_PASSWORD |
GAME_NODE | String | AS | Region node shown to players for latency reference. Valid values: AS (Asia), CN (China), NA (North America), SA (South America), EU (Europe), ME (Middle East) |
Connection type priority and combinations
If GAME_LINK is defined, the server becomes a private server (PRIVACY). Even if GAME_PUBLIC is set to true, it still exists only as a password-protected private room.
If none of those special variables are enabled, and GAME_PUBLIC is set to true with a valid GAME_TOKEN, the server is registered as an authorized server (AUTHORIZE). This is the main way regular players host public servers.
If GAME_PUBLIC is false, or the TOKEN is invalid, the server does not appear in the public list.
3.3 Game rules
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_DEAD_TIME | Integer (seconds) | 1800 | How long corpses remain before decaying away |
GAME_START_GROWTH | Float | 0.1 | Initial growth value for a new character (0.0 ~ 1.0) |
GAME_MAX_GROWTH | Float | 1.0 | Maximum growth value for a character |
GAME_SPEED_GROWTH | Float | 1.0 | Growth speed multiplier |
GAME_TEAM | Integer | 6 | Maximum team size |
GAME_CHILD | Integer | 0 | Maximum number of offspring a player can own at the same time. 0 means unlimited |
GAME_SAFE | Integer (seconds) | 0 | Spawn protection duration for new characters |
GAME_TEAM_DAMAGE | Boolean | true | Whether friendly fire is allowed |
GAME_HATCH | Boolean | true | Allows invited hatching and cooperative breeding with other players |
GAME_EVOL | Boolean | true | Allows eggs to become evolution eggs. If disabled, eggs always remain in the current species |
GAME_PK | Boolean | false | Set to true to allow players to initiate duels |
GAME_ALT_TURN | Boolean | true | Allows turning in place |
GAME_MALE_REBIRTH | Boolean | false | Allows rebirth using male characters |
GAME_SINGLE_BREED | Boolean | false | Allows solo hatching without a mate |
GAME_ERA_REBIRTH | Boolean | false | Allows cross-generational rebirth |
GAME_DOWNGRADE_REBIRTH | Boolean | false | Allows downgraded rebirth with growth rolled back |
GAME_LEARN | Boolean | false | Allows gene learning. Sub-rule: GAME_MAX_LEARN (integer, default 1, 0 = unlimited) sets the max genes a character can learn |
GAME_MAX_LEARN | Integer | 1 | Maximum number of genes a character can acquire through learning. 0 = unlimited (still capped by the innate gene slot limit of the character). Sub-rule of GAME_LEARN |
GAME_CHILD_ATTRIBUTE_INHERIT | Boolean | false | Allows offspring to inherit parent attributes. Sub-rules: GAME_CHILD_SIZE_INHERIT_MAX_MULTIPLIER and GAME_CHILD_ATTR_INHERIT_MAX_MULTIPLIER cap the maximum growth |
GAME_CHILD_SIZE_INHERIT_MAX_MULTIPLIER | Float | 1.5 | Maximum inheritable body size multiplier relative to species base size. Sub-rule of GAME_CHILD_ATTRIBUTE_INHERIT |
GAME_CHILD_ATTR_INHERIT_MAX_MULTIPLIER | Float | 1.5 | Maximum inheritable attribute multiplier (health/attack/defense/speed/consume) relative to species baseline. Sub-rule of GAME_CHILD_ATTRIBUTE_INHERIT |
GAME_HABITAT | Boolean | false | Enables the habitat capture system. Set to true to allow players to capture habitats on the map and receive growth buffs |
3.3.1 Realism and advanced rules
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_REALISM | Boolean | false | Enables the complete realistic PVE preset: disables PVP, uses Realism difficulty, and enables diet hostility, ecosystem rules, duels, berserk genes, default PVE AI attacks, nest protection, invite protection, egg protection, and all realism rules. Related variables can override the preset |
GAME_REALISM_PK | Boolean | Not set | Overrides the duel rule in the Realism preset; set to true to allow players to initiate duels |
GAME_REALISM_CRAZY | Boolean | Not set | Overrides the berserk-gene rule in the Realism preset; set to true to enable berserk genes |
GAME_INVITE_PROTECTION | Boolean | false | Enables protection after team or hatching invitations; both players cannot initiate attacks during protection, while confirmed duels and valid self-defense are unaffected |
GAME_EGG_PROTECTION | Boolean | false | When enabled, other players cannot directly destroy or eat your eggs; eggs inside a nest are still destroyed normally when the nest is damaged or destroyed |
GAME_REALISM_CARNIVORE_RACE_TEAM_LIMIT | Boolean | false | Carnivores may team only with the same species; herbivores, omnivores, and aquatic creatures are not limited |
GAME_REALISM_CORPSE_NEARBY_SAN_PENALTY | Boolean | false | Killing another player near a corpse applies a SAN penalty to carnivores |
GAME_REALISM_PVE_DIET_HOSTILE | Boolean | false | In PVE, creatures with different diets are hostile by default and can attack without a duel |
GAME_PVE_AI_DEFAULT_ATTACK | Boolean | false | When enabled, players and wild AI creatures can attack each other in PVE without dueling; protection and team, companion, owner, and kin restrictions still apply |
GAME_REALISM_HERBIVORE_PICKUP_CORPSE | Boolean | false | Controls whether herbivores can carry corpses; in the current code, true blocks corpse carrying |
GAME_REALISM_HERBIVORE_CORPSE_FEAR | Boolean | false | Herbivores build stress while inside the corpse detection range |
GAME_REALISM_DYNAMIC_TEAM_WEIGHT | Boolean | false | Enables the “Dynamic team weight” rule: calculates team weight from creature level and prevents joining after the total limit is reached |
GAME_REALISM_REVENGE | Boolean | false | After being killed, a player cannot initiate an attack against the killer during protection; self-defense remains allowed |
GAME_REALISM_CARCASS_CLAIM | Boolean | false | Carnivores claim a corpse after a player kill; claimants cannot initiate attacks until the corpse is eaten or they abandon it |
GAME_REALISM_NEST | Boolean | false | Enables the “Nest protection” rule: prevents destroying other players’ nests; existing PVE rules may independently prohibit damaging other players’ nests |
GAME_REALISM_KILL_COOLDOWN | Boolean | false | After a kill, blocks another initiated attack against the same player or device; both teams also receive a shorter cooldown |
GAME_REALISM_BAITING | Boolean | false | Players lingering near a feeding player, a complete nest, or an occupied habitat provoke the owner; the protected party may counterattack for a limited time |
GAME_REALISM_TEAM_LEAVE | Boolean | false | After leaving or being kicked from a team, temporarily blocks initiated attacks against former teammates |
GAME_REALISM_HUNGER_HUNT | Boolean | false | When hunger falls below the trigger ratio, a carnivore may hunt once outside PVE diet restrictions; it must feed to the reset ratio before using it again |
GAME_REALISM_RACE_CHAT_ISOLATION | Boolean | false | World and nearby chat are visible only to players of the same species; team chat is unaffected |
GAME_DISABLED_RACES | String | Empty | Comma-separated English species IDs, for example trex,mapu,velo. Listed species cannot be created, selected, or hatched |
GAME_WORLD_CHAT_COOLDOWN_SECONDS | Integer (seconds) | 15 | Wait this many seconds between world-chat messages; set to 0 to disable the cooldown. Developers, server owners, and admins are exempt from this cooldown |
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_REALISM_CORPSE_NEARBY_SAN_MULTIPLIER | Float | 3 | SAN multiplier deducted for a player kill near a corpse |
GAME_REALISM_CORPSE_NEARBY_RANGE | Float (meters) | 50 | Detection range for corpse-nearby rules |
GAME_REALISM_MAX_TEAM_WEIGHT | Integer | 12 | Value of the “Maximum team weight” rule; the absolute member limit still comes from GAME_TEAM |
GAME_INVITE_PROTECTION_SECONDS | Integer (seconds) | 1800 | Duration of mutual protection from initiated attacks after a team or hatching invitation |
GAME_REALISM_REVENGE_SECONDS | Integer (seconds) | 1800 | How long a killed player is protected from initiating an attack against the killer |
GAME_REALISM_KILL_SECONDS | Integer (seconds) | 1500 | Cooldown before the killer can initiate another attack against the same player or device |
GAME_REALISM_TEAM_FIGHT_SECONDS | Integer (seconds) | 900 | Attack cooldown between members of both teams after valid damage; disbanding or regrouping does not clear it |
GAME_REALISM_TEAM_LEAVE_SECONDS | Integer (seconds) | 900 | Cooldown before a departing player can initiate an attack against a former teammate |
GAME_REALISM_CARCASS_ABANDON_RANGE | Float (meters) | 200 | Abandonment timing starts after every claimant moves farther than this distance from the corpse |
GAME_REALISM_CARCASS_ABANDON_SECONDS | Float (seconds) | 60 | Releases the corpse claim after claimants remain away for this long |
GAME_REALISM_BAITING_RANGE | Float (meters) | 30 | Detection radius for feeding and nest-defense provocation |
GAME_REALISM_BAITING_THRESHOLD | Float (seconds) | 15 | Time spent continuously in the provocation detection range before counterattack permission is granted (shared by feeding, nest-defense, and habitat-defense provocation) |
GAME_REALISM_BAITING_PERMISSION_SECONDS | Float (seconds) | 60 | How long the protected side may initiate a counterattack after provocation (shared by feeding, nest-defense, and habitat-defense provocation) |
GAME_REALISM_HUNGER_HUNT_THRESHOLD | Float (ratio) | 0.2 | At less than 20% satiety, a carnivore receives one hunt permission outside PVE diet restrictions |
GAME_REALISM_HUNGER_HUNT_RESET_THRESHOLD | Float (ratio) | 0.8 | After using the hunt permission, satiety must recover to 80% before it is granted again |
Realism preset order: GAME_REALISM=true applies the complete preset first, then GAME_REALISM_*, GAME_PVE_AI_DEFAULT_ATTACK, GAME_INVITE_PROTECTION, GAME_EGG_PROTECTION, and GAME_INVITE_PROTECTION_SECONDS override their corresponding rules. Without the preset, realism and protection switches use their normal defaults.
3.4 AI and ecosystem
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_MAX_AI | Boolean | true | Whether AI ecosystem creatures are spawned. If disabled, only players will exist on the map |
GAME_AI_MATE | Boolean | false | Whether an AI mate is allowed to follow and assist the player |
3.5 Genes and proficiency
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_CRAZY | Boolean | true | Allows berserk genes |
GAME_GENE_SKILLFUL | Boolean | true | Enables the gene proficiency system |
GAME_KILL_SKILLFUL | Boolean | false | Whether killing other players grants gene proficiency |
3.6 Game modes (choose one)
| Variable | Type | Description |
|---|---|---|
GAME_MODE_SANDBOX | Boolean | Set to true to enable Sandbox mode, allowing players to freely choose species and disabling berserk genes |
GAME_MODE_EVOL | Boolean | Set to true to enable Evolution mode, which allows evolution-only gameplay |
GAME_MODE_PRIMEVAL | Boolean | Set to true to enable Primeval mode, which enables berserk genes and downgraded rebirth while disabling gene proficiency |
Enable only one mode. If multiple modes are defined, the one defined later overrides the earlier one.
3.7 Difficulty settings
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_SIMPLE | Boolean | false | Set to true to enable simple difficulty: generational rebirth, downgraded rebirth, and solo hatching are enabled while invited hatching is disabled |
GAME_NORMAL | Boolean | false | Set to true to enable normal difficulty: only generational rebirth is enabled |
GAME_HARD | Integer | 0 | Difficulty level value. Higher values are harder and override the previous two Boolean options |
3.8 PVP / PVE (choose one)
| Variable | Type | Description |
|---|---|---|
GAME_PVP | Boolean | Set to true to enable PVP mode (players can attack each other) |
GAME_PVE | Boolean | Set to true to enable PVE mode (player damage is disabled, but duels are still allowed) |
Choose one of these modes. It is not recommended to define both.
3.9 Map
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_MAP | String | Tag of the first built-in map | Map identifier, for example Oasis. Refer to the official map list for available values |
3.10 Social and chat
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_WORLD_CHAT | Boolean | true | Initial state of the world chat channel. Set to false to disable world chat for all players by default; the host can still toggle it at runtime with /worldchat |
3.11 MOD loading
| Variable | Type | Default | Description |
|---|---|---|---|
GAME_MODS | String | None | Comma-separated MOD names to load, for example ModA,ModB. Make sure those MODs are correctly installed in the server Data/Mods directory |
Boolean parameter syntax
Use true/false or 1/0 for all Boolean variables, for example GAME_PVP=true and GAME_WORLD_CHAT=false. Marker-style variables take effect as soon as they exist.
4. Server types and lobby visibility
| Server type | Required environment variables | Characteristics |
|---|---|---|
| LAN server (LAN) | Define GAME_HOST | Only players inside the same LAN can connect. The server does not appear in the public lobby |
| Private server (PRIVACY) | Define GAME_LINK, optionally together with GAME_PASSWORD. No TOKEN is required | Joining requires a password. The server remains private by default, though friends can still connect directly through other means. It does not appear in the public lobby list |
| Authorized server (AUTHORIZE) | Set GAME_PUBLIC to true and provide a valid GAME_TOKEN. Do not define GAME_HOST, GAME_LINK, or GAME_OFFICIAL | This is how most players host public servers. The server appears in the lobby and is marked as an authorized server, ranked just below official servers |
Key reminders
- If you want your server to appear in the lobby and be searchable by all players, all three conditions must be met: 1) set
GAME_PUBLICtotrue, 2) provide a validGAME_TOKEN, and 3) do not enableGAME_HOSTorGAME_LINK. - If you want a password-protected private room, you can use
GAME_LINKtogether withGAME_PASSWORD. This kind of server does not appear in the public lobby list. - A public server without a valid TOKEN will be blocked during registration and will report that the server TOKEN is invalid or expired.
- After startup, the server sends a heartbeat to the lobby every 90 seconds to remain listed. If heartbeats stop, the server is removed from the list, but connected players are not disconnected.
5. Configuration examples
5.1 Sandbox mode server
# Game authorization TOKEN (request from the official team; required for public servers)
GAME_TOKEN=
# Server name
GAME_NAME=The Sandbox
# Public IP (127.0.0.1 is only for local testing; use your real public IP so others can connect)
GAME_IP=203.0.113.10
# Server port (UDP)
GAME_PORT=26666
# Corpse despawn time (seconds)
GAME_DEAD_TIME=600
# Offspring count: 0 = disabled, 1 = one, 2 = two, and so on
GAME_CHILD=1
# Enable Sandbox mode
GAME_MODE_SANDBOX=true
# Register to the global server list
GAME_GLOBAL=true
# Maximum players
GAME_MAX_PLAYERS=50
# Server node (region hint for players only; no functional effect)
GAME_NODE=AS
# Public server
GAME_PUBLIC=true
# Allow gene proficiency
GAME_GENE_SKILLFUL=true
# Allow gaining proficiency from kills
GAME_KILL_SKILLFUL=true
# Allow gene learning
GAME_LEARN=true
# Game difficulty (higher is harder)
GAME_HARD=1
# No evolution eggs (eggs always stay in the current species)
GAME_EVOL=false
# Map name
GAME_MAP=Oasis
# Allow AI mate
GAME_AI_MATE=true 5.2 Evolution mode server
# Game authorization TOKEN (request from the official team; required for public servers)
GAME_TOKEN=
# Server name
GAME_NAME=The Evolution
# Public IP (127.0.0.1 is only for local testing; use your real public IP so others can connect)
GAME_IP=203.0.113.10
# Server port (UDP)
GAME_PORT=26666
# Corpse despawn time (seconds)
GAME_DEAD_TIME=1200
# Offspring count: 0 = disabled, 1 = one, 2 = two, and so on
GAME_CHILD=1
# Enable Evolution mode
GAME_MODE_EVOL=true
# Allow eggs to contain evolution eggs (this is NOT the evolution-mode switch)
GAME_EVOL=true
# Enable Primeval mode
GAME_MODE_PRIMEVAL=true
# Register to the global server list
GAME_GLOBAL=true
# Maximum players
GAME_MAX_PLAYERS=50
# Server node (region hint for players only; no functional effect)
GAME_NODE=AS
# Public server
GAME_PUBLIC=true
# Game difficulty (higher is harder)
GAME_HARD=0
# Allow AI mate
GAME_AI_MATE=true