Free forever · v0.113.0 out now

Your whole race weekend, one browser tab.

ACE Manager runs Assetto Corsa EVO servers the way a community actually needs them run: a whole fleet from one dashboard, championships and time attacks that schedule themselves, live timing your drivers can watch and a network that links your community to everyone else's.

⬇ Download v0.113.0 for Windows & Linux See it live → No account. No licence key. No paid tier.
The network, right now connecting to the hub…
Communities
of them online
Race servers
On the calendar
1 tab
Whole fleet
0
Inbound ports to the network
1,254
Automated checks
15
Themes, all readable
€0
Forever
What's new

Recent releases

Every release ships with the tests that prove it and every fix in this list came from somebody running a real community and telling us what broke. The full list, back to v0.100, is at the bottom of this page.

v0.113.0

🔒 Nine findings from a security review, all closed

The status file was still handing out the live account-to-server map that live timing stopped serving in v0.95.0 — every connected driver’s SteamID, to anybody, even for a server the operator had hidden. Three routes had no ownership check, so any signed-in account could read another server’s raw log. And eight wrong passwords locked out every account on the machine, because the lockout counted the proxy rather than the visitor.

v0.112.0

🛡️ A guard that read the name and never asked where it pointed

The link-preview check refused every spelling of a literal address, correctly — and said nothing about an ordinary domain name with a private address behind it. Names are resolved now and every answer is checked, on every redirect hop.

v0.110.0

📋 “Nobody can join” after a championship round

A server that had run a round kept that round’s entry list on the next start, so the following race admitted exactly the previous field and locked out everyone else, without saying so anywhere.

v0.109.0

👥 One driver, two rows

The Live Timing board showed the same driver twice — same car, same lap, one row reading Pit and one Left. The filter that removes the duplicate read the account key back off the rows it had just emitted and that key is deliberately withheld from anyone who has not proved an identity. So for every anonymous visitor it matched nothing.

v0.108.0

🖥️ The startup banner stopped printing your password’s length

One asterisk per character — a 104-character password drew 104 asterisks, in the exact block operators paste into a support thread. The block was also being cut in half by the results scan starting between two of its lines.

v0.105.0

🧱 A Ports & firewall page that writes the commands

Type a port; get the block for PowerShell, ufw, firewalld, nftables and iptables, with the undo for the Windows one. A server’s local HTTP port is refused by name, with the reason — opening it publishes that server’s control interface.

Features

Everything a race organiser actually does

Built for the person who has to make the race happen — not for a feature list.

🖥 Race control

  • Any number of servers, started, stopped and watched from one page
  • Full session setup: practice, qualifying, warm-up, race — weather, grip and time of day
  • Scheduled races that start themselves, with sign-ups and a ready check
  • Reverse-grid series that build the next race from the last result
  • Car mods with SHA checking, so a driver knows what to install before they join

📊 Community

  • A public statistics page with driver profiles, records and lap history
  • ELO and Safety Rating computed from the result files themselves, with an audit that shows every contact behind them
  • Live timing with sectors, gaps and every driver's best
  • Chat, voice, shared channels and direct messages — including across communities
  • Friends and presence: follow a driver and see which server they are on if they allow it
  • 15 themes and a page that stays readable in all of them

🏆 Events

  • Championships with points rules, classes, teams and drop scores
  • Time attacks that open and close on a schedule you set
  • Automatic race nights: a track and length vote opens on a schedule, the winner is applied and the next race chains on
  • 1v1 duels, settled automatically
  • Race Story — what happened in the session, told in a few sentences from the lap times
  • Standings, results and exports, all derived from the raw results

🛠 Operations

  • Discord notifications for every event, each with its own channel if you want
  • Scheduled backups, before every update and once a day
  • One-click updates that check what they downloaded before installing it
  • GDPR tools: a driver can export or erase their own data, network-wide
  • A network preview that shows exactly what would be published, before anything is
  • Roles and per-server ownership, so a server admin only sees their server
Racing network

Your community and everyone else's

Every Manager can join the Portal Hub: a shared layer where communities publish what they are running, drivers carry one identity between them and a series can be hosted round by round across different organisers.

  • 📅One calendar for the whole network Races, championship rounds and time attacks from every community, merged into one timeline — so a driver finds a race instead of hunting for one.
  • 🪪One driver identity ACE Passport carries a driver's record between communities. They arrive somewhere new with their rating, not as a stranger.
  • 🪞Look before you join A preview built while you are still disconnected: your records measured against the network’s, where your drivers would rank and the exact payload that would leave your machine.
  • 👥Friends, messages and presence Follow the drivers you race with, message them between communities and — if they turn it on — see which server they are on right now.
  • Network records and growth A fastest-lap board per circuit across every community, a growth chart and the country each community races from.
  • 🌐Cross-community series A championship whose rounds are hosted by different communities, with standings the hub keeps.
  • 💬Shared channels Chat that spans communities, for the people organising across them.
  • 🔐Nothing opens a port Your Manager pushes to the hub; the hub never connects back. Joining the network needs no inbound rule, no port forward and no fixed address.
