Use case · Game server

ACC dedicated server: Assetto Corsa Competizione on a Windows machine

An ACC dedicated server is accServer.exe, a Windows-only Steam tool (app 1430110) that reads its whole setup from JSON files in a cfg folder and needs one TCP and one UDP port, both 9201 by default, reachable from the internet. Kunos's Server Admin Handbook advises against hosting it on a home PC. This page installs it on a rented Windows Server, sets the ports, the passwords and the race weekend, and covers updates without losing the config.

See the game servers

What accServer.exe is

Steam lists the server as a tool, Assetto Corsa Competizione Dedicated Server, app 1430110, with the game (app 805550) as its parent. The only operating system on the record is Windows, the launch entry is server\accServer.exe, and the server depot is about 3.7 MB. The public build is dated 3 May 2024, as read on 31 October 2026.

Kunos documents it in the ACC Server Admin Handbook. The copy this page follows is version 1.1.2, written for the 2019 version of the game and hosted by the community; the server has been updated since, so read every key and rule here as that version states it, and let the files your build writes and its log be the authority. It describes the files, the ports, the admin commands and the result files. It gives no CPU or RAM figures and no Linux procedure. This is not the server of the original game: that one is acServer with ini files, covered on our Assetto Corsa dedicated server page.

Sizing the machine

The handbook names two limits instead of hardware figures. maxConnections in configuration.json caps connections of every kind; on hardware you control it says you can set any high number. maxCarSlots in settings.json caps cars, and the server lowers it to the track's pit count, or to 30 on a public server. Spectators count against maxConnections but not against the 30-car limit, and they take no pit slot.

Its warning about home hosting is about the network: forwarded ports expose a private system, and residential upload bandwidth is often the bottleneck. Kunos's handbook gives no CPU figure, so watch the process in Task Manager during a full race before adding a second server. Several servers on one machine each need a separate copy of the server folder, their own tcpPort and udpPort, and firewall rules for those ports; the handbook's centralEntryListPath lets them share one entry list, written with forward slashes.

  • The game server line lists only processors rated 2,000 or more on PassMark's single-thread test, the bar the Satisfactory dedicated server documentation sets.
  • Windows Server up to 2025 installs from the order page on the widest lines; its licence is charged per core every month and takes no prepay discount. ARM lines do not run Windows.
  • Every port is unmetered, on our own network, AS19624, in five cities. The data center page has a test IP per city for your drivers to ping.
  • Rack servers and blades carry an out-of-band console (HPE iLO, Dell iDRAC or a Supermicro BMC), and so do the m510 and m710x cartridges; other cartridges have power control only.
  • A ready server is live in about 30 minutes, counted from payment approval. Hourly billing, handy for a single race weekend, applies only to a ready unit ordered as it stands; ask on chat whether a Windows licence can go on an hourly order. A build to order is monthly and takes 4 to 24 hours.

Installing with SteamCMD

Run this in an elevated PowerShell. It installs SteamCMD from Valve's download, sets the install directory first and logs in second, the order Valve's SteamCMD page recommends, and fetches app 1430110 into C:\ACC. If a configured cfg folder already exists, it is copied to a dated folder under C:\ACC-backups first and checked, and copied back after the download, because validate can reset files the tool ships. Stop the server first and the same block is the update step. It stops at the first error; pasting it again is how you recover from a half-finished run.

