ASSETTO CORSA · SERVER SETUP GUIDE · NOVEMBER 2026

How to Set Up an Assetto Corsa Dedicated Server

Set up an Assetto Corsa dedicated server that starts first time: find the server files, build the event in Content Manager, get pit boxes, entry lists and checksums right, and open the three ports drivers need.

Fastest path

Use the dedicated server files that ship with the game, build a preset in Content Manager, keep MAX_CLIENTS at or below the layout’s pit boxes, then upload only cfg/ and the required content/ data files.

What acServer reads

server_cfg.ini defines the event, entry_list.ini defines slots, cars and GUID locks, and content/cars plus content/tracks provide the data used for checksums.

Common blockers

Servers that exit at launch usually have a bad car folder, wrong track folder, or an empty CONFIG_TRACK on a multi-layout track. Cars that never spawn are usually a pit-box mismatch. “Checksum failed” means the server and driver do not have matching physics or track data.

Best admin choice

For friends or a small league, pickup mode with an optional locked entry list is usually easier than old booking mode. Public or private is decided by lobby registration and passwords, not by changing the event structure.

Where the server comes from, and what this guide covers

The standard Assetto Corsa dedicated server ships with the game. In your Assetto Corsa install folder, look for server/. That folder contains acServer for Linux, acServer.exe for Windows, and acServerManager.exe, which is Kunos’ own desktop tool for building the config files. The files the server actually uses live under server/cfg/, mainly server_cfg.ini and entry_list.ini. The car and track content it checks lives under server/content/cars and server/content/tracks.

If you are putting the server on a Linux box, the dedicated package is available through SteamCMD as app 302550. You log in with your own Steam account, not anonymous, and on Linux you add +@sSteamCmdForcePlatformType windows to download the package. The server is then started with ./acServer.

There are really two server paths in the Assetto Corsa world. The first is the standard Kunos racing server covered here. The second is AssettoServer, an alternative often used for freeroam, AI traffic and CSP-heavy setups, with extra settings in extra_cfg.yml. AssettoServer is not pit-box limited in the same way, but it is a different admin job. If your goal is normal practice, qualifying and races for friends or a league, stick with the standard racing server first.

The practical lesson is simple: do not think of this as one mysterious server application. Think of it as a small executable that reads two config files and checks a small set of content data. Once you see it that way, the setup becomes much easier to reason about.

Choose your setup tool before you touch the files

You can run the same server three ways: by hand-editing the files, by using Kunos’ acServerManager.exe, or by building presets in Content Manager. All three end in the same place, because the live server still reads server_cfg.ini and entry_list.ini. The difference is how much checking you get before launch.

Tool Best for What it does well What can still go wrong
Hand-editing the INI files Admins who want full control and understand folder names exactly Fast to copy, version and reuse; nothing hidden; ideal once you know the file structure Easy to mistype a car or track folder, forget a layout, or set more clients than pit boxes; Linux case mismatches are common
Kunos acServerManager People who want the official GUI and only need the standard server Builds the same config files without manual syntax work; good for basic sessions and passwords Less helpful for spotting content issues before launch; still relies on you having the correct track layout and content folders
Content Manager presets First-time admins, small leagues and anyone working with mod content Recommended for first setup: validates content, shows pit box count, warns about missing items, can run the preset locally for a quick check, and Pack creates the right archive structure You still need to understand what it writes, because the host runs the files, not the editor; a tidy preset does not fix blocked ports

For a first server, Content Manager is usually the easiest route because it catches the two mistakes that waste the most time: content mismatches and pit-box limits. It also stores presets under server/presets/, which makes it easier to keep a known-good event and clone it for the next race night. That matters because most server problems are not random performance faults; they are repeatable config and content faults.

Step 1: build the preset around track layout, pit boxes and session flow

Start with the track, because the track layout decides more than most admins expect. The TRACK key is the track folder name, and CONFIG_TRACK is the layout subfolder. If a track has more than one layout and you leave CONFIG_TRACK empty, the server usually fails at start because it cannot resolve which layout data to load.

Then choose the car list. In server_cfg.ini, CARS is a semicolon-separated whitelist of car folder names. That list limits what models the server will accept. In pickup mode, drivers can take any free car from that whitelist. In a locked or curated event, the actual slot allocation comes from entry_list.ini.

