FiveM Multicharacter Setup Guide 2026 — Multiple Characters on One Account
Letting players run multiple characters on a single FiveM account is one of the most impactful features you can add to a roleplay server.

Letting players run multiple characters on a single FiveM account is one of the most impactful features you can add to a roleplay server. A solid fivem multicharacter system means players can switch between a cop, a criminal, and a civilian without needing alt accounts — and each character keeps its own inventory, money, job, and housing.
This guide covers everything you need: what multicharacter actually does under the hood, a comparison of the five best scripts available in 2026, step-by-step installation for QBCore, ESX, and QBox, a migration path from single-character to multi, UI customization options, and troubleshooting for the issues that trip up most server owners.
What Does a Multicharacter System Do?

Without multicharacter, every FiveM player license maps to exactly one character. If a player wants to roleplay as a different person, they need a second Rockstar account.
A multicharacter script changes this by adding a character selection layer between connecting to the server and spawning into the world. When a player joins, they see a selection screen showing all their characters. They pick one (or create a new one), and the server loads that character's data — job, gang, inventory, bank balance, apartment, vehicles, and appearance.
Each character is stored as a separate row in your database. The script handles the mapping between the player's license identifier and their multiple character records. This is why multicharacter scripts need tight integration with your framework — they hook into the core identity system.
Why Every Serious RP Server Needs It
- Roleplay depth. Players can have a cop character and a criminal character without meta-gaming conflicts.
- Player retention. When someone gets bored with their main, they start a new character instead of leaving the server.
- Economy balance. Characters are financially independent, so a rich player can't funnel money to a fresh start.
- VIP monetization. Extra character slots are one of the most popular and least pay-to-win perks you can sell.
Top 5 Multicharacter Scripts Compared
Here is a breakdown of the best fivem multicharacter scripts available right now, ranked by framework integration, customization options, and overall reliability.
| Script | Framework | Resmon (idle) | Price | UI Quality |
|---|---|---|---|---|
| qb-multicharacter | QBCore | 0.01ms | Free | Good |
| esx_multicharacter | ESX | 0.01ms | Free | Dated |
| renewed-multicharacter | QBCore, ESX | 0.02ms | Free | Excellent |
| Starter Multicharacter (premium) | QBCore, ESX, QBox | 0.02ms | $15–25 | Excellent |
| QBox native | QBox | 0.00ms | Free | Modern |
1. qb-multicharacter (QBCore Official)
The default multicharacter solution bundled with QBCore. It provides a clean apartment-style character preview, character creation and deletion, and slot management out of the box.
Strengths: Zero-config for QBCore servers. Maintained by the core team, so it stays compatible with framework updates. Supports configurable slot limits and integrates directly with qb-spawn for location selection after picking a character.
Limitations: UI customization requires editing the NUI files directly. No built-in support for VIP slot tiers without modification.
Framework: QBCore | Resmon: 0.01ms idle | Price: Free (open source)
2. esx_multicharacter (ESX Official)
The ESX equivalent, maintained by the ESX community. Players select characters from a list UI with basic character info displayed (name, job, bank balance).
Strengths: Lightweight and stable. Works with ESX Legacy and older ESX versions. Simple database structure that is easy to understand and extend.
Limitations: The default UI feels dated compared to QBCore's version. Character preview relies on the last saved position rather than a custom scene. Requires esx_identity for character creation.
Framework: ESX | Resmon: 0.01ms idle | Price: Free (open source)
3. renewed-multicharacter
A community-maintained fork that works with both QBCore and ESX. It features a modern React-based UI, 3D character previews with customizable camera angles, and smooth transitions.
Strengths: Best-looking UI of any free option. Framework-agnostic design means you can switch frameworks without replacing your multicharacter system. Active community with regular updates.
Limitations: Slightly higher resource usage due to the React UI layer. Initial setup requires more configuration than the official scripts.
Framework: QBCore, ESX | Resmon: 0.02ms idle | Price: Free (open source)
4. Starter Multicharacter (Premium)
A premium multicharacter script with a fully customizable selection screen featuring animated backgrounds, weather effects, and character spotlights.
Strengths: Drag-and-drop UI customization through a config file. Built-in VIP slot system with permission-based tier support. Includes character transfer functionality between slots.
Limitations: Paid script, so you depend on the creator for updates. Some features require additional dependencies.
Framework: QBCore, ESX, QBox | Resmon: 0.02ms idle | Price: $15–25
5. QBox Multicharacter (QBox Native)
The multicharacter implementation built into the QBox framework. QBox is a performance-focused fork of QBCore, and its multicharacter system reflects that philosophy — minimal overhead, clean code, and tight framework integration.
Strengths: Best performance of any option. Native QBox integration means zero compatibility issues. Uses ox_lib for UI, giving it a modern look with minimal resource cost.
Limitations: QBox-only. If you are running QBCore or ESX, this is not an option.
Framework: QBox | Resmon: 0.00ms idle | Price: Free (open source)
Need help deciding which framework to use in the first place? Check out our complete framework comparison for a deep dive into ESX vs QBCore vs QBox.
Framework-Specific Deep Dive: QBCore
QBCore ships with qb-multicharacter as a first-party resource. It is opinionated by design — the assumption is that you are running the full QBCore stack with qb-spawn, qb-apartments, and either illenium-appearance or qb-clothing. That tight coupling is a feature: the happy path requires almost no configuration.
Installing qb-multicharacter
Prerequisites: A working QBCore server, MySQL or MariaDB, and qb-core, qb-spawn, and qb-apartments already installed and working. If you are starting from scratch, see our FiveM server setup guide before continuing.
Step 1 — Download. Clone qb-multicharacter from the official QBCore GitHub organization into your resources/[qb]/ folder. Do not rename the folder — other QBCore resources reference it by name.
Step 2 — Import the SQL. Run the included SQL file against your database. This creates and modifies the players table to support the multicharacter identifier format.
Step 3 — Set the ensure order in server.cfg.
ensure qb-core
ensure qb-multicharacter
ensure qb-spawn
ensure qb-apartments
Order matters. qb-multicharacter must start after qb-core (it registers exports) and before qb-spawn (which receives the character-selected event).
Step 4 — Configure slot limits. Open config.lua:
Config.PlayersNumberOfCharacters = 5 -- default slots per player
Config.Locale = "en" -- UI language
Config.AutoSpawn = false -- let qb-spawn handle location pick
Config.DefaultSpawn = vector4(
-1042.519, -2745.654, 21.361, 0.0
)
Step 5 — Test. Restart the server, connect, and walk through the full flow: create a character, enter the world, disconnect, reconnect, and verify your character appears in the list with the correct name and appearance.
QBCore VIP Slot Tiers via ACE Permissions
The slot limit in qb-multicharacter is a single global number. To offer VIP players extra slots, you hook into QBCore's permission system in the playerConnecting handler:
-- In qb-multicharacter/server/main.lua (add after Config load)
local function GetPlayerSlotLimit(source)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return Config.PlayersNumberOfCharacters end
-- Check ACE permission for VIP tier
if IsPlayerAceAllowed(tostring(source), "multichar.vip_plus") then
return 10
elseif IsPlayerAceAllowed(tostring(source), "multichar.vip") then
return 7
end
return Config.PlayersNumberOfCharacters
end
Grant the ACE in your permissions or via txAdmin's role system. This approach does not require modifying the character creation UI — the slot check runs server-side before the creation event is allowed through.
Framework-Specific Deep Dive: ESX
ESX Legacy does not bundle a multicharacter system — it is an add-on. The official esx_multicharacter resource is the standard choice, but it has more moving parts than the QBCore equivalent. Three resources must work together: esx_multicharacter, esx_identity, and esx_skin (or your skin/appearance replacement).
Installing esx_multicharacter
Prerequisites: ESX Legacy (not ES_Extended 1.x), MySQL, and esx_identity and esx_skin already installed.
Step 1 — Download. Get esx_multicharacter from the ESX-Framework GitHub organization. Place it in resources/[esx]/.
Step 2 — Run the SQL migration. The included SQL modifies the users table to support multiple character records per identifier. It adds a char_id column and updates the primary key:
-- Run this against your ESX database (backup first)
ALTER TABLE users
ADD COLUMN char_id INT NOT NULL DEFAULT 1,
DROP PRIMARY KEY,
ADD PRIMARY KEY (identifier, char_id);
If your users table already has data, existing rows will default to char_id = 1, which is correct — every existing player becomes character slot 1.
Step 3 — Update esx_identity. esx_identity must be a version that passes character slot data during creation. Versions before 2024 assume one character per license. Pull the latest release.
Step 4 — Configure server.cfg.
ensure es_extended
ensure esx_multicharacter
ensure esx_identity
ensure esx_skin
ensure spawnmanager
esx_multicharacter must start before esx_identity so the character creation event is ready when the identity registration fires.
Step 5 — Configure the resource. In esx_multicharacter/config.lua:
Config.Characters = 5 -- max characters per player
Config.Spawn = {
x = 215.0,
y = -810.0,
z = 30.0,
h = 0.0
}
Config.EnableDeleteButton = true -- allow players to delete characters
Config.EnableTransfer = false -- cross-server transfers (requires extra setup)
The Config.Spawn coordinates define where characters stand during the selection scene — not where players spawn after selecting. Players spawn at their last saved location or a default point set by spawnmanager.
Framework-Specific Deep Dive: QBox
QBox ships with multicharacter built in. You do not install a separate resource — it is part of qbx_core. The tradeoff is that customization requires editing core files rather than a standalone config.
The QBox multicharacter system uses ox_lib for its UI, which gives it the cleanest look of any free option. Resource cost is effectively zero because the multicharacter logic runs at connect time and idles when not in use.
To enable: QBox multicharacter is on by default. Configure the slot limit in qbx_core/config/server.lua:
return {
maxCharacters = 5, -- slots per player
startingAccountMoney = { -- per-character starting balance
bank = 50000,
cash = 0,
},
-- spawn configuration
defaultSpawn = vec4(
-1042.519, -2745.654, 21.361, 0.0
),
}
QBox uses ox_lib dialog boxes for character creation, so there is no separate identity resource dependency. The appearance system is handled by ox_appearance, which QBox recommends over legacy ESX skin scripts.
If you are evaluating QBox as a framework choice, see our scripts complete guide for a breakdown of which resources work best with QBox.
Migrating from Single-Character to Multi
The hardest part of adding multicharacter to an existing server is not the resource installation — it is the database migration. Your existing users table (ESX) or players table (QBCore) has one row per player with no concept of character slots. The migration needs to:
- Add a
char_idcolumn without destroying existing player data. - Set all existing rows to
char_id = 1so they become character slot 1. - Update the primary key to allow multiple rows per identifier.
QBCore Migration SQL
-- QBCore: add char_id to players table
-- Run against production with a backup first
ALTER TABLE players
ADD COLUMN char_id INT NOT NULL DEFAULT 1
AFTER identifier;
-- Ensure existing players are assigned to slot 1
UPDATE players
SET char_id = 1
WHERE char_id = 0 OR char_id IS NULL;
-- Update PK to composite key (identifier + char_id)
ALTER TABLE players
DROP PRIMARY KEY,
ADD PRIMARY KEY (identifier, char_id);
-- Verify no duplicate (identifier, char_id=1) rows exist
SELECT identifier, COUNT(*) as cnt
FROM players
WHERE char_id = 1
GROUP BY identifier
HAVING cnt > 1;
-- Should return 0 rows. If any exist, manually deduplicate before proceeding.
ESX Migration SQL
-- ESX Legacy: migrate users table to support multicharacter
-- Run with backup in place
ALTER TABLE users
ADD COLUMN char_id INT NOT NULL DEFAULT 1
AFTER identifier;
UPDATE users
SET char_id = 1
WHERE char_id = 0;
ALTER TABLE users
DROP PRIMARY KEY,
ADD PRIMARY KEY (identifier, char_id);
-- Also update any foreign-key tables that reference users by identifier
-- Common examples: user_accounts, user_inventory, user_jobs
ALTER TABLE user_accounts
ADD COLUMN char_id INT NOT NULL DEFAULT 1;
UPDATE user_accounts SET char_id = 1;
ALTER TABLE user_inventory
ADD COLUMN char_id INT NOT NULL DEFAULT 1;
UPDATE user_inventory SET char_id = 1;
Run these in a staging environment first and verify the row counts match before and after. A 500-player server with 3 months of data typically completes in under 10 seconds on reasonably specified hardware.
After the migration, install the multicharacter resource and configure it before restarting the live server. Players will connect and see their existing data as character slot 1, with empty slots 2–5 available to fill.
UI Customization: Theming the Character Select Screen
The default character selection screens are functional but generic. Most servers invest at least a few hours into branding the UI to match their server identity.
Camera and Scene Location
The most impactful visual change is repositioning where characters stand during selection. All three major scripts support custom camera coordinates:
-- qb-multicharacter: in config.lua
Config.Cameras = {
[1] = { -- slot 1 camera
camCoord = vector4(
302.48, -591.42, 43.28, 160.0
),
camTarget = vector3(302.33, -589.57, 42.69),
},
-- Add entries for each character slot
}
Popular scene locations include the Maze Bank rooftop, a custom YMAP interior, the Vinewood Hills helipad, or a black void with three-point lighting. A black void with a spotlight creates a cinematic feel and avoids map-specific geometry issues.
Color and Font Theming
Scripts with NUI-based UIs (renewed-multicharacter, most premium scripts) expose their color scheme through CSS variables or a config JSON. Locate the html/ or web/ folder in the resource and look for a config.json or variables.css file:
/* Example for renewed-multicharacter -- web/src/styles/variables.css */
:root {
--primary-color: #c59a2f; /* server accent */
--background-blur: rgba(0, 0, 0, 0.65);
--card-border: 1px solid rgba(197, 154, 47, 0.3);
--font-family: "Inter", sans-serif;
}
After editing, rebuild the UI bundle if the script uses a build step (npm run build inside the web/ directory). Then restart the resource.
Common Aesthetic Problems and Fixes
Characters appear in default clothing (naked or in work clothes) during selection. This means the multicharacter script is not loading the saved appearance before previewing the character. Verify that your appearance script (illenium-appearance, qb-clothing, esx_skin) exposes a loadSkin or loadAppearance export, and that the multicharacter script calls it during the preview phase. Check the resource documentation for a compatibility list.
Camera jitter on character selection. Usually caused by a camera interpolation conflict between the multicharacter script and the loading screen. Add a small delay before the camera transition starts — 500ms is usually sufficient. If you are using a custom loading screen, check whether it calls ShutdownLoadingScreen() before the multicharacter NUI is fully ready.
UI text or buttons are cut off on ultra-wide monitors. Most multicharacter UIs are designed for 16:9. Set a max-width constraint on the selection container in CSS (max-width: 1920px; margin: 0 auto;) to prevent layout stretching on ultra-wide displays.
Slot badges (VIP, Premium) do not appear on character cards. Slot badge rendering is triggered by a server export or event that checks permissions. If badges are missing, the export call is failing silently — add a print() in the server-side slot check function and restart the resource to confirm whether the function runs at all.
Integration with Other Systems
Spawn Selectors
Your multicharacter script handles character selection. A spawn selector like qb-spawn handles where that character appears in the world — their last location, their apartment, or a default spawn point. These two systems must communicate. In QBCore, qb-multicharacter triggers qb-spawn automatically. In ESX, configure the spawn event chain in the resource config.
Clothing and Appearance
After a character is selected, the appearance script loads their saved look. The standard flow is: multicharacter selects character → framework loads character data → appearance script applies saved skin and clothing. If you are using illenium-appearance (recommended for QBCore in 2026), make sure it is the latest version, as older releases have compatibility issues with current multicharacter event signatures.
Identity and Registration
Character creation within the multicharacter UI triggers the identity script. This is where players set their name, date of birth, gender, and nationality. If character creation fails silently, verify that the identity resource is running and that it listens on the correct NUI callback or server event that the multicharacter script sends.
Troubleshooting
The six issues below account for most multicharacter support tickets across QBCore and ESX servers. Answers are in the FAQ section at the bottom of this page — the short version of each fix is here for quick reference.
Characters not saving → database migration did not run cleanly, or DB user lacks write permissions. Check the MySQL error log.
Can't create new character slot → identity resource not running or listening on the wrong event. Restart both resources and check for event name mismatches in F8.
Stuck on character select → ensure order in server.cfg is wrong. Spawn selector must start after the multicharacter resource.
UI not appearing → NUI bundle missing or not built. Re-download the resource. If the script has a build step, run it.
DB duplicate key errors → identifier format changed between restarts (mixing Steam and FiveM license). Standardize on one identifier type in your server config.
Slot limit ignored → config change took effect in file but not in memory. Restart the resource (not just refresh) after any config edit.
Choosing the Right Script and Going Further
If you are running QBCore, start with qb-multicharacter. It works out of the box and the QBCore community has documented every edge case. Upgrade to renewed-multicharacter or a premium option only if you need a custom UI.
If you are running ESX, esx_multicharacter is the safe choice. Pair it with a modern UI theme if the default look does not match your server's style.
If you are running QBox, use the native multicharacter — it is the lightest option and integrates perfectly with the rest of the QBox stack.
No matter which script you choose, test thoroughly before going live. Create characters, switch between them, verify data persistence, and confirm that clothing, vehicles, and inventory carry over correctly.
For more resources to build out your roleplay server, our best FiveM scripts guide covers top picks across every category. If you are looking for premium multicharacter solutions with active support, browse the VertexMods scripts collection — all resources are reviewed for framework compatibility before listing.
Building your server's identity system from scratch? The FiveM frameworks guide walks through how ESX, QBCore, and QBox each handle player data at the architecture level — useful context for understanding why multicharacter integration differs so much between frameworks.
Frequently Asked Questions
What is multicharacter in FiveM?
Multicharacter lets players create and switch between multiple characters on one FiveM account. Each character has separate inventory, money, jobs, and properties.
How many characters can players have?
Most multicharacter scripts default to 5 character slots, but this is configurable. Some servers offer more slots as a VIP perk.
Does multicharacter work with QBCore?
Yes, QBCore has built-in multicharacter support via qb-multicharacter. ESX servers can use esx_multicharacter or similar scripts.
Can I customize the character selection screen?
Yes, most multicharacter scripts support custom backgrounds, camera angles, UI themes, and character preview locations. Premium scripts offer more customization.
Why aren't my characters saving between sessions?
Character data not persisting is almost always a database permissions issue. Verify the SQL migration ran without errors and that your DB user has INSERT and UPDATE privileges on the character tables. Also check that your framework's identifier (license, steam, discord) stays consistent between restarts — mixing identifier types causes orphaned character rows.
Why can't I create a new character slot even though I'm under the limit?
If the slot limit check passes but character creation still fails, the identity script is usually the culprit. Make sure esx_identity (ESX) or the QBCore built-in identity system is running and listening on the correct events. A missing or incompatible identity resource causes silent failures during character creation.
Why is my server stuck on the character selection screen?
Infinite loading on the character select screen is a resource start-order problem. The spawn selector (qb-spawn or spawnmanager) must start after the multicharacter script. Check your server.cfg ensure order and verify there are no errors in the F8 console when the event chain fires from character selection to world spawn.
Why isn't the character select UI appearing at all?
A blank or missing UI is a NUI rendering failure, not a Lua failure — which is why you see no obvious script errors. Open the F8 console and look for NUI error messages referencing the multicharacter resource. The most common cause is a missing or incorrectly bundled web/dist folder; re-download the resource or run the build step if the script requires it.

