Match this symptom
The server reaches its ready state, but 127.0.0.1 and the host's private LAN address fail after -crossplay is enabled.
The answer first
Do not open more ports or change the world. Iron Gate says a -crossplay PlayFab server cannot be joined through loopback or a local IP. Use its join code, server-list entry or public address/port, and keep Steam-only mode if direct LAN-IP joining is a requirement.

Do not alter the save while diagnosing the join route
A failed local address is expected behavior for the PlayFab backend, not evidence of a damaged world. Leave -world and -savedir unchanged. Before any backend switch, press CTRL+C, wait for complete shutdown, and copy the matched .db/.fwl world pair, permission lists and customized launch script.
Do not click the command-window X. Iron Gate warns that the server can continue running in the background, which can create a second-process or port collision during diagnosis.
- 1Record whether -crossplay is present in the actual running command.
- 2Stop with CTRL+C and confirm valheim_server.exe has exited before editing.
- 3Copy the world pair and launch script outside the install directory.
Confirm that PlayFab actually became ready
Start the server and wait for the official guide's Game server connected message. A visible process is not yet a joinable relay session. Capture the join code and exact browser name without exposing the password.
If several cross-play instances share a MAC address and port, give each a unique -instanceid. That is a documented collision control and is more precise than changing unrelated Windows Firewall rules.
- Backend switch: -crossplay
- Readiness: Game server connected
- Multi-instance collision control: unique -instanceid
Use a relay-compatible joining method
Iron Gate documents three useful cross-play routes: join code, public address/port and server list. It explicitly says local or loopback IP cannot be used. The host can join through the same relay route as another supported client.
Cross-play does not require router forwarding. Adding the Steam-backend UDP pair to a router will not make 127.0.0.1 valid for PlayFab and increases the number of rules the owner has to audit.
- 1Try the current join code first.
- 2Confirm the browser entry with the exact server name and matching version.
- 3Test from a second supported-platform client before calling the relay path verified.
Switch to Steam-only only when that is the intended product
Removing -crossplay selects the Steam backend, which supports Steam clients and direct LAN/IP behavior but requires the base UDP port and base+1 for outside joins. It is not a neutral troubleshooting toggle: it changes which clients can connect.
If you switch, do it after a backup, retain the same world name/save root, wait for readiness and test LAN plus a genuinely external Steam connection. Record the backend in the server profile so future port advice cannot be applied to the wrong mode.
- Steam backend: Steam clients, UDP base and base+1 for outside direct hosting.
- PlayFab backend: supported-platform relay, no router forwarding, no local-IP join.
- Never advertise both behaviors as simultaneous on one process without a current test proving it.