The pit-box rule is the one that catches most first-time admins: each active car needs a pit box on that specific layout. So MAX_CLIENTS must be less than or equal to the pit-box count, and entry_list.ini must contain at least that many [CAR_N] blocks or the server fails to start. On many Kunos tracks the number is generous, but mod tracks vary a lot. A short club circuit can have far fewer boxes than you expect.

Why this rule exists is straightforward. The server is not only holding places on a list; it is creating spawnable slots tied to pit positions. If you ask for more clients than the layout can place, you do not get a graceful reduction. You get missing spawns, broken grids, or a server that refuses to launch. That is why Content Manager showing the pit-box count is so useful at build time.

Build the session flow last. Assetto Corsa only runs the session sections that exist in the file. If you include [PRACTICE] and [RACE] but no [QUALIFY], there is no qualifying. That is useful for quick pickup sessions, because every extra phase adds waiting time for drivers and another place to misread the event flow.

At this stage, what you are really assembling is the server anatomy below: config files describe the event, content data proves the cars and track match, and the executable only joins those pieces together.

What acServer reads before the first driver joins
server_cfg.ini
The event: track and layout, car whitelist, sessions, assists, passwords and ports.
TRACK · CONFIG_TRACK · CARS · MAX_CLIENTS
entry_list.ini
The seat map: one [CAR_N] block per slot with model, skin and an optional Steam GUID lock.
At least MAX_CLIENTS blocks
content/
Car data.acd or data folder, track surfaces.ini and layout data. No textures or 3D models.
Used for checksums only
Then acServer…
  • Loads the track layout and checks the grid fits its pit boxes
  • Opens UDP 9600, TCP 9600 and TCP 8081
  • Lists itself in the Kunos lobby if REGISTER_TO_LOBBY=1
  • Compares each driver’s car and track checksums on connect
Stop the server before editing the INI files, or a shutdown can overwrite your changes.
Three inputs, one executable. Nearly every start-up failure traces back to a wrong value in one of these three boxes.

Step 2: set the essentials in server_cfg.ini

Once the preset is built, it helps to understand the small set of keys that really decide whether the event behaves as intended. Here is a compact example.

[SERVER]
NAME=Friends GT Night
CARS=ks_audi_r8_lms_2016;ks_ferrari_488_gt3;ks_mclaren_650_gt3
TRACK=spa
CONFIG_TRACK=
MAX_CLIENTS=12
PASSWORD=
ADMIN_PASSWORD=changeme
UDP_PORT=9600
TCP_PORT=9600
HTTP_PORT=8081
REGISTER_TO_LOBBY=1
PICKUP_MODE_ENABLED=1
LOCKED_ENTRY_LIST=0
LOOP_MODE=1
ABS_ALLOWED=1
TC_ALLOWED=1
STABILITY_ALLOWED=0
AUTOCLUTCH_ALLOWED=1
TYRE_BLANKETS_ALLOWED=1
FUEL_RATE=100
DAMAGE_MULTIPLIER=100
TYRE_WEAR_RATE=100
ALLOWED_TYRES_OUT=2
START_RULE=0

[PRACTICE]
TIME=20
IS_OPEN=1

[QUALIFY]
TIME=15
IS_OPEN=1

[RACE]
LAPS=12
TIME=0
WAIT_TIME=60
IS_OPEN=2

NAME, CARS, TRACK and CONFIG_TRACK tell the server what content to load. If one of those folder names is wrong, the process usually stops at launch, often naming the missing folder. MAX_CLIENTS does not create capacity out of thin air; it only tells the server how many slots to expose, and it must fit the layout and entry list.

REGISTER_TO_LOBBY decides whether the server appears in the public lobby. Set it to 1 to list it publicly, or 0 to keep it private and join by direct IP or through a launcher. This setting does not affect local performance. It affects discoverability and whether the server must successfully talk to the lobby service.

PICKUP_MODE_ENABLED is the modern default for most admins because it lets drivers join, take a free car and get on track with less ceremony. Old booking mode with [BOOK] still exists, but for league use it has largely been superseded by pickup mode plus LOCKED_ENTRY_LIST=1. That combination gives controlled entry without the extra booking phase.

LOOP_MODE=1 makes the session cycle repeat forever. For a casual friends’ server, that means the event keeps recovering itself after each race instead of stopping and needing a restart. The trade-off is that if you left a mistake in the rotation, it will keep repeating the mistake too. The way to tell it helped is simple: the server stays available after race end instead of going idle.

The assist keys are easy to misread. ABS_ALLOWED and TC_ALLOWED have three states: 0 means nobody can use them, 1 means only cars that have them from the factory can use them, and 2 means everyone can. This matters because the server is enforcing a driving aid rule, not changing car physics files. It costs no meaningful server resource; the trade-off is purely sporting consistency versus accessibility.

