RE:NODE

Guides14 min read

Assetto Corsa Server Manager championships

Run an Assetto Corsa league: Server Manager championships, points and classes, locked entry lists, sign-ups, reversed grids, pit windows and results files.

0 readers

Vanilla acServer does not know what a championship is. It runs the sessions you configure, loops them if you ask, and writes one JSON results file per session - standings, points and who is booked into which car are somebody else's problem. That somebody is usually Assetto Corsa Server Manager (ACSM), a free web front end that builds server_cfg.ini and entry_list.ini for each event, launches acServer itself, collects the results and turns them into a points table with classes, teams, sign-ups and penalties. If you would rather not run another program, the same league can be run from the two config files and a spreadsheet, and this guide covers both: the Server Manager way, and the settings underneath it that you need to understand either way.

If you have not set up the base server yet, start with the Assetto Corsa server guide, which goes through server_cfg.ini, sessions, ports and mod content key by key. This post assumes that works and moves on to running the same field of drivers week after week.

What vanilla acServer gives a league, and what it does not#

Everything a league needs from the game itself is already there; it is just not joined up.

  • Results. At the end of every session acServer writes a JSON file into its results folder, named with the date, time and session type - something like 2026_10_7_20_45_RACE.json. It holds every car, every lap, best laps, total times and the contact events the server saw.
  • Fixed slots. entry_list.ini with a GUID per entry and LOCKED_ENTRY_LIST=1 gives each driver their own car, skin and grid slot.
  • Balance tools. BALLAST and RESTRICTOR per entry, with MAX_BALLAST_KG in server_cfg.ini as the ceiling.
  • Race formats. Practice, qualifying and race sessions in sequence, plus a reversed-grid second race and a mandatory pit window, all set in the config.

What it does not have is memory. Nothing carries over from one race night to the next: no points, no success ballast, no record that a driver was penalised last week. Every championship tool, ACSM included, is a layer that reads the results files, keeps state between events and writes new config files before the next one. Knowing that makes troubleshooting much easier, because almost every league problem is one of those three steps going wrong.

Assetto Corsa Server Manager in brief#

ACSM is a single Go binary with a browser interface, originally built by Emperor Servers and published as open source on GitHub. The original repository is now archived and read-only, so you are running finished software rather than something that will change under you. That is mostly a comfort for a game that has not moved in years, but it does mean bugs will not be fixed upstream and forks are where any new work happens.

The pieces you configure live in config.yml next to the binary:

config.yml
steam:  install_path: assetto  executable_path: acServerhttp:  hostname: 0.0.0.0:8772  session_key: generate-a-long-random-string  server_manager_base_URL: https://league.example.comstore:  type: boltdb  path: server_manager.dbaccounts:  admin_password_override:server:  audit_logging: true  performance_mode: false  persist_mid_session_results: false
SettingWhat it does
http.hostnameAddress and port of the web interface. 8772 is the shipped default
http.session_keyEncrypts login sessions. Set your own random value
server_manager_base_URLUsed for links in championship messages and sign-ups
store.typeboltdb keeps everything in one file; json writes one file per event
store.pathWhere that data lives. This is the file to back up
admin_password_overrideEmergency reset of the admin password
audit_loggingRecords which user started, stopped or deleted what
performance_modeTurns live timing off to save CPU

The first login is the user admin with the password servermanager, and you are made to change it immediately. If you lose it later, put a temporary value in admin_password_override, restart, log in with it and set a new one. Create separate accounts for each steward rather than sharing the admin login; the audit log is only useful if names in it mean something.

Where it runs matters. ACSM launches and stops acServer itself, so it wants to be the thing in charge of the process. That fits a machine you control - your own box or a dedicated server - where you open 9600 TCP and UDP, 8081 TCP and the web port. On a game panel the panel is the process manager, so the practical pattern there is the file-based workflow described below: the panel runs acServer, and you replace the two config files between events.

Building a championship: classes, points and events#

A championship in ACSM is a list of classes, a list of entrants and a list of events. Each event is a track, a layout, a session sequence and a start time; when you start an event, ACSM writes the config for that event, launches the server and attaches the results to the championship when the sessions finish.

Classes

A class is a set of cars plus its own points table. Single-make series need one class. A multi-class endurance grid - GT3 and GT4 sharing the track - needs one class per category, each scored separately, which is the only fair way to score a field where the slower class can never win overall.

Points

The default table is the Formula 1 one, and every field is editable per class:

FieldDefaultWhat it awards
Places25, 18, 15, 12, 10, 8, 6, 4, 2, 1Points by finishing position in class
Best lap0Bonus for the fastest lap of the race
Pole position0Bonus for topping qualifying
Collision with driver0Points deducted per car-to-car contact
Collision with environment0Points deducted per wall contact
Cut track0Points deducted per counted cut
Second race multiplier1Scales points for a reversed-grid second race

