Migration Checklist
A copy-paste checklist to move an existing community from Legacy to Enhanced without taking your server down. The golden rule: migrate in parallel, never in place. Keep production on Legacy until everything below passes on a separate test instance.
Do not migrate a live production server right now. Asset Escrow isn't implemented, the platform is early access with expected crashes, and many resources aren't ported. This checklist builds a parallel Enhanced test server you validate first.
Phase 0 — Decide & prepare
- [ ] Confirm you actually need Enhanced now (ray tracing / higher tick rate) vs waiting for Asset Escrow.
- [ ] Inventory your resources: which are escrow-protected/paid (stay on Legacy) vs open/unencrypted (convertible).
- [ ] Note any C#/.NET resources (need .NET 10 rebuild) and any custom assets (need Alchemist).
- [ ] Clone your database. Never point the test server at live data.
Phase 1 — Stand up a parallel Enhanced server
- [ ] Download Cfx Server from server-download → Platform: FiveM for GTAV Enhanced. See Set up a Cfx Server.
- [ ] Extract to a new folder on a different port from production.
- [ ] Update any
.bat/ panel scripts tocfx-server.exe(notFXServer.exe). - [ ] Install the .NET 10 SDK if you run C# resources.
- [ ] Complete the txAdmin first-run wizard against the cloned data.
Phase 2 — Fix the guaranteed breakers
- [ ] Add
lua54 'yes'to every resource'sfxmanifest.lua. - [ ] Set gamebuild enforcement after
+exec server.cfgin your startup command:+set sv_enforceGameBuild 1(base game) or the latest build. Remove old pins (2802/3095/3258…). - [ ] Audit
server.cfgconvars — replace or remove the deprecated ones:
set sv_syncTickRate 60 # was sv_useAccurateSends
setr sv_entityLockdown "relaxed" # was sv_protectServerEntities
set onesync on # big mode is the only mode
remove entirely: sv_netHttp2, onesync_automaticResend, onesync_enableBeyond, sv_enhancedHostSupport
- [ ] Rebuild C#/.NET resources against .NET 10.
Phase 3 — Convert assets
- [ ] Run Alchemist (use the CLI so escrowed assets are skipped, not fatal) on a copy of your
resourcesfolder. - [ ] Read the output report — note every escrowed asset that was skipped; those stay on Legacy.
- [ ] Test converted vehicles/props/MLOs in-game; re-check anything converted with
--relaxed.
Phase 4 — Data migration
- [ ] Run the official key-value (KVP) DB migration script for KVS files on the clone.
- [ ] Verify each resource reads/writes the cloned DB correctly.
- [ ] Only after full validation, plan the real data cutover.
Phase 5 — Framework & resources
- [ ] Confirm your framework (ESX / QBCore / QBox) has an Enhanced-compatible build.
- [ ] Start resources one group at a time (deps → framework → standalone), reading the console for
[ERROR]/[WARN]after each. - [ ] Replace or shelve resources that depend on removed features (Mono-only C#, Pure Mode toggles, removed convars, Mumble-only voice).
- [ ] Keep escrow-protected paid resources on your Legacy server for now.
Phase 6 — Voice
- [ ] If you use
pma-voiceor similar, confirm it still works (Mumble natives route through the new system temporarily). - [ ] Plan a migration to the new server-side Voice API (docs) before Mumble natives are removed.
Phase 7 — Validate before players
- [ ] Optionally enable
set sv_devMode truefor dev tooling (caps the server at 8 slots — dev only). - [ ] Load-test with a handful of testers on the Enhanced instance.
- [ ] Only when every resource passes: announce, schedule, and cut over — while keeping the Legacy server available as a fallback.
The one-screen summary
| Step | Action |
|---|---|
| 1 | Clone DB, inventory resources (escrow vs open) |
| 2 | Download Cfx Server, new folder + port, install .NET 10 SDK |
| 3 | lua54 'yes' everywhere · fix sv_enforceGameBuild · clean convars |
| 4 | Alchemist CLI convert open assets; escrowed stay on Legacy |
| 5 | Migrate cloned DB with the KVP script |
| 6 | Start resources in order; fix breakers; test voice |
| 7 | Validate on the test instance → cut over, keep Legacy as fallback |
Hitting errors along the way? Every common one is in Troubleshooting. For HZ-Scripts specifically, ask in our Discord.
