A FiveM server shows in the public list after Cfx.re can query your game port and server.cfg keeps Connect enabled in the browser. Start with http://YOUR_PUBLIC_IP:30120/info.json from a phone or a second network. JSON means the process is reachable. A timeout points at a closed game port or a process bound to loopback. A live sv_master1 "" line marks the room private and greys out Connect.
Quick checklist
| Check | Expected |
|---|---|
Public info.json | JSON from another network at http://YOUR_PUBLIC_IP:PORT/info.json |
| Endpoints | endpoint_add_tcp and endpoint_add_udp on 0.0.0.0:30120 (or your port) |
| Ports | That same port open inbound on TCP and UDP |
| License | sv_licenseKey from portal.cfx.re |
| Listing line | #sv_master1 "" commented, or the line omitted |
| Project fields | sets sv_projectName and sets sv_projectDesc both present |
| Slots | sv_maxclients at 48 or below unless the Cfx account has Element Club Argentum or higher |
| Heartbeat | Up to eight minutes after a cold start |
| Client search | Filters cleared, then search the project name |
Start with the public info.json row. Read the rest after that URL answers.
1. Prove the server answers from outside
Cfx's server issues guide starts with reachability. Open FiveM, press F8, and run:
connect YOUR_PUBLIC_IP:30120Use your real public address and port. A friend on another connection is a cleaner test than 127.0.0.1.
In a browser on that second network, open:
http://YOUR_PUBLIC_IP:30120/info.jsonA JSON blob means FXServer is listening on HTTP. http://YOUR_PUBLIC_IP:30120/dynamic.json returns the live player count. canyouseeme.org can probe the same port. Test from outside the host. A check on the machine that runs FXServer proves the process is up locally.
2. Open the game port both ways
The vanilla example binds TCP and UDP together:
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"0.0.0.0 listens on every interface. A bind of 127.0.0.1 keeps the server on loopback. Home hosts forward that same port on TCP and UDP to the box running FXServer. A VPS still needs inbound allow rules on the hypervisor firewall and on Windows Defender or nftables.
Cfx.re polls listed servers from the addresses in https://static.cfx.re/ips.txt. Strict DDoS filters and allow-lists need every address in that file. New IPs sit in the file for at least a month before traffic starts. Console lines about failing to contact the server browser, repeating for a long stretch, mean the heartbeat path is blocked.
Some NAT gateways rewrite UDP source ports. Cfx documents that rewrite as a listing failure on hosts that already accept Direct Connect. A host with a direct public IPv4 avoids that rewrite.
3. Keep the listing public
Vanilla server.cfg ships the listing line commented:
#sv_master1 ""Leave the # on #sv_master1 "", or delete the line. Official docs say a set sv_master1 value marks the server private and greys out Connect. Heartbeats still post to Cfx's default ingress. The browser row can remain. Connect stays grey.
Local development is the other documented use. Cfx's static IPs page tells localhost owners to set:
sv_master1 ""set sv_lan true is a separate switch. That mode stays on the LAN and skips license-key checks.
sv_endpointPrivacy hides player IP addresses in public reports. The listing row still publishes.
4. Set the project fields Cfx requires
Cfx wants these info-sets present at boot. The server prints an error when they are absent:
sv_hostname "My Roleplay Server"
sets sv_projectName "My FXServer Project"
sets sv_projectDesc "A roleplay community with weekly events"Both project lines start with sets. A set typo drops them from the info blob. Official command docs want a name in sv_projectName, with tags kept out of that string. sv_projectDesc reads as a sentence. Non-compliant project names get cut off in the browser.
sv_hostname is the server-specific host name. Type the project name you set when you search the browser.
Optional display lines from the vanilla file:
sets tags "roleplay, qbcore"
sets locale "en-US"Replace the shipped root-AQ locale placeholder with a real language tag.
5. Put a Portal key in sv_licenseKey
sv_licenseKey "licenseKeyGoesHere"Create the key under Servers → Registration Keys on portal.cfx.re. Official setup docs send every new host there. Paste the value, save server.cfg, and restart FXServer. A bad key shows up in the first console lines as a license error.
6. Give the first heartbeat eight minutes
Cfx's support article and the server-issues page both allow up to eight minutes after launch before another heartbeat arrives. Restarting the process resets that clock. Watch the console for listing-query errors aimed at /info.json or /dynamic.json. Those messages mean Cfx reached you and the HTTP reply failed. Recheck the bound port and any sv_listingIpOverride.
Proxy setups that set sv_forceIndirectListing true need the matching sv_listingHostOverride and sv_endpoints values from Cfx's proxy guide. A leftover override after you dropped the proxy sends Cfx to a stale host.
7. Match slots to OneSync and your Cfx plan
Vanilla ships OneSync on, which the server manual calls required for server-side state awareness:
set onesync on
sv_maxclients 48sv_maxclients at 32 or higher needs onesync set to on or legacy. Counts above 64 need on. Slot counts above 48 need Element Club Argentum or a higher tier on the Cfx account that owns the key. OneSync itself is a sync mode. Listing still depends on the heartbeat and a public info.json.
Resources that fail at boot stretch startup and can leave HTTP dead until the process finishes crashing. The vanilla set starts mapmanager, chat, spawnmanager, sessionmanager, basic-gamemode, hardcap, and rconlog. Read the console for the first resource that exits.
8. Clear client filters last
Direct Connect and a public info.json already prove the process is up. Clear every browser filter first. Search the exact sv_projectName, then try another FiveM client. The public browser holds thousands of rooms. A partial name misses a fresh entry.
FAQ
The server shows as private and Connect is grey.
Comment #sv_master1 "" the way the vanilla file ships it, then restart. That is the cvar Cfx uses for a private browser row.
Direct Connect works while the browser row is missing.
The game endpoint answers. Recheck the sv_master1 comment, the two sets project lines, slot limits, and the eight-minute wait.
I changed the game port.
Use that port in both endpoint_add_* lines, in the firewall, in connect, and in the info.json URL. Cfx queries the port you bound.
Does OneSync hide a server? OneSync selects the sync model. Pair it with the slot count above. Listing still follows the heartbeat path in the sections above.
I still have an old Keymaster bookmark. Open portal.cfx.re and read the Registration Keys list on that Cfx account. New keys are created there. Leftover Keymaster keys on the same account are covered in the Keymaster to Portal guide.
A hosted FiveM server on berrybyte already binds the game port on a public IPv4, which skips home NAT and the inbound firewall work above. You still paste a Portal key and keep #sv_master1 "" commented.