The collision and cut deductions are tempting and usually a mistake. The server counts every touch, including the one where somebody else punted you, so automatic deductions punish victims as readily as culprits. Leave them at zero and handle incidents with stewarding. A small best-lap bonus is fine; a large one rewards drivers who pit for fresh tyres in the last two laps instead of racing.

Ties are broken by countback - the driver with more wins ranks higher, then more second places, and so on - which is the convention most leagues use anyway. Publish it in your rules so nobody is surprised in the last round.

Events

Add events in calendar order and give each one the full session sequence: practice, qualifying, race, and a second race if you run them. You can copy an event and change only the track, which keeps session lengths and assists consistent across a season. Change one thing at a time between seasons, not between rounds.

Entry lists for a league#

The entry list is where a league either feels organised or does not. You have three ways to fill it.

A fixed list. You add every driver yourself with their SteamID64 as the GUID, their car, skin and team. With a locked entry list, nobody else can take their slot and they always spawn in the same car. This is the most work and the least trouble.

Open entrants. The championship accepts whoever joins and adds them to the entrant list automatically. With the persist option on, the car and skin a driver first joins with become theirs for the season. This suits a public "Thursday night" series with a changing field; it does not suit a league with a waiting list.

A sign-up form. ACSM can publish a registration page where drivers enter their name, Steam GUID, team and preferred car and skin, optionally with custom questions and reCAPTCHA protection configured in the championships section of config.yml. Requests can be accepted automatically or approved by hand. Approved drivers land in the entrant list with their GUID filled in, which removes the most error-prone step - copying seventeen-digit numbers out of Discord messages.

Whichever you use, the rules from the base server still apply underneath:

  • The number of entries, and MAX_CLIENTS, must not exceed the track's pit boxes. A 32-car grid does not fit on a 24-box track, and the failure looks like a broken session rather than a clear error.
  • Every MODEL must be in the event's car list and every SKIN must exist in that car's skins folder on the server, or the server falls back or refuses the entry.
  • Drivers need the same version of every mod car and track. Publish the content list with download links before round one - Assetto Corsa content, Content Manager and mod tracks covers packaging it so people actually install it.

Ballast and restrictor

Two ways to use them. Fixed balance is a per-entry value set for the season - a rookie class or a handicapped veteran. Success ballast changes per round: the championship leader carries 30 kg, second 20 kg, and so on. Vanilla acServer has no idea who is leading, so success ballast means editing the entry list before each round, which ACSM's per-event entrant editing makes quick. Keep MAX_BALLAST_KG above the largest value you will use, or the server clamps it silently.

Restrictor is a percentage power cut and feels different from ballast: ballast hurts braking and cornering, restrictor hurts straights. For balancing different cars, use restrictor; for slowing a driver who is simply faster, ballast is less punishing on tracks with long straights.

Race formats: reversed grids, pit windows and race weekends#

Most league formats are a handful of keys in server_cfg.ini, which ACSM exposes as form fields:

cfg/server_cfg.ini
[SERVER]LOCKED_ENTRY_LIST=1PICKUP_MODE_ENABLED=0MAX_BALLAST_KG=100REVERSED_GRID_RACE_POSITIONS=8RACE_PIT_WINDOW_START=10RACE_PIT_WINDOW_END=20RACE_EXTRA_LAP=0QUALIFY_MAX_WAIT_PERC=120[RACE]NAME=RaceLAPS=25WAIT_TIME=90IS_OPEN=0
KeyWhat it does
REVERSED_GRID_RACE_POSITIONS0 no second race; N runs a second race with the top N reversed; -1 reverses the whole field
RACE_PIT_WINDOW_START / _ENDThe lap (or minute, in a timed race) range in which the mandatory stop must be made
RACE_EXTRA_LAP1 adds a lap after the timer runs out in a timed race
QUALIFY_MAX_WAIT_PERCHow long the server waits for drivers on a lap when qualifying ends, as a percentage of the best lap
IS_OPEN0 closes the race to late joiners; 1 lets them in; 2 lets them in until 20 seconds before the start

The reversed grid is the classic two-race format: a sprint from qualifying order, then a second race with the top eight reversed. Pair it with a Second race multiplier below 1 - 0.5 is common - so the lottery race does not decide the title.

A pit window turns a sprint into a strategy race and is the closest vanilla gets to a mandatory stop. A driver who does not stop inside the window is penalised at the end. Explain it in the pre-race briefing; somebody always forgets.

ACSM also has race weekends: a chain of sessions that can be run at different times - qualifying on Wednesday, races on Thursday - where each session's grid is built from the results of an earlier one, with filters such as reversing or splitting the field. It is the feature to reach for when your grid is bigger than the pit boxes and you need a qualifying split into two races, or when people cannot commit to one long evening.

Running race night#

