QBCore v1 to v2 Migration Guide
This guide will help you migrate your QBCore server from version 1.x to version 2.x. This is a major version upgrade with significant changes and improvements.
Pre-Migration Checklist
Before starting the migration, ensure you have:
- Complete server backup (files, database, configurations)
- List of all custom resources and their versions
- Database backup with verified restore capability
- Test server environment for migration testing
- Scheduled maintenance window for production migration
- Rollback plan documented and tested
Major Changes in v2
Framework Architecture Changes
⚠️ Breaking Changes
QBCore v2 introduces several breaking changes. Custom resources will likely need updates.
1. Player Object Restructure
Before (v1):
local Player = QBCore.Functions.GetPlayer(source)
local playerData = Player.PlayerData
local job = playerData.job.name
local money = playerData.money['cash']
After (v2):
local Player = QBCore.Functions.GetPlayer(source)
local citizenId = Player.PlayerData.citizenid
local job = Player.PlayerData.job.name
local money = Player.Functions.GetMoney('cash')
2. Event System Updates
Before (v1):
-- Old event names
TriggerEvent('QBCore:Server:PlayerLoaded', source)
TriggerClientEvent('QBCore:Client:OnPlayerLoaded', source)
After (v2):
-- New event names with better organization
TriggerEvent('QBCore:Server:OnPlayerLoaded', source)
TriggerClientEvent('QBCore:Client:OnPlayerLoaded', source)
3. Database Schema Changes
New required columns in players
table:
phone_number
VARCHAR(20)last_updated
TIMESTAMPmetadata
LONGTEXT (JSON format)
Resource Structure Changes
New File Organization
resources/[qb]/
├── qb-core/
│ ├── client/
│ ├── server/
│ ├── shared/
│ └── config/
├── qb-multicharacter/
└── [other resources]/
Step-by-Step Migration Process
Phase 1: Preparation
1. Backup Current Installation
# Create backup directory
mkdir -p /backups/qbcore-v1-backup-$(date +%Y%m%d)
# Backup server files
cp -r /path/to/server /backups/qbcore-v1-backup-$(date +%Y%m%d)/
# Backup database
mysqldump -u username -p database_name > /backups/qbcore-v1-backup-$(date +%Y%m%d)/database.sql
2. Document Current Setup
Create an inventory of:
- All installed resources
- Custom modifications
- Database customizations
- Server configuration
Phase 2: Test Environment Setup
1. Clone Production Environment
# Set up test server
cp -r /production/server /test/server
mysql -u username -p test_database < production_backup.sql
2. Install QBCore v2
# Remove old qb-core
rm -rf resources/[qb]/qb-core
# Clone QBCore v2
git clone -b v2.0 https://github.com/qbcore-framework/qb-core.git resources/[qb]/qb-core
Phase 3: Database Migration
1. Run Database Update Scripts
-- Add new columns to players table
ALTER TABLE `players`
ADD COLUMN `phone_number` VARCHAR(20) DEFAULT NULL,
ADD COLUMN `last_updated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
ADD COLUMN `metadata` LONGTEXT DEFAULT NULL;
-- Update existing data
UPDATE `players` SET `metadata` = '{}' WHERE `metadata` IS NULL;
-- Create new indexes for performance
CREATE INDEX `idx_phone_number` ON `players` (`phone_number`);
CREATE INDEX `idx_last_updated` ON `players` (`last_updated`);
2. Migrate Player Data
-- Convert old money format to new format
UPDATE `players` SET
`money` = JSON_SET(
COALESCE(`money`, '{}'),
'$.cash', COALESCE(JSON_EXTRACT(`money`, '$.cash'), 0),
'$.bank', COALESCE(JSON_EXTRACT(`money`, '$.bank'), 0),
'$.crypto', COALESCE(JSON_EXTRACT(`money`, '$.crypto'), 0)
);
Phase 4: Resource Updates
1. Update Core Resources
Essential resources that need updating:
qb-multicharacter
→ v2.0+qb-spawn
→ v2.0+qb-apartments
→ v2.0+qb-garages
→ v2.0+qb-inventory
→ v2.0+
2. Update Custom Resources
For each custom resource, check for:
Player Data Access:
-- Update calls to player data
-- Old way
local money = Player.PlayerData.money['cash']
-- New way
local money = Player.Functions.GetMoney('cash')
Event Names:
-- Update event registrations
-- Old
RegisterNetEvent('QBCore:PlayerLoaded')
-- New
RegisterNetEvent('QBCore:Client:OnPlayerLoaded')
Phase 5: Configuration Updates
1. Update qb-core/config/config.lua
Key configuration changes:
Config = {
MaxPlayers = 64, -- Updated default
DefaultSpawn = vector4(-1035.71, -2731.87, 12.86, 0.0), -- New spawn system
UpdateInterval = 5, -- New setting for data updates
-- New features
UseDebug = false,
ServerCallbacks = {},
ServerTimezone = 'UTC'
}
2. Update server.cfg
Add new convars:
# QBCore v2 specific settings
set qb_locale "en"
set qb_debug "false"
set qb_update_interval "5000"
# New resource order
ensure qb-core
ensure qb-multicharacter
ensure qb-spawn
Phase 6: Testing
1. Functionality Testing
- Player login/character creation
- Money transactions
- Job system functionality
- Inventory system
- Vehicle spawning/garages
- Housing system
- All custom resources
2. Performance Testing
- Server startup time
- Player count stress test
- Memory usage monitoring
- Database performance
3. Integration Testing
- Resource interdependencies
- Event system flow
- API functionality
- Third-party integrations
Common Migration Issues
Issue 1: Player Data Not Loading
Symptoms: Players lose character data or cannot login
Solution:
-- Check for data format issues
SELECT citizenid, charinfo, money FROM players WHERE JSON_VALID(charinfo) = 0;
-- Fix invalid JSON data
UPDATE players SET charinfo = '{}' WHERE JSON_VALID(charinfo) = 0;
Issue 2: Resource Compatibility Errors
Symptoms: Resources throwing errors about missing functions
Solution:
- Update all QBCore resources to v2 compatible versions
- Check custom resources for deprecated function calls
- Update event names to new format
Issue 3: Database Performance Issues
Symptoms: Slow queries, high database load
Solution:
-- Add missing indexes
CREATE INDEX idx_citizenid ON players (citizenid);
CREATE INDEX idx_license ON players (license);
CREATE INDEX idx_job ON players ((JSON_EXTRACT(job, '$.name')));
Rollback Procedure
If migration fails, follow these steps:
1. Stop Server
# Stop FiveM server
pkill -f FXServer
2. Restore Files
# Restore server files
rm -rf /path/to/server
cp -r /backups/qbcore-v1-backup-*/server /path/to/
3. Restore Database
# Restore database
mysql -u username -p database_name < /backups/qbcore-v1-backup-*/database.sql
4. Restart Server
# Start server with original configuration
./run.sh
Post-Migration Checklist
After successful migration:
- Performance monitoring - Monitor server performance for 24-48 hours
- Player feedback - Collect feedback from players about any issues
- Error logging - Monitor server logs for any unexpected errors
- Backup verification - Ensure new backup system is working
- Documentation update - Update internal documentation
- Resource updates - Plan regular resource update schedule
Additional Resources
✅ Migration Complete
Once you’ve completed all steps and verified functionality, your QBCore v2 migration is complete! Remember to update your documentation and inform your community about any new features.