Next up on the network
Loading the network calendar…
Where the network is

Hub — Stockholm connecting to the hub…

Get started

Running in about five minutes

No database to install, no container to build, no account to make. Settings and results are plain JSON files you can read, copy and back up yourself.

1

Unpack

Download the zip, unpack it next to your Assetto Corsa EVO server and run start.bat on Windows or ./start.sh on Linux.

2

Configure

Open the panel in your browser, sign in with the password it printed on first start and point it at your server executable. Everything after that is in the panel.

3

Race

Set up a session, hit start and send your drivers the public page. Join the network from the portal tab whenever you feel like it — it is optional and reversible.

Node.js 18+ An Assetto Corsa EVO dedicated server Windows, or Linux with Wine/Proton A browser No database
🔐 Check you got the real thing

The download is mirrored in more than one place. This is the SHA-256 of the package we built, straight from the manifest the in-app updater reads. If yours does not match, do not run it.

Windows
Linux / macOS
Companion tools

Free browser tools, no install

Small things that came out of running races. They work on their own, whether or not you use ACE Manager.

Changelog

Every release since v0.100

Each line is a thing that was wrong for somebody, or a thing they asked for. Where a release needs the Portal Hub updated too, it says so — an older hub means a feature is absent, not broken.

v0.113.0
🔒 The rest of the security review
Nine findings, none of them a way in — all of them ways to learn something you should not, once you can already reach a Manager. status/server_N_status.json was still serving the live account-to-server map v0.95.0 removed from live timing: every connected driver’s SteamID and both parties to every incident, anonymously, CORS-open and 200 even for a server the operator had hidden. Nothing ever rendered the field. Three routes had no ownership check — a “user” role and an operator scoped to another server could both read server 1’s raw log, SteamIDs and other operators’ admin commands included. The login lockout counted by the proxy’s address, so eight wrong passwords locked out every account on the machine, anonymously — and the address rule behind it read the wrong end of X-Forwarded-For, which made every per-address limit bypassable under an invented name. The voice peerId was chosen by the client and broadcast to everyone, so it could be claimed on somebody else’s connection and their whole call taken over; the server issues it now. Plus TLS paths, the moderator list and an absolute server path taken out of public responses and rate limits on six signed-in writes — including image upload, at 2 MB a call. Update the Portal Hub too (v0.18.0).
v0.112.0
🛡️ An anonymous SSRF and a lap time that could be markup
The link-preview guard checked the hostname string — every spelling of a literal address refused, correctly — and never asked what an ordinary name resolved to. 127.0.0.1.nip.io is a public string with a private address and anyone can point a domain at cloud metadata or at a host inside your network; the page title came back to the caller and reachable-versus-unreachable is a working port scanner. Names are resolved now and every answer is checked, on every redirect hop. Separately, the lap time on a network duel arrives from another community and was rendered raw because a field called “time” reads like a number — the driver’s name one line above it was always escaped. Twenty characters is enough for a working payload. Fixed at both ends, because either alone is one edit from being the only one. Update the Portal Hub too (v0.17.0).
v0.111.0
💬 Sharing a server in chat gave away more than the server
The “share this server” card was built from whatever the sender’s browser sent, so a hidden server could be advertised network-wide and the card could carry fields nobody meant to publish. The Manager builds the card itself now, from its own settings, refuses it for a server the operator has hidden and budgets how often one community can post one.
v0.110.0
📋 A championship entry list stopped following the next race
A server that had run a championship round kept that round’s entry list on the next start, so the following race let in exactly the previous field — and locked out everyone else, silently. Reported as “nobody can join”. The inherited list is dropped when it is one the Manager wrote and the new session does not want it.
v0.109.0
👥 One driver, two rows and a console filling with one line
The Live Timing board showed the same driver twice — same car, same lap, one row reading Pit and one Left. The dedupe that removes the duplicate read the account key back off the rows it had just emitted and v0.95.0 correctly stops sending that key to anyone who has not proved an identity — so for every anonymous visitor the filter matched nothing and every connected driver came back a second time as a ghost. A value that legitimately disappears for some callers cannot also be the thing that makes the output correct. Refused chat sockets are now throttled per address and carry the count of what was suppressed, instead of filling the console.
v0.108.0
🖥️ The startup banner is one block and it no longer prints your password’s length
The results-folder scan was started between two banner lines, so on a real install the block was cut in half and its last three lines appeared under a scan report. The password was masked with one asterisk per character — a 104-character password drew 104 asterisks in the exact block operators paste into a support thread. Ten servers printed ten near-identical status URLs. And start.bat announced “http://localhost:443” while the Manager served https on that port.
v0.107.0
🔠 The driver profile reads at the size you chose
Two size bugs. The page never set a body size, so its body copy rendered three pixels larger than the same text on the statistics page. And the reader’s own A− / A+ scale is stored for the whole site but only the statistics page ever read it back — somebody who had chosen 120% got 100% the moment they clicked a name on a leaderboard. Plus the same fixed footer, with the spacer that keeps the last card reachable.
v0.106.1
🧱 Ports & firewall keeps the sidebar
The new page was added just outside the main column, so opening it drew the card across the whole window with the admin menu and the rest of the layout gone. ⚠️ Nothing would have caught it: the nav button existed, the loader ran, the content was right and the three lists the tab test compares all agreed. A page can be entirely correct and still be in the wrong place in the document. There is now a check that every page sits inside the main column.
v0.106.0
🎨 The driver profile wears your community’s brand, not ours
It shipped with a top bar of its own: plain “ACE Manager”, no logo, no site title, half a footer. A community that had uploaded a logo and renamed the site saw its own branding on the statistics page and somebody else’s product name one click later. Both pages now load one shared file — logo, title, favicon, footer text, font scale and the Steam sign-in button, which the profile did not have at all.
v0.105.0
🧱 A Ports & firewall page that writes the commands for you
Type a port; get the exact block for PowerShell, ufw, firewalld, nftables and plain iptables, with the undo for the Windows one. Written after a race night died twice: the EVO backend probes a server from the internet about two minutes after it registers, gets nothing and orders a shutdown — and the log then ends in a crash dump, so everything visible points at a broken server when the cause is one missing rule. ⚠️ A server’s local HTTP port is refused by name, with the reason: opening it publishes that server’s control interface.
v0.104.0
⚔️🌐 Duels across the networkHub v0.15.0
A duel can now be against somebody in another community, on another Manager. Laps are gathered where each driver actually drives and pushed to the hub, which settles the result and keeps the ladder — with an Elo floor and a swap only when the winner was below the loser. ⚠️ A Manager may only speak for drivers it has actually seen and a lap is refused if it is dated before the duel was accepted or after it ended.
v0.103.0
🔒 Your privacy settings, on your own driver profile
The card that says what is shared and with whom now sits on the profile page itself, where somebody looking at their own results is standing — instead of only in a settings page they have to know exists.
v0.102.2
💬 The two missing webhook fields and what Stream Live actually switches
Race Night Vote Opens and Race Night Result had no per-event webhook box, so they could not have their own channel — missing since v0.100.0 and invisible, because the save loop writes an empty string when an input is not there. There is now a check that every notification the panel offers has a field.
v0.102.1
⚔️ The two reasons v0.102.0 still did not show that lap
A server running a Time Attack writes into its own subfolder and the lap reader does not recurse — so the lap that started the whole thread still did not count. The car filter was the second reason.
v0.102.0
⚔️ A duel no longer needs a server of its own
A duel read exactly one folder, filled only by a server an operator had stopped, reconfigured and restarted for that duel — and the endpoint that fills it has never had a button anywhere in the panel. A duel window is a week; nobody has a spare server for a week. So every duel ever opened showed “— no lap —” for its whole life while both drivers were setting laps on exactly the track and car it named. Laps now count from wherever you drive.
v0.101.0
🌍 Your time zone, set once, used by every schedule you type
Manager → Launcher Config → Your time zone. Leave it empty and nothing changes: the Manager keeps using the clock of the machine it runs on. Set it and “at 21:00” means 21:00 there. Every place in the Manager that interprets a clock time was audited before this was built and the release says plainly which ones it governs.
v0.100.0
🕐 Whose clock is “at 21:00” and 🗳️ a Discord notice when the vote opens
The screenshot that came with the question already showed a race night that would not happen: at 21.00, Thu and, one line below, next run: Friday 7.00. Neither number was wrong — they are different clocks and that Manager runs ten hours behind its operator. The card now names the zone, converts it and warns when the day you ticked is not the day it lands on where you are. Plus two new Discord notifications for a race night vote opening and its result.
The test suite grew from 1,092 to 1,316 checks on the Manager over these releases, plus 243 on the Portal Hub. Every fix ships with the revert that had to turn a named test red first — a test that cannot fail is decoration.

Free and meant to stay that way.

ACE Manager is built by SimRacers.online — a worldwide group of simracer friends who wanted better races. There is no paid tier, no licence key and nothing held back.