& {
  $ErrorActionPreference = 'Stop'
  $login = 'anonymous'      # or your Steam account name, see below
  $acc = 'C:\ACC'
  $cfg = "$acc\server\cfg"
  $keep = $null
  if (Test-Path "$cfg\configuration.json") {
    $keep = "C:\ACC-backups\cfg-$(Get-Date -Format 'yyyy-MM-dd-HHmmss')"
    New-Item -ItemType Directory -Force -Path $keep | Out-Null
    Copy-Item -Recurse "$cfg\*" $keep
    if (-not (Test-Path "$keep\settings.json")) { throw "STOP - copy in $keep is incomplete" }
    "cfg saved to $keep"
  }
  [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
  if (-not (Test-Path C:\steamcmd\steamcmd.exe)) {
    New-Item -ItemType Directory -Force -Path C:\steamcmd | Out-Null
    Invoke-WebRequest -UseBasicParsing https://client-update.steamstatic.com/installer/steamcmd.zip -OutFile C:\steamcmd\steamcmd.zip
    Expand-Archive -Force C:\steamcmd\steamcmd.zip -DestinationPath C:\steamcmd
  }
  C:\steamcmd\steamcmd.exe +force_install_dir $acc +login $login +app_update 1430110 validate +quit
  if ($LASTEXITCODE -ne 0) { throw "STOP - SteamCMD exit code $LASTEXITCODE. On a first run this is often just SteamCMD updating itself: paste the block again once; if it stops again, read the lines above." }
  if (-not (Test-Path "$acc\server\accServer.exe")) { throw 'STOP - accServer.exe not found' }
  if ($keep) { Copy-Item -Recurse -Force "$keep\*" $cfg; "cfg restored from $keep" }
  'install ok'
}

Steam's record lists the game (app 805550) as this tool's parent but does not say whether it downloads anonymously, so you may need a Steam account that owns Assetto Corsa Competizione. If the anonymous login is refused, set $login to that account's name and paste the block again; SteamCMD prompts for the password and, on a first login, a Steam Guard code, so keep updates out of unattended scripts. The handbook's own route also works: copy the server folder from your own ACC installation.

The files in cfg

The handbook states that the server is configured only through a few small JSON files encoded as UTF-16 LE. Delete them and start the server once, and it writes fresh files with current defaults. Lowering the configVersion in a file makes the server add properties that a newer build knows about.

FileWhat it holdsNotes from the handbook
configuration.jsontcpPort, udpPort, maxConnections, lanDiscovery, registerToLobbyPorts must be unique on the machine and open to the internet
settings.jsonServer name, passwords, rating requirements, car slots, result dumpsSpectator password must differ from the join password
event.jsonTrack, weather, session listAt least one session that is not a race
eventRules.jsonPit windows, stint times, mandatory stops, refuellingIgnored by public servers
entrylist.jsonDrivers by Steam ID, race numbers, admin flagYou create it; entries bypass rating requirements

Newer builds may write files that version 1.1.2 does not describe; read what yours creates. Edit the generated files in Notepad and check that Save As still shows UTF-16 LE before you save; Notepad on Windows Server 2019 and earlier calls that encoding Unicode. When the server detects an implausible configuration, the handbook says it writes a reasonably precise error to its log folder and exits at once, so read the newest log whenever it closes on start.

Ports, passwords and the weekend

Clients connect over tcpPort and then stream car positions over udpPort, which also answers the ping test. The handbook's sign that UDP is blocked is a server that never shows a ping value in the list. The defaults are 9201 for both; keep them unless a second server shares the machine. These are the settings.json keys to change in the generated file, with example values:

{
  "serverName": "Thursday GT3 League",
  "adminPassword": "a-long-admin-secret",
  "password": "league-entry-secret",
  "spectatorPassword": "a-different-spectator-secret",
  "maxCarSlots": 30,
  "dumpLeaderboards": 1,
  "isRaceLocked": 1
}

adminPassword is what you type after /admin in chat; it sits in the file in plain text, so treat the cfg folder and its backups as secret. dumpLeaderboards set to 1 writes each finished session to the results folder, which you must create. In event.json, track takes a key such as spa, and a wrong key makes the log print the valid ones; preRaceWaitingTimeSeconds cannot go below 30, and Kunos suggests a sessionOverTimeSeconds of about 107% of the expected lap time, since the 2-minute default does not cover Spa or Silverstone.

Firewall and first start

A rented machine has no home router in front of it, so the Windows firewall is the only rule set to change. The block adds an inbound rule for each protocol only when it is missing, so it is safe to paste twice, and it creates the results folder.

& {
  $ErrorActionPreference = 'Stop'
  foreach ($proto in 'TCP', 'UDP') {
    $name = "ACC server $proto 9201"
    if (-not (Get-NetFirewallRule -DisplayName $name -ErrorAction SilentlyContinue)) {
      New-NetFirewallRule -DisplayName $name -Direction Inbound -Protocol $proto -LocalPort 9201 -Action Allow | Out-Null
    }
  }
  New-Item -ItemType Directory -Force -Path C:\ACC\server\results | Out-Null
  Get-NetFirewallRule -DisplayName 'ACC server *' | Format-Table DisplayName, Enabled, Direction
}

Start C:\ACC\server\accServer.exe from Remote Desktop. When you leave, disconnect the session rather than signing out, so the console window keeps running. Nothing starts the server again after a reboot in this setup, Windows update reboots included; plan them around race nights.

Public or private multiplayer

SettingPublic multiplayerPrivate multiplayer
How it is declaredNo password, registerToLobby 1A password set, or registerToLobby 0
Found throughQuickjoin and the server listThe server list with its password; with registerToLobby 0, only LAN discovery, when lanDiscovery is 1
Car slotsCapped at 30maxCarSlots, up to the track's pit count
eventRules.jsonIgnored, defaults applyApplied
forceEntryListNot allowedRejects drivers missing from the entry list

Leagues usually want the private column. An entry list also works on a public server, for example to hold a slot for yourself: entries bypass the rating requirements and can join a full server while pit slots remain.

Running a race

Type /admin and the admin password in chat, as a driver or as a spectator, to gain admin rights. An entry with isServerAdmin set to 1 does that automatically on join; the entry's playerID is the Steam64 ID with an S in front.

  • /next skips the session and /restart restarts it; the handbook says not to restart during the preparation phase.
  • /kick with a race number removes a driver until the weekend restarts; /ban holds until the server restarts.
  • /tp5, /tp15, /dt and /dq hand out penalties; /clear removes pending ones.
  • /manual entrylist writes an entry list from the drivers connected now, a quick start for a league grid.
  • /debug bandwidth and /debug qos print network data to the server console; type them again to stop.

Result files are named by date, time and session type, for example 190806_193009_R.json, and hold the leaderboard, every lap and every penalty. Copy the results folder and the dated cfg copies off the machine yourself; they are the record of a season. For other racing servers on the same machines, see the Wreckfest dedicated server and the BeamMP multiplayer server.

Questions

Can the ACC server run on Linux?

Not as Kunos ships it. Steam lists app 1430110 for Windows only, and the handbook describes Windows paths alone. Running it any other way is outside what the developer documents, so plan on Windows Server.

Which ports does it use?

One TCP port and one UDP port, both 9201 by default, set as tcpPort and udpPort in configuration.json. Both must be unique on the machine and allowed in by the firewall. A server that never shows a ping value usually has its UDP port blocked.

How many drivers can one server hold?

A public server is capped at 30 cars. A private one takes maxCarSlots, lowered to the track's pit count, while maxConnections caps cars and spectators together. Kunos gives no hardware figure per driver, so test a full grid on your own machine.

Why does accServer.exe close as soon as it starts?

The handbook says the server closes at once when it detects an implausible configuration, and the newest file in the log folder carries the error. Check that file first, then the JSON syntax, the UTF-16 LE encoding and the track key.

How do I make the server private for a league?

Set a password in settings.json and leave registerToLobby at 1, so drivers still find it in the server list. A password declares the server private, which lifts the public restrictions and makes the server read eventRules.json. Setting registerToLobby to 0 is the other private mode; the handbook pitches it at LAN sessions, where only LAN discovery finds the server. Add forceEntryList 1 to turn away anyone not on your entry list.

What is the update procedure?

Stop it, then paste the install block again. It copies the configured cfg folder to a dated backup, has SteamCMD update and validate app 1430110, then copies your files back over whatever validate reset. Check the newest log after the first start on the new build.

Host the grid on your own machine

A whole Windows server, Administrator access and an unmetered port, in five cities.

See the game servers

Related on Server Room

Other use cases