Skip to Content
ReferenceEnhanced Breaking Changes

Audit the Legacy-to-Enhanced boundary

Moving a server to Enhanced is not an artifact-only update. Use a separate installation, copied configuration and disposable data first. This reference follows the official migration contract at the October 1 source revision . Early-access restrictions below are snapshot facts, not promises about a later release. Check the live migration manual  before a production cutover.

The migration overview provides the rollout checklist. This page records the individual compatibility obligations so that a resource can be tested against them rather than described simply as “Enhanced ready.”

Removed features and compatibility switches

Legacy featureEnhanced behavior at the reviewed revisionMigration action
P2P synchronizationReplaced by client-server synchronization.Remove assumptions about direct peer transport. This does not make arbitrary client messages authoritative.
OneSync non-big modeOnly big-mode scoping remains.Do not build a complete player roster from client scope-entry/exit events.
onesync_automaticResend / ARQRemoved.Remove the obsolete tuning instruction; do not translate it into a new resend value.
Asset EscrowNot implemented in this snapshot.Treat an escrow-protected dependency as a blocker until its actual Enhanced support is confirmed.
sv_netHttp2HTTP/2 support removed.Audit proxy and download assumptions, not just the configuration spelling.
Server ImGui GUIRemoved.Use the supported console and administration paths.
+set moo 31337Removed as the developer-mode switch.Use server-controlled sv_devMode true only in the intended test environment.
sv_useAccurateSendsDeprecated.Review sv_syncTickRate instead of carrying over an old latency preset.
-cl2Deprecated.Follow track-specific two-client testing.
Mumble integrationDeprecated.Revalidate the chosen voice resource against the voice migration reference.
Resource buildersResources cannot act as builders.Compile deployable output before installation; do not assume the old builder hook runs.
onesync_enableBeyondCompatibility variable, no effect.Remove it from explanations of active behavior.
sv_enhancedHostSupportCompatibility variable, no effect.Do not use it as a readiness check.
sv_protectServerEntitiesNot implemented.Review sv_entityLockdown and the documented lockdown modes.

Session IDs can be reused immediately

Legacy normally increments player server IDs and eventually wraps the finite ID range. Enhanced can release an ID on disconnect and assign it to the next connection. Neither behavior makes a numeric session ID a permanent account identity.

An asynchronous operation must retain both its initiating session and a server-maintained generation or equivalent session token. Before returning data or changing privileges, verify that the same session still occupies that ID. Clear session-scoped work on playerDropped. Merely copying source before a wait prevents context loss but does not prevent ID reuse.

Test a disconnect while a database request is pending, then connect another client that receives the same ID. The old completion must not update the replacement client. The JavaScript/C# interoperability lab demonstrates this distinction; it is not a substitute for testing the chosen Enhanced binaries.

State bags and entity ownership

The reviewed Enhanced contract says that state-bag callbacks fire only when the entity exists, and replication must be requested explicitly. Use deliberate state:set(key, value, replicated) calls where transport is required. Do not assume a direct table assignment has identical replication behavior across tracks.

Initialization must tolerate entity streaming, owner changes, duplicate callbacks and resource restarts. A state bag is a notification mechanism, not a transaction, authorization boundary or durable acknowledgement. Check the resulting entity state server-side where the operation matters. See state bags and platform migration.

Enhanced adds lockdown mode full, which also disables client-created dummy map objects. In relaxed mode, population creation depends on world-grid ownership. Test ambient traffic and interactive map objects as well as malicious creation attempts; a stronger restriction can also break legitimate resources. Existing OneSync configuration is described in entity lockdown.

Assets, storage and runtime output

AreaRequired distinction
stream_enhancedIf this directory exists, Enhanced loads it instead of stream; it does not merge both directories. Keep the complete Gen9 set there and the Gen8 set in stream.
Fallback streamUsed when stream_enhanced is absent, but deprecated for Enhanced. A fallback directory is not proof that Legacy binaries are compatible.
KVP databaseThe upstream page requires migration and says a migration script will be provided. It does not provide a runnable conversion command. Preserve original databases; do not invent a converter or overwrite the only copy.
C#Enhanced replaces Mono with .NET and specifies a .NET 10 SDK. Do not ship a Legacy Mono build or an old assembly path as an assumed Enhanced build recipe.
Pure modeAlways enabled in the reviewed Enhanced release; graphical mods are not available during its early-access state. There is no supported “disable pure mode” migration step here.
Server archivesThe names change from server.7z / fx.tar.xz to cfx-server_win_x64 / cfx-server-linux_x64. Check the actual downloaded file and extraction layout.
Windows executableFXServer.exe becomes cfx-server.exe. Update service wrappers, monitoring and start scripts without changing the working data directory accidentally.

The recorded game-build support is the latest build named The Kortz Center Heist in that source snapshot. sv_enforceGameBuild 1 selects the base game without DLCs. Do not translate a Legacy build number into an Enhanced build promise. Read server configuration alongside the current artifact documentation.

Network and developer configuration

endpoint_add_tcp and endpoint_add_udp each accept only a single endpoint in this snapshot. Review multi-bind, proxy and firewall arrangements; removing a duplicate line is not sufficient evidence that both protocols are reachable externally.

VariableRecorded contractAcceptance check
sv_resourceFileDownloadTimeoutMilliseconds; default two minutes, or 120000 ms.Exercise a slow but valid resource download and inspect cancellation rather than assuming a timeout fixes corrupt assets.
sv_syncTickRateDefault 60; range 1–120.Compare sync latency and CPU under representative load. Higher is not automatically better.
sv_devModeServer-side developer-mode control.Enable only on the intended development server; remove from the production configuration unless deliberately required.

Remote Console, formerly DevCon, is disabled by default. Enable it from the client’s F8 Console → Remote Console menu only for the debugging session. Its port is 29200; the old second-client port 29300 is not used. Restrict network exposure and disable it after use.

Remote command output no longer automatically sends the complete server log back to the client. Use PrintRemoteCommandLog(message) for an intentional, sanitized response. Do not return tokens, connection strings or other players’ identifiers. Enhanced also introduces command unregistration: retain the ID returned by RegisterCommand and supply it to UnregisterCommand. This return-value contract must not be assumed for Legacy.

Cutover evidence

For each resource, record the exact server/client artifacts, game edition/build, language runtime, asset formats, dependencies and pass/fail result. Test connection and disconnect reuse, resource restart, entity owner handoff, explicit state replication, voice, NUI, downloads and data restoration. Preserve a tested Legacy rollback with its own unmodified KVP/database snapshot.

The source review documents the migration boundary. It does not mean these tests have been run against your server, that the upstream-promised KVP tool has shipped, or that a protected third-party resource has become compatible. Follow artifact support and backups for the operational handoff.