Two of the first resources every QBCore server owner touches are qb-multicharacter and qb-spawn. Together they handle everything players see the moment they connect: picking a character, creating a new one, choosing where to appear in Los Santos, and — once they own a place — spawning at their apartment. This guide walks through installing both, wiring them together, and tuning the settings that matter most, from character-slot limits to custom spawn locations.
If you do not have a QBCore server running yet, start with the FiveM server documentation for the full installation walkthrough, or take a look at how to host a FiveM server on Linux before continuing here.
What Each Resource Does
qb-multicharacter presents the character-selection lobby when a player first connects. It lets players create up to five characters (configurable), preview their ped model in a dedicated interior, delete characters, and hand off to the rest of the framework once a character is chosen.
qb-spawn shows the spawn-point selector after a character is loaded. Players pick from a list of named public locations — Legion Square, the Police Department, Paleto Bay, a motel — or, if they own an apartment through qb-apartments, that apartment appears in the list automatically via a callback to qb-apartments. The resource reads owned housing from the database and injects those entries into the menu at runtime, so no manual config is needed when a player buys a new apartment.
Prerequisites
- A working QBCore installation (qb-core ensured and running)
- oxmysql installed and ensured before qb-core in server.cfg — qb-multicharacter uses oxmysql as its database interface
- MySQL or MariaDB database accessible from the server
- qb-apartments, qb-clothing, and qb-weathersync present in your resources folder (all ship with the QBCore base install)
Installation Steps
Place both resources inside resources/[qb]/ so the folder layout looks like resources/[qb]/qb-multicharacter/ and resources/[qb]/qb-spawn/. Then open your server.cfg and add the ensures in the correct order:
# Database wrapper — must come first
ensure oxmysql
# Framework core
ensure qb-core
# Character and spawn system
ensure qb-multicharacter
ensure qb-spawn
# Dependencies called during character creation
ensure qb-apartments
ensure qb-clothing
ensure qb-weathersync
Order matters. qb-multicharacter triggers qb-spawn after a character is selected; qb-spawn calls back into qb-apartments to check for owned housing. Loading them out of order produces nil-reference errors in the console and a blank spawn menu for players.
Note that qb-multicharacter does not ship its own SQL file — it relies on the tables already created by qb-core’s main qbcore.sql, which you import when first setting up the framework. If character selection throws database errors, the usual cause is that qbcore.sql was never imported, not a missing multicharacter-specific table.
Configuring qb-multicharacter
All settings live in resources/[qb]/qb-multicharacter/config.lua. The table below shows the most commonly adjusted options and their defaults as shipped:
| Config key | Default | What it controls |
|---|---|---|
Config.DefaultNumberOfCharacters | 5 | Character slots available to every player |
Config.PlayersNumberOfCharacters | {} (empty table) | Per-license slot overrides for VIPs or staff |
Config.EnableDeleteButton | true | Shows or hides the delete button on the selection screen |
Config.SkipSelection | false | When true, bypasses the menu and spawns at last location |
Config.DefaultSpawn | vector3(-1035.71, -2731.87, 12.86) | Fallback coordinates if no spawn is available |
Config.StartingApartment | true | Automatically assigns a starter apartment to new characters |
To raise the slot limit for all players, change Config.DefaultNumberOfCharacters:
Config.DefaultNumberOfCharacters = 3 -- lower for a tighter RP server
To grant a specific player more slots without raising the global cap, add their Rockstar license to the override table:
Config.PlayersNumberOfCharacters = {
["license:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"] = 10,
}
Replace the placeholder with the player’s actual Rockstar license string, visible in the server console when they connect.
Configuring qb-spawn
Spawn locations are defined in resources/[qb]/qb-spawn/config.lua inside the QB.Spawns table. Each entry follows this structure:
QB.Spawns = {
["legion"] = {
coords = vector4(195.17, -933.77, 29.7, 144.5),
location = "legion",
label = "Legion Square"
},
["paleto"] = {
coords = vector4(80.35, 6424.12, 31.67, 45.5),
location = "paleto",
label = "Paleto Bay"
},
-- add your own entries below
["myhospital"] = {
coords = vector4(301.76, -583.76, 43.28, 165.0),
location = "myhospital",
label = "Sandy Shores Hospital"
},
}
The four default public locations are Legion Square, the Police Department, Paleto Bay, and a motel. To remove a location players should not use as a spawn point (for example, restricting the police department to duty spawns managed by a separate job script), delete or comment out that entry. To find coordinates for a new location, use a coordinate-display resource in-game and copy the vector4 output directly into this file — the fourth value is the heading in degrees.
When a player owns an apartment through qb-apartments, that location is added to the spawn list automatically — the resources read the player’s owned housing from the database at spawn time and inject it into the menu. No extra config is needed in qb-spawn for this to work.
If you want players to skip the spawn menu entirely and land at their last saved position, set Config.SkipSelection = true in qb-multicharacter’s config.lua. Note that on a character’s very first login — before any position has been saved — the resource falls back to Config.DefaultSpawn, so make sure those coordinates are somewhere accessible. The default fallback puts players near the airport on the south coast; change it to Legion Square or any other central point if you prefer a tighter first-spawn experience.
For deeper control over your server’s admin side, the QBCore admin commands guide covers the built-in permission system that also gates who can bypass or reset character data.
Starter Apartments and the Config.StartingApartment Toggle
By default, Config.StartingApartment = true in qb-multicharacter’s config means every brand-new character is automatically assigned a starter apartment via qb-apartments. This is the classic QBCore onboarding experience: new player creates a character, gets handed an apartment key, and spawns there on first login.
If your server uses a different housing script or you want characters to start homeless, set this to false. When you do, make sure Config.DefaultSpawn points somewhere logical, because new characters will have no apartment entry in the qb-spawn menu and will land directly at the fallback coordinates.
On a managed FiveM game server with panel access, you can restart individual resources after config changes with restart qb-multicharacter in the server console — no full server reboot needed for config.lua edits.
Troubleshooting Common Issues
- Blank character-selection screen on connect — almost always an ensure order problem or a missing oxmysql connection. Check the server console for database errors on startup.
- Spawn menu shows no locations — confirm qb-apartments is ensured before qb-spawn fires. If apartments fail to load their callback, the spawn menu receives an empty response and renders nothing.
- New character spawns at the ocean / off the map — the
Config.DefaultSpawnin qb-multicharacter is still set to the default coordinates which sit on a beach near the airport. Update this to a landmark coordinate such as Legion Square. - SQL import errors on restart — the qb-multicharacter.sql file uses
CREATE TABLE IF NOT EXISTSguards; errors suggest a schema mismatch from a partial import. Drop the affected tables and re-import on a test server before running on production.
If resources silently fail to load, the FiveM resource loading errors guide has a systematic checklist for diagnosing fxmanifest.lua and dependency issues.
FAQ
How do I increase the number of character slots above 5?
Open resources/[qb]/qb-multicharacter/config.lua and raise Config.DefaultNumberOfCharacters to the number you want. This applies to all players. For per-player overrides, add entries to the Config.PlayersNumberOfCharacters table keyed by the player’s Rockstar license string. Restart the resource after saving the file.
Can I add my own custom spawn locations to qb-spawn?
Yes. Open resources/[qb]/qb-spawn/config.lua and add a new entry to the QB.Spawns table using the structure shown above — a unique string key, a vector4 for coordinates and heading, a location string matching the key, and a label string players will see in the menu. Use a coordinate display resource in-game to get precise values, then restart qb-spawn.
Do I need to run qb-apartments for the spawn system to work?
qb-apartments is a recommended dependency but not strictly required for basic spawning. If you remove it, set Config.StartingApartment = false in qb-multicharacter and ensure Config.DefaultSpawn points somewhere usable. The apartment option simply will not appear in the spawn menu for players who would otherwise own one. If you run a different housing resource, check whether it exposes a compatible callback that qb-spawn can query; some third-party housing scripts include a qb-spawn compatibility shim.
Ready to play?
Run your own FiveM server with XGamingServer
Spin up an always-on FiveM server your friends can join in minutes — no port-forwarding, no tech headaches.