A routine that keeps the evening calm:

  1. Before the night. Confirm the content list is final, the entry list matches the approved drivers and the event's track layout is right. Start the event an hour early with practice open so problems surface before the grid forms.
  2. Thirty minutes before. Post the server name, password and a reminder of the content versions. Most failed joins are checksum errors from somebody's out-of-date mod.
  3. During qualifying. Watch live timing for drivers who have not set a time. Somebody missing at this point is usually stuck on a join error, not late.
  4. During the race. One steward watches, nobody else touches the controls. Admin chat commands - /admin with the admin password, then /kick, /next_session, /restart_session - are for emergencies, not for adjusting results.
  5. After the race. Let the results file write. Do not stop the server the instant the leader crosses the line: the results are written when the session ends, after RACE_OVER_TIME.

That last point catches organisers constantly. A server stopped mid-session writes nothing for that session. ACSM's experimental persist_mid_session_results option tries to protect against this by forcing a session change before stopping, but the safer habit is to let sessions end on their own.

Results, penalties and appeals#

The results JSON is the source of truth. ACSM imports it into the championship automatically when the event ends, and you can also import a results file manually - which is how you recover a race that was run outside the championship by mistake, or on a different server.

Penalties are applied in the results view as time added or positions dropped, and points are recalculated from that. Set the stewarding process before the season starts:

  • A deadline for protests, such as 24 hours after the race, with a replay timestamp required.
  • A small panel, not one person, and not anyone involved in the incident.
  • A fixed penalty scale - five seconds for a minor avoidable contact, a drive-through equivalent for a serious one - so decisions are consistent rather than personal.

Keep a copy of every raw results file even after penalties are applied. If a decision is overturned, you want the original to recalculate from rather than a chain of edits. Server rules, moderation and staff covers the human side of this in more depth, and game server events and tournaments has the wider playbook for running organised nights.

The file-based alternative

Without ACSM, a league is three folders and a routine. Keep one pair of server_cfg.ini and entry_list.ini per round, named for the round, and copy the right pair into cfg/ before the night. After the race, take the JSON from results, enter the finishing order into a spreadsheet with your points table and countback rule, apply penalties there, and update the next round's entry list with any success ballast. It is more manual and entirely workable for a twelve-car league, and it has one real advantage: every round's config and every result is a plain file you can read in ten years.

This is also how a league runs on a panel-managed server. On RE:NODE you edit both files in the browser editor or upload a round's pair over SFTP, download the results folder from the file manager, and restart the server from the console. A Schedules entry can restart the server into the next session sequence at a fixed time, and backups can be taken on demand right before race night. If you do want ACSM's web interface, that is a job for a machine you run the processes on yourself.

Backups and keeping a season safe#

What is irreplaceable in a league is small, and that is exactly why people forget to copy it:

  • server_manager.db (or the JSON store folder) - every championship, entrant, event and result in ACSM.
  • config.yml, including the session key; losing it logs everybody out but loses no data.
  • The results folder from acServer, which is your fallback if the database is ever damaged.
  • Your content list with exact versions and links.

Back these up after every round, not weekly. A season is one file that changes once a week, which makes it the easiest thing in the world to protect and the most painful to rebuild from memory. Backups that actually restore explains why one test restore before the season starts is worth more than any number of untested copies.

Troubleshooting#

The event started but the championship shows no results. The session was stopped before it ended, so no results file was written. Check the results folder; if a file exists, import it manually.

A driver is in the championship twice. They joined once with a different Steam account, or open entrants added them before you did. Merge by keeping one GUID and deleting the duplicate before the next round, because points do not follow a name.

Drivers are kicked as soon as they join. Locked entry list with a GUID that does not match, a skin that does not exist, or a checksum error. The server log names which.

The grid is shorter than the entry list. MAX_CLIENTS or the track's pit boxes are lower than your entrant count. Use a race weekend with split qualifying.

The second race never starts. REVERSED_GRID_RACE_POSITIONS is 0, or the race has no laps left to run after RACE_OVER_TIME. Check the value in the generated server_cfg.ini, not in the form.

The web interface is unreachable. The web port is not open, or hostname is bound to localhost. Game server ports explained covers testing one port at a time; reading the console is about finding the line in the log that says which address it bound to.

FAQ#

Is Assetto Corsa Server Manager still maintained?

The original open-source repository is archived and read-only. The software still works, because Assetto Corsa's server has not changed in years, but fixes and new features only appear in community forks.

Can I run a championship without Server Manager?

Yes. Keep a pair of config files per round, read the JSON results files after each race and score them in a spreadsheet. It is slower per round and much simpler to host, which suits small leagues on a panel-managed server.

How do I stop strangers taking league slots?

Put each driver's SteamID64 in the GUID field of their entry and set LOCKED_ENTRY_LIST=1. Add a join password as well, so the server does not fill with people who are then kicked.

What is the second race multiplier for?

It scales points for a reversed-grid second race. A value of 0.5 gives half points, which keeps the reversed race meaningful without letting a lucky result outweigh a full feature race.

Should I deduct points automatically for collisions?

Usually not. The server counts every contact regardless of fault, so automatic deductions punish the driver who was hit as well as the one who hit them. Stewarding with replays is fairer.

Where are race results stored?

In the results folder of the server, one JSON file per session. Server Manager imports them into its own database, but the raw files are worth keeping as a backup and an audit trail.


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.

0/2000