For races, use either LAPS or TIME and set the other to 0. That avoids ambiguity in race ending logic. IS_OPEN controls join timing per session: 0 means no joining, 1 means free join, and 2 means drivers may join until 20 seconds before the start. If people keep arriving late and upsetting the grid, tightening IS_OPEN in the race helps because it reduces churn at the exact moment the server is trying to lock and launch the field.

Step 3: use entry_list.ini to control slots, GUID locks and spectators

entry_list.ini is one block per grid slot, starting at [CAR_0]. Think of it as the server’s seat map. It tells the process which model belongs in a slot, which skin to use, whether the slot is a spectator, and optionally which Steam GUID is allowed to take that place.

[CAR_0]
MODEL=ks_audi_r8_lms_2016
SKIN=skin_folder_a
SPECTATOR_MODE=0
DRIVER_NAME=Alex
TEAM=Blue
GUID=765xxxxxxxxxxxxxx
BALLAST=0

[CAR_1]
MODEL=ks_ferrari_488_gt3
SKIN=skin_folder_b
SPECTATOR_MODE=0
DRIVER_NAME=Sam
TEAM=Red
GUID=
BALLAST=0

[CAR_2]
MODEL=ks_mclaren_650_gt3
SKIN=skin_folder_c
SPECTATOR_MODE=1
DRIVER_NAME=Broadcast
TEAM=
GUID=
BALLAST=0

Two things to adjust before you copy this. The skin values are placeholders: use the exact folder names from each car’s skins folder. And the example only shows three blocks to keep it short; with MAX_CLIENTS=12 a real file needs [CAR_0] to [CAR_11].

If LOCKED_ENTRY_LIST=1 in server_cfg.ini, only GUIDs listed here may join. That is the cleanest way to run a small league without relying on passwords alone. A password keeps randoms out; a locked entry list keeps even password-holders out unless they are on the approved slot list.

This file also explains why “entry list too short” can stop the server. If MAX_CLIENTS says the event supports a certain number of slots, but entry_list.ini does not define at least that many [CAR_N] blocks, the server has fewer slot definitions than the event claims to expose. That mismatch is a startup fault, not a minor warning.

Spectator slots are useful when you want a stream or a race control account connected without taking a race car place. They still consume a slot definition, so count them when you design the grid.

Step 4: upload the right content and understand checksums

The standard server does not need full car and track installs in the way a player PC does. It mainly needs the data files used for checksums: for cars, that is typically data.acd or a data folder; for tracks, key data such as surfaces.ini and the layout data. It does not need textures or models to police event integrity, because the server is not rendering the world.

This is why Content Manager’s Pack feature is so practical for first setups. It can produce an archive containing the relevant server executable for the chosen platform, the cfg folder, and a content folder with only the needed data files. On a rented host, the binary is usually already installed, so you normally upload just cfg/ and content/.

The checksum process is simple but unforgiving. When a driver connects, the server compares checksums of key files for the selected cars and track layout against the driver’s copy. Any difference means rejection. That difference can come from a different mod version, an edited physics file, or the wrong track layout data. Skins are cosmetic, so a missing skin usually just shows a default and does not block the join.

Linux adds one more trap: case sensitivity. TRACK=Ex_Hills might still work on Windows if the folder is really ex_hills, but it fails on Linux because the filesystem treats those as different names. The same applies to car folders, skin folders and layout names.

The standard server never sends cars or tracks to drivers. That means you need to publish a content list with exact versions for your group. Most players join through Content Manager, which can warn them about missing content before they get rejected, but the server itself will not rescue them by distributing files.

A driver can’t join: check in this order
Driver can’t get on track
Can they see the server or reach it by direct IP?
No
Network firstCheck 9600 UDP, 9600 TCP, 8081 TCP and REGISTER_TO_LOBBY.
Yes
Does the error say checksum failed?
Yes
Version mismatchServer and driver have different builds of that car or track. Agree one version and re-pack.
No
Do they have every car and the track installed?
No
Missing contentShare the content list. The server never sends cars or tracks.
Yes
Is LOCKED_ENTRY_LIST=1?
Yes
GUID lockAdd their Steam GUID to a free [CAR_N] slot.
No
Check the join password, free slots in the chosen car, then the driver’s own connection.
Network faults hide every other fault, so rule them out first, then content, then access rules.

