The console says Server started, players you tell the direct-connect details can join, but the server never shows up in the FiveM list. This is one of the most common new-server problems, and it is almost never random. It is a short list of causes, and they resolve fastest when you check them in order instead of editing server.cfg at random.
A server that boots but will not list is a registration problem, not a crash. Either Cfx cannot validate your license, your config tells it not to list, or the outside world cannot reach your port.
First, split the problem in two
Every cause falls into one of two buckets: config (your server.cfg or license is telling Cfx not to list you) or reachability (Cfx and players cannot reach your server on the network). The single most useful test separates them: from a network that is not your server's LAN, open http://YOUR_PUBLIC_IP:30120/info.json in a browser. JSON back means reachability is fine and you have a config problem. A timeout means you have a network problem. Do this first; it halves the search.
The config checklist (in order)
- License key. Confirm
sv_licenseKeyis present, valid, and generated from the Cfx.re Portal atportal.cfx.refor this server. A revoked, expired, or duplicated key (the same key running on two servers) will boot but not list. Regenerate it if you are unsure. sv_master1must stay commented. This is a legacy master-server line. On a modern FXServer it should be commented out or empty, exactly as the example config ships it. Uncommenting it is a classic cause of a server that runs but never registers.sv_lanmust befalse. Withsv_lan truethe server runs in LAN mode, skips Cfx registration entirely, and will never appear publicly. Set it tofalsefor a public server.- Identity variables set. Make sure
sv_hostname,sv_projectName, andsv_projectDescare set with correctly matched quotes. A stray quote in the hostname can break parsing of the lines after it. - Endpoint privacy. Check
sv_endpointPrivacy. With it on, your endpoint is hidden, which can make a server look missing or private in some clients. Turn it off while you debug.
The reachability checklist
If info.json timed out from an outside network, the listing cannot work until the server is reachable. Walk the path the traffic takes:
- Port 30120, TCP and UDP. FiveM needs both protocols on port 30120 (or whatever
endpoint_add_tcp/endpoint_add_udpspecify) open on the host firewall and, for a home connection, forwarded on your router. UDP is the one people forget, and the list will not work without it. - Host firewall. On a VPS, the cloud provider's security group or firewall is separate from the OS firewall. Open the port in both. On Windows, confirm the inbound rule actually applies to the FXServer process.
- Bind address. Make sure the server is binding to the right interface, not only
127.0.0.1. Theendpoint_add_*lines should use0.0.0.0so it listens on all interfaces. - Re-test
info.json. After each change, re-openhttp://YOUR_PUBLIC_IP:30120/info.jsonfrom outside. You are done with this section when it returns JSON.
If config and network are both clean
Two things remain. First, propagation: listing is not instant, so give a freshly fixed server a few minutes to appear. Second, a resource stalling the heartbeat: a misbehaving resource can hold up the registration the server sends to Cfx. Remove the most recently added resources, restart, and leave the server up for about an hour. If it appears with them removed, reintroduce them one at a time to find the culprit. Finally, rule out your own client: reset filters and clear the FiveM cache, because an over-filtered client list can hide a server that is, in fact, listed.
Most of these causes live in the same file, so a clean config prevents the whole category. Pair this with the server.cfg performance checklist and keep your FXServer artifact current, since an outdated build can introduce its own registration and networking quirks.