server_cfg.ini is the main configuration file for an Assetto Corsa racing server — the stock Kunos dedicated server. It controls the track, the sessions, the grid size, the assists, the race rules and the weather. Most guides tell you to paste in a template and change the name. This one explains every setting, what it actually does, and which values make sense — plus it corrects a few keys that half the internet gets wrong.
One thing to get straight before we start: this file belongs to the Kunos racing server. A freeroam server (AssettoServer) uses server_cfg.ini too, but adds a third file, extra_cfg.yml, for AI traffic and plugins. If you're setting up traffic and cruising, none of the race-rules settings below apply to you — read which Assetto Corsa server you actually need first. Everything here is the racing path.
server_cfg.ini lives in the server's cfg/ folder alongside entry_list.ini (the grid). Let's go through it section by section.
The [SERVER] section
This is the big one — server identity, network, grid size and race rules all live here.
; ---- cfg/server_cfg.ini → [SERVER] ---- [SERVER] NAME=My League — Round 3 GT3 @ Spa ; name shown in the server browser CARS=ks_ferrari_488_gt3;ks_mclaren_650_gt3 ; ';'-separated allowed car folders TRACK=spa ; track folder name CONFIG_TRACK= ; track layout subfolder ("" if none) MAX_CLIENTS=24 ; max drivers — MUST be <= track pit boxes PASSWORD= ; join password ("" = open) ADMIN_PASSWORD=change-this ; enables in-chat admin via /admin <password> UDP_PORT=9600 TCP_PORT=9600 HTTP_PORT=8081 ; lobby/HTTP port — must be reachable REGISTER_TO_LOBBY=1 ; 1 = list on the public lobby; 0 = private PICKUP_MODE_ENABLED=1 ; 1 = pickup (pick a car, join anytime) LOCKED_ENTRY_LIST=0 ; 1 = only GUIDs in entry_list.ini may join LOOP_MODE=1 ; 1 = loop the weekend forever
Key notes:
CARSis a whitelist, not the grid. The actual grid is defined inentry_list.ini. EveryMODELin the entry list must also appear inCARS.MAX_CLIENTSmust be less than or equal to the track's number of pit boxes. Most Kunos tracks have 24 pit boxes, so ~24 is the practical cap. Setting it higher than the track supports gives you ghost cars that never spawn — this is an engine limit, not a hosting one, and it's the reason racing grids are small.ADMIN_PASSWORDis what you type in chat as/admin <password>to get admin powers. Keep it private and different from the join password.PICKUP_MODE_ENABLEDandLOCKED_ENTRY_LISTtogether decide how leagues lock a grid — see the Booking vs pickup section below.
Race framing and results
RACE_OVER_TIME=180 ; seconds after the LEADER finishes before the race force-ends RESULT_SCREEN_TIME=60 ; seconds of results screen between sessions START_RULE=1 ; 0 = locked to grid, 1 = teleport jump-start fix, 2 = drive-through REVERSED_GRID_RACE_POSITIONS=0 ; 0 = no 2nd race; N = reverse top N; -1 = reverse all RACE_EXTRA_LAP=0 ; timed races: force one extra lap after the leader crosses
RACE_OVER_TIMEis how long backmarkers get to complete their lap after the leader takes the flag before the race is force-ended.START_RULEcontrols the start procedure:0locks cars to the grid until green,1teleports a jumped-start driver back,2gives a drive-through penalty for a jump start (on very short races this reverts to a teleport).REVERSED_GRID_RACE_POSITIONSruns an optional second race with a reversed grid from race one's finishing order. This is the correct key — you may seeRACE_GAP_ADDITIONAL_LAPSquoted elsewhere for grid reversal; that key does not exist in the Kunos server. Ignore it.
Physics and difficulty (server-enforced)
These apply to every client, regardless of their own settings — that's the point of a server.
FUEL_RATE=100 ; 0..infinity; 100 = realistic fuel burn DAMAGE_MULTIPLIER=100 ; 0 (none) .. 100 (full) TYRE_WEAR_RATE=100 ; 0..infinity; 100 = realistic wear MAX_BALLAST_KG=100 ; ceiling for per-car BALLAST set in entry_list.ini LEGAL_TYRES=SM;S;M;H ; ';'-separated allowed tyre short codes
LEGAL_TYRES is server-wide (in [SERVER]), not per-car. Per-car ballast and restrictor go in entry_list.ini — covered in running a league race weekend.
Driver assists — a three-state setting, not a checkbox
This is the one people misread. ABS_ALLOWED and TC_ALLOWED are tri-state:
ABS_ALLOWED=1 ; 0 = nobody, 1 = only factory-equipped cars, 2 = everyone TC_ALLOWED=1 ; same 0 / 1 / 2 scale STABILITY_ALLOWED=0 ; 0 = off, 1 = on AUTOCLUTCH_ALLOWED=1 ; 0 = off, 1 = on TYRE_BLANKETS_ALLOWED=1 ; 1 = tyres start at optimal temperature
ABS_ALLOWED=1 doesn't mean "on" — it means "only cars that had ABS in real life may use it". Set 2 if you want everyone to have it, 0 to ban it entirely. TC_ALLOWED works the same way. The others are plain on/off.
Penalties and cut detection — read this carefully
Here's the correction that separates a real guide from a copy-paste one: there is no PENALTIES=1 master switch in the Kunos server. That's a Content Manager UI toggle, not a real config key. The actual cut and penalty controls in [SERVER] are:
RACE_GAS_PENALTY_DISABLED=0 ; 0 = cutting triggers the "lift the gas" penalty; 1 = only logged ALLOWED_TYRES_OUT=2 ; wheels allowed off-track before it's a cut; -1 disables cut detection MAX_CONTACTS_PER_KM=-1 ; -1 = off; N = auto-kick after N contacts per km KICK_QUORUM=85 ; % of players needed to pass a kick vote VOTING_QUORUM=80 ; % needed to pass a session-restart vote BLACKLIST_MODE=1 ; how bans are handled after a kick
You will also not find keys like PENALTIES, JUMP_START_PENALTY, ANTI_CUTTING_ENABLED or MANDATORY_PIT in the Kunos file — they don't exist. Serious league penalty enforcement (track-limit strikes, stop-and-go, minimum pit time, driver swaps) is done with a plugin — KissMyRank or Real Penalty — not server_cfg.ini. Our racing servers ship KissMyRank built in for exactly this reason.
Mandatory pit stop
RACE_PIT_WINDOW_START=25 ; window opens (lap number for lap races, minute for timed) RACE_PIT_WINDOW_END=35 ; window closes
A stop only counts if the driver pits and stops in their box inside this window. Base Assetto Corsa enforces "must pit in the window" but not what the stop does (tyre change, minimum time) — that's plugin territory again.
The session sections: [PRACTICE], [QUALIFY], [RACE]
The server runs sessions in order — practice, then qualifying, then race — and only the sections that exist are run. A race-only server can omit practice and qualifying.
[PRACTICE] NAME=Practice TIME=30 ; session length in MINUTES IS_OPEN=1 ; 0 = no join, 1 = free join, 2 = join until 20s before green [QUALIFY] NAME=Qualify TIME=15 IS_OPEN=1 [RACE] NAME=Race LAPS=20 ; race distance by laps TIME=0 ; if > 0, race is TIMED (minutes) instead of lap-counted WAIT_TIME=60 ; seconds on the grid before the green light IS_OPEN=2
Two things to remember:
TIMEis always minutes. Practice and qualifying are always time-based.- In
[RACE], useLAPSorTIME, not both. SetLAPS=20, TIME=0for a 20-lap race, orLAPS=0, TIME=30for a 30-minute timed race. IS_OPEN=2lets latecomers join up to ~20 seconds before the start. Leagues often set1or0on the race so nobody parachutes into a formation.
Dynamic track and weather
[DYNAMIC_TRACK] SESSION_START=95 ; track grip % at the start of the first session RANDOMNESS=2 ; random grip variation LAP_GAIN=30 ; laps needed to rubber-in the track to 100% SESSION_TRANSFER=80 ; % of built-up grip carried to the next session [WEATHER_0] ; add [WEATHER_1], [WEATHER_2]... and the server randomises between them GRAPHICS=3_clear ; weather graphics preset (or a Sol/CSP preset name) BASE_TEMPERATURE_AMBIENT=18 VARIATION_AMBIENT=2 BASE_TEMPERATURE_ROAD=6 ; road temp is an OFFSET added to ambient, not an absolute VARIATION_ROAD=1 WIND_BASE_SPEED_MIN=3 WIND_BASE_SPEED_MAX=15 WIND_BASE_DIRECTION=30 WIND_VARIATION_DIRECTION=15
BASE_TEMPERATURE_ROAD is added on top of ambient — so ambient 18 with a road offset of 6 gives roughly a 24°C track. Define multiple [WEATHER_n] blocks and the server picks between them each session.
Booking vs pickup mode
PICKUP_MODE_ENABLED decides the whole join model:
- Pickup mode (
=1) — the modern default. Drivers connect any time, pick an available car, and spawn. Public servers use this. - Booking mode (
=0) — requires a[BOOK]session where drivers reserve a slot before the weekend starts. Kunos's own help text literally says "do not use it" — it's clunky and largely deprecated.
For a league you almost never want true booking mode. The modern recipe is pickup mode on plus LOCKED_ENTRY_LIST=1, which restricts joining to Steam GUIDs already listed in entry_list.ini. That gives you a fixed, known grid without the booking-session hassle. The full league setup — locked entry list, GUID-pinned drivers, ballast and restrictors — is its own guide: running an Assetto Corsa league race weekend.
Frequently Asked Questions
Where is the PENALTIES setting in server_cfg.ini?
There isn't one. PENALTIES=1 is a Content Manager interface toggle, not a real Kunos config key. The genuine controls are RACE_GAS_PENALTY_DISABLED (the cut penalty), ALLOWED_TYRES_OUT (cut tolerance), START_RULE (jump-start), and MAX_CONTACTS_PER_KM (contact kicks). For proper track-limit and collision penalties you need a plugin like KissMyRank or Real Penalty.
Why can't I get more than about 24 players?
MAX_CLIENTS is capped by the number of pit boxes on the track, and most Kunos tracks have 24. Set it higher and the extra cars simply never spawn. This is an engine limit of the racing server — if you want large populations you want a freeroam server, which runs different software and isn't pit-box bound.
What's the difference between LAPS and TIME in the race section?
LAPS sets a lap-counted race; TIME (in minutes) sets a timed race. Use one or the other in [RACE] — set the one you want and leave the other at 0. Practice and qualifying are always timed.
Do assists like ABS_ALLOWED just turn ABS on or off?
No — they're three-state. 0 bans the assist, 1 allows it only on cars that had it from the factory, and 2 allows it for everyone. This catches a lot of people out: ABS_ALLOWED=1 is not "ABS on for all".
Want the racing server without hand-editing any of this? Our Assetto Corsa racing servers give you a dashboard editor for assists, fuel, damage and tyre wear, an entry-list editor with per-car ballast and restrictor, and KissMyRank built in for penalties — so you can run a clean grid without living in a text editor.