Step 5: open the ports and make the server visible

The default networking setup uses 9600 for both UDP and TCP, plus 8081 for HTTP. You need to open 9600 UDP, 9600 TCP and 8081 TCP. If you are self-hosting, that means forwarding those ports on the router and allowing them through the local firewall as well.

UDP_PORT and TCP_PORT share the number 9600 by default, but they are two separate paths: a firewall rule for UDP alone, or TCP alone, leaves one of them closed. HTTP_PORT=8081 is the server’s HTTP information port, which the lobby and launchers such as Content Manager use to read details like the car list and player count. If only one of these paths is blocked, the symptoms can be confusing: the server may appear half-alive, show up inconsistently, or accept some requests but not let drivers fully connect.

REGISTER_TO_LOBBY=1 tells the server to reach Kunos’ lobby and list publicly. If you set it to 0, the server becomes private in the sense that it is not listed there, but it can still be joined directly if the network path and password allow it. That distinction matters because “not in lobby” does not always mean “offline”. It can simply mean “working privately”.

Drivers can join through the in-game server list, by direct IP, or through Content Manager. If the lobby listing is the only part failing, test a direct connection before touching the event files again. That tells you whether you have a discovery problem or a full connectivity problem.

The three default ports and what uses them
Game connection, UDP side (UDP_PORT)
Drivers
UDP 9600
acServer
Game connection, TCP side (TCP_PORT)
Drivers
TCP 9600
acServer
Server information (HTTP_PORT)
Lobby and launchers
TCP 8081
acServer
On a home connection all three need a router forward and a firewall rule. Running a second server on the same machine means giving it its own three ports in server_cfg.ini.
Same number, two protocols: 9600 must be open for both UDP and TCP, or the server looks half alive.

Public pickup, private practice, or a locked league server

The cleanest way to choose server style is to separate three decisions that often get muddled together: who can find it, who can enter it, and how strictly cars are assigned.

  • Public pickup: REGISTER_TO_LOBBY=1, empty or simple PASSWORD, PICKUP_MODE_ENABLED=1, and usually LOCKED_ENTRY_LIST=0. This is easiest to fill but hardest to control.
  • Private friends’ server: often REGISTER_TO_LOBBY=0 or a passworded listed server, still with PICKUP_MODE_ENABLED=1. Drivers join quickly and choose from free cars.
  • League server: keep pickup mode on, add LOCKED_ENTRY_LIST=1, and populate GUIDs in entry_list.ini. That preserves easy joining while enforcing approved slots.

PASSWORD controls who may enter as a normal driver. ADMIN_PASSWORD is separate and is used in chat with /admin <password> to gain admin powers. Keep those separate on purpose. If you reuse the same value everywhere, anyone you trust to join becomes someone you trust to administer, and those are rarely the same group.

A common point of confusion is penalties. There is no PENALTIES key in server_cfg.ini that suddenly gives you proper league race control. If you want track-limit strikes, stop-and-go logic or similar league tools, that is usually handled by plugins such as KissMyRank or Real Penalty, not by a hidden line in the standard config. So if you are building a serious league, plan the penalty system as a separate layer instead of hunting for a missing server flag.

RAM, CPU and the self-host or rent decision

The standard acServer uses very little memory and mostly leans on a single CPU core, so fast single-core speed matters more than collecting lots of cores you will barely touch. That is why the server can feel fine with modest RAM but still become rough if the host machine is busy on the main thread. If you want the broader picture behind that, this explainer on how game server hardware requirements work is worth reading before you buy a bigger plan than you need.

Our sizing guidance is straightforward: vanilla Kunos content up to 16 drivers usually fits 1GB; a modded league or drift grid around 16-32 drivers usually lands in the 2-4GB range; freeroam with AI traffic under AssettoServer around 16-40 drivers typically wants 4GB+; and large public lobbies or several servers at 32+ drivers often justify 6-8GB. Those figures are a planning baseline, not a promise, because heavy mods and extra layers change the shape of the load more than a plain Kunos event does.

Situation Tune it first Upgrade or rent sooner
Friends’ server on your own PC If the event is small, the content is tidy, and the real problem is ports or config mistakes If you cannot keep the PC on reliably, do not want router changes, or the machine is busy with other tasks while hosting
Small modded league If the pain is mainly checksum control and entry list management; use a preset workflow and fixed content list If you want a cleaner always-on environment and easier file access than your home PC allows
Freeroam or AI traffic plans Only if you are prepared to move to AssettoServer and manage its separate config path If your current plan was chosen for a simple racing server and is already tight
Large or recurring events If the server is stable and the only issue is event discipline; improve locked entries and admin workflow first If you need reliability, persistent availability, or several separate server instances

Self-hosting is perfectly workable for Assetto Corsa, but it comes with three jobs that never go away: forwarding the required ports, keeping the machine on, and copying every mod car and track to the server in the exact version your drivers use. If you are weighing that against a hosted plan, compare it with our guide to self-hosting a game server and then judge how much time you want to spend on the network side instead of the race schedule.

Need a simpler always-on setup?

If you would rather skip home networking, one-machine uptime worries and manual uploads for every event, compare plan types, panels and hardware priorities in our Assetto Corsa server hosting comparison.

Compare the best Assetto Corsa server hosts

Troubleshooting: symptom, likely cause, first fix

Most broken Assetto Corsa servers fail in predictable ways. The key is to fix the first thing that can invalidate the whole chain, not the tenth thing that only matters after the server has started properly.

Symptom Likely cause First fix
Server exits at start and names a folder Wrong car folder, track folder or missing layout in CONFIG_TRACK Check the exact folder names in CARS, TRACK and CONFIG_TRACK; on Linux, match case exactly
“Checksum failed” on car or track Server and driver have different physics or track data files Make both sides use the same mod version; re-upload the server’s content data files from the same source as the drivers
Server is not in the lobby REGISTER_TO_LOBBY=0 or the server cannot reach the lobby path Confirm REGISTER_TO_LOBBY=1 if you want it listed, then verify the ports and firewall path before editing race settings
Cars do not spawn or the grid is broken MAX_CLIENTS is higher than the layout’s pit boxes, or the entry list is too short Reduce MAX_CLIENTS to the layout limit and make sure entry_list.ini has at least that many [CAR_N] blocks
People inside your network can join, but nobody outside can Router forwarding or firewall rules are incomplete Open and forward 9600 UDP, 9600 TCP and 8081 TCP, then test from outside the local network
Changes vanish after restart The INI files were edited while the server was still running Stop the server before editing; otherwise shutdown can overwrite your manual changes
Skins show as default Missing skin on the client or server, but the car data itself matches Check the skin folder name in entry_list.ini; if missing, the server can still run because skins do not decide checksums

The good habit is to change one layer at a time. First make the server start. Then make it joinable by direct IP. Then make it appear in the lobby. Then lock down GUIDs, assists and race rules. That order avoids mixing a network fault with a content fault and wasting time on both.

Assetto Corsa server FAQ

Is the Assetto Corsa dedicated server free?

The dedicated server files ship with the game, so you do not buy a separate server application to run the standard racing server. If you host on your own PC, the main costs are your machine, electricity, internet connection and the time spent managing content and ports. If you rent a server, you are paying for the hosting environment rather than for the server software itself.

Which ports does an Assetto Corsa server need?

By default, open 9600 UDP, 9600 TCP and 8081 TCP. Those are controlled by UDP_PORT, TCP_PORT and HTTP_PORT in server_cfg.ini. If even one required path is blocked, the server can look partly alive while still failing for outside drivers.

Why can’t drivers join my Assetto Corsa server (checksum failed)?

A checksum failure means the server’s key car or track data files do not match the driver’s copy. It is usually caused by different mod versions, edited physics files, or the wrong track layout data on one side. Rebuild the server content from the exact same source and version the drivers are using, then retest before changing any ports or passwords.

How many players can an Assetto Corsa server hold?

The hard limit for a given event is set first by the track layout’s pit boxes, not by a wishful MAX_CLIENTS number. You also need at least that many [CAR_N] blocks in entry_list.ini. From a hosting point of view, our sizing guidance starts at 1GB for vanilla content up to 16 drivers and scales upward mainly when you add more players, heavier mods or several server instances.

Do I need Content Manager to run an Assetto Corsa server?

No. The server can be configured by hand with the INI files or through Kunos’ own acServerManager.exe. Content Manager is simply the most convenient first-time admin tool because it validates content, shows pit boxes, stores presets and can package the right cfg and content structure for upload.

More Assetto Corsa server help

Compare hosts, or read how game server hardware and self-hosting work in general.

Hosting panels often show these settings as form fields rather than raw INI files. The labels may differ, but the rules do not: pit boxes cap the grid, checksums must match, and all three ports must be open. Our RAM figures are planning guidance from our hosting comparison, not official Kunos numbers.