Skip to main content
  • Instant digital delivery
  • Lifetime updates on selected products
  • Trusted by server owners
FiveMX
Shop
Full ServersBundlesNew releases
FiveMX

Start building your server today.

Curated FiveM resources, instant delivery, free starter mods, and practical guides in one calm marketplace.

Browse the shopsupport@fivemx.com

Shop

  • Shop
  • FiveM Mods
  • All Products
  • Free Mods
  • Best Scripts & Mods
  • FiveM Scripts

Frameworks

  • QBCore Scripts
  • ESX Scripts
  • QBox
  • Standalone

Community

  • Blog
  • Support
  • Creators
  • Affiliate

Legal

  • Privacy Policy
  • Terms of Service
  • Refund Policy
  • Digital Delivery
  • Cookie Policy
  • GDPR Compliance
  • DMCA
  • Imprint
  • Editorial Policy

Server Templates

  • QBCore Server Template
  • ESX Server Template
  • NoPixel Server Template
  • Server Packs
  • Free Server Templates
  • Tebex Alternative
Β© 2026 FiveMX. All rights reserved.Β·FiveMX is not affiliated with Rockstar Games, Take-Two Interactive, or CFX.re. All trademarks are property of their respective owners.
DiscordDocs
  1. Home
  2. Blog
  3. Troubleshooting
Table of Contents
Diagnostic Flow: Methodically Isolating Phone FailuresFramework-Specific Differences: ESX, QBCore, and QBox Phone EcosystemsESX: The Legacy LandscapeQBCore: The qb-phone and npwd EraQBox: ox_lib and Modern Phone IntegrationComplete Symptom-to-Cause Reference Table

FiveM Phone Scripts Troubleshooting FAQ: 12 Common Issues Fixed

Published on March 30, 2026Β·by Lars Miller(Founder & Lead Editor)Β·CredentialsΒ·8 min readΒ·Updated on May 18, 2026
Troubleshootingfivem phone not opening

Phone scripts are the most feature-rich resources on a FiveM server β€” messaging, calls, social media, GPS, and a dozen apps in one bundle. More features mean more failure surface. This guide covers the 12 most common phone failures on ESX, QBCore, and QBox with diagnostic steps and working code.

Share
FiveM Phone Scripts Troubleshooting FAQ: 12 Common Issues Fixed
FiveM Phone Scripts Troubleshooting FAQ: 12 Common Issues Fixed

Phone scripts are arguably the most resource-intensive and compatibility-sensitive resources you will ever install on a FiveM server. Unlike a standalone vehicle or a simple HUD modification, a phone script reaches into nearly every subsystem your server runs: player identity resolution, database connection pooling, NUI rendering inside the Chromium Embedded Framework, VOIP integration for calls, inventory hooks for phone items, banking APIs for the billing app, and social media tables that grow unbounded over time. Each of these touchpoints is a potential break.

The complexity isn't theoretical. A modern phone script like lb-phone or qs-smartphone ships with 15 to 30 individual applications β€” Messages, Calls, Contacts, Camera, Twitter, MarketPlace, DarkChat, YellowPages, Banking, Services, App Store, Settings, Notes, Calculator, Racing, and more. Each app is a self-contained NUI module with its own HTML, CSS, and JavaScript bundle, its own database table or configuration section, and its own client-side event handlers. When you update the phone resource, you are updating all of those modules simultaneously β€” and any one of them can introduce a regression.

Why do phone scripts break so frequently compared to other FiveM resources? Three structural reasons stand out. First, NUI-based applications run in an embedded browser context that behaves differently from native GTA V UI. Browser caching, missing polyfills, CSS isolation problems, and JavaScript execution timing bugs that would be caught in a standard web app stack can slip through in the FiveM NUI environment because the debugging tooling is thinner and the iteration loop is slower. Second, phone scripts depend on shared infrastructure β€” a single database connection pool, a single VOIP resource, a single player identifier mapping β€” that multiple other resources also depend on. A misconfiguration in a banking script can cascade into the phone's billing app. A VOIP update can silently drop call audio without touching the phone script at all. Third, migrations are fragmented. A server that upgrades from gcphone to qb-phone to lb-phone over two years accumulates database tables with mixed column naming conventions (senderIdentifier vs sender_identifier), orphaned app registrations that reference deleted NUI bundles, and player phone_number entries stored in three different formats. The result is a phone that half-works: Twitter loads but Camera crashes, messages send but contacts are empty.

Frequently Asked Questions

Why is my FiveM phone not opening when I press the keybind?

Three common causes: (1) the phone resource isn't ensure-ed in server.cfg or started after the framework, (2) the NUI build step was skipped (modern phones need npm install && npm run build inside the resource folder), or (3) the player doesn't have a phone item in inventory when the script requires one. Check F8 for NUI errors first, then verify the inventory requirement in the phone's config.

Why are contacts missing from my FiveM phone?

Missing contacts mean either the phone_contacts table is empty, or the player's identifier format doesn't match the stored records. Run SELECT COUNT(*) FROM phone_contacts WHERE identifier = ? with your actual identifier β€” if zero rows, contacts never wrote. If non-zero but the phone shows none, your server probably switched identifier formats (Steam hex to license to citizenid) and old records don't match new identifiers.

Why aren't messages sending on my FiveM phone script?

Message send failures are almost always SQL errors in the phone_messages insert. Check the server console for errors when hitting send. Common causes: column mismatch (the script expects sender_identifier but the table has senderIdentifier), missing NOT NULL column, or foreign key violation if the receiver isn't registered. Test by inserting directly via SQL to isolate whether it's the script or the DB.

Why does the camera app crash my FiveM phone?

The camera crashes when the screenshot-basic resource is missing, not started, or missing its upload configuration. Ensure screenshot-basic is running, and check the phone's camera config for the upload method β€” most phones use Imgur, some use custom endpoints. A misconfigured upload URL produces a black screen crash; a missing resource produces an immediate NUI error.

Table of Contents

Diagnostic Flow: Methodically Isolating Phone FailuresFramework-Specific Differences: ESX, QBCore, and QBox Phone EcosystemsESX: The Legacy LandscapeQBCore: The qb-phone and npwd EraQBox: ox_lib and Modern Phone IntegrationComplete Symptom-to-Cause Reference Table

More on This Topic

Move from research to a production-ready server stack

Once you know the direction, jump into the highest-leverage commercial hubs for verified scripts, curated bundles, and framework-specific buying paths.

Framework hub

Move into the QBCore landing page to compare verified scripts, framework fit, and install-ready products built for modern FiveM servers.

Open QBCore hub

Premium catalog

Move from research into the main shop to compare real products, framework labels, screenshots, and production-ready quality signals.

Open premium shop

Launch faster

Bundles shorten the path from planning to launch by grouping the highest-leverage scripts into a cleaner commercial starting point.

View bundles

Disclosure: Some links below are affiliate links to FiveMX products. We may earn a commission at no extra cost to you.

Premium Scripts You Might Like

Free Scripts You Might Like

Related Articles

The best FiveM scripts in 2026 are an Advanced MDT police system, a 911 dispatch and CAD tool, a full banking economy script, a 15+ civilian job pack, a modern smartphone with an…

March 30, 2026

FiveM is a powerful platform, but with power comes complexity. Whether you're a player dealing with crashes and connection issues, or a server owner hunting down performance…

February 24, 2026

We'll help you fix FiveM errors - fast. This guide targets Windows 10/11 players and server owners. Expect clear steps to stop crashes, fix connection...

September 5, 2025

The twelve issues covered in this guide β€” phone not opening, contacts missing, messages failing, camera crashing, social media blank, app store errors, GPS broken, calls dropping, notification sounds missing, dark mode not persisting, custom apps invisible, and billing broken β€” account for over 90% of phone-related support tickets across ESX, QBCore, and QBox servers. Each section includes the diagnostic path, the fix that works in most cases, and the edge case that catches experienced server owners who have already tried the obvious solutions.

Diagnostic Flow: Methodically Isolating Phone Failures

When a player reports "my phone doesn't work," resist the urge to guess. Phone failures are composable β€” a single symptom can have six different root causes. A systematic diagnostic flow cuts resolution time from hours to minutes.

Start at the frontend: open F8 and watch the browser console while the player presses the phone open keybind. If the keybind press produces no console output at all, the phone's NUI entry point never initialized. Check that the phone resource is ensure-d after all its dependencies (framework, database connector, VOIP) in server.cfg. If you see red console errors, read the stack trace β€” Uncaught ReferenceError: $ is not defined means the NUI bundle is missing jQuery or the bundler stripped a dependency; POST https://cfx-nui-.../callback 500 means the server-side callback handler crashed; net::ERR_CONNECTION_REFUSED on a data URL means the NUI iframe is pointing to a dev server that isn't running.

Next, verify the database layer. SSH into your database and run SELECT table_name FROM information_schema.tables WHERE table_name LIKE '%phone%';. You should see tables matching your phone resource's expected schema β€” phone_contacts, phone_messages, phone_twitter_tweets, phone_apps, etc. If zero tables exist, the phone's SQL install file never ran. If tables exist but are empty for a specific player, cross-reference the player's identifier: run SELECT identifier FROM users WHERE license = ? and compare the format (Steam hex, license, citizenid) against what the phone_contacts table contains. Format mismatches are the single most common cause of "phone opens but all my data is gone."

Then test the phone open event directly. Many phone scripts expose a client-side command or export β€” TriggerEvent('phone:client:Open') or /phone open β€” that bypasses the keybind layer entirely. If the phone opens via command but not via keybind, the key mapping is the problem. If the command crashes, check the server console for the Lua runtime error.

Finally, inspect resource dependencies in order. A phone script's fxmanifest.lua declares dependencies, but many servers override these with ensure ordering in server.cfg. Run status in the server console and verify every resource the phone depends on shows as started. Common missing dependencies: screenshot-basic (for Camera), pma-voice or mumble-voip (for Calls), esx_license or qb-core (for identifier resolution), and mysql-async or oxmysql (for database access).

Framework-Specific Differences: ESX, QBCore, and QBox Phone Ecosystems

Every FiveM framework handles phone integration differently. The phone script you choose must match your framework β€” and more importantly, upgrading your framework often breaks the phone in ways that are not documented by either the framework or the phone script maintainers.

ESX: The Legacy Landscape

ESX servers typically run one of three phone resources: gcphone (the original legacy phone, still in use on servers that haven't updated since 2020), esx_phone (the bundled replacement that ships with newer ESX versions), or lb-phone (the commercial premium replacement). Each handles core functions through different mechanisms.

gcphone uses phone_number as a foreign key on the users table and resolves player identity via Steam hexadecimal identifiers. Its NUI is a static HTML page served directly from the resource folder β€” no build step, no bundler, no npm install. This simplicity is both its strength (zero build failures) and its weakness (no tree-shaking, monolithic CSS files that break on dark mode toggles). Migrating from gcphone to any other phone script requires a complete database migration because the table schemas share no common columns beyond the most basic fields.

esx_phone improved on gcphone by standardizing identifier resolution through es_extended's getIdentifier() export, which returns the license identifier regardless of what other resources use. It also introduced app registration β€” a Lua config file where each app declares its NUI entry point, its database table prefix, and its permission level. Adding a custom app to esx_phone means editing this config and placing the HTML in the correct subdirectory.

lb-phone (also known as LB Phone) is the most advanced of the three, shipping with Webpack-bundled NUI applications, a REST API layer for data access, and a React-based UI framework. It uses FiveM license identifiers exclusively and stores all data through its own API endpoints rather than direct database queries. This means lb-phone does not touch your phone_contacts table directly β€” it communicates through its middleware, and debugging requires watching the API route logs rather than the SQL query log.

QBCore: The qb-phone and npwd Era

QBCore (QBX-Core) servers use qb-phone as the default bundled phone or npwd as the community-built alternative. Both are tightly coupled to QBCore's event system and shared object (QBCore.Functions).

qb-phone stores all data through QBCore's exports['qb-core']:GetPlayer(citizenid) pattern. Player identity is the citizenid field, not a license or Steam hex, and all phone tables reference it. The phone checks at open whether Player.PlayerData.metadata['phone'] or hasItem('phone') is truthy, depending on config. qb-phone's NUI uses the Phone-UI-Framework β€” a jQuery-based UI kit that relies on specific CSS selectors and DOM element IDs. Any custom CSS that overrides these selectors silently breaks phone rendering.

npwd (NoPixel-inspired Phone and Watch/Dispatch) takes a fundamentally different approach: it is a standalone resource with zero coupling to QBCore internals. It uses its own database layer via oxmysql, its own identifier resolution (configurable to license, steam, or citizenid at install time), and its own event names. The advantage is framework independence β€” npwd can run on ESX, QBCore, or standalone servers. The disadvantage is that every integration point (banking, billing, inventory) must be manually configured with matching event names, and framework upgrades never break npwd because they never touch it β€” but they can break the bridge scripts that connect npwd to your banking resource.

QBox: ox_lib and Modern Phone Integration

QBox servers use ox_target and ox_lib for phone integration rather than a dedicated phone resource. The ox_lib UI library includes a phone notification interface, a progress bar, and context menu controls that replace much of what traditional phone scripts handle as independent modules. For a full phone experience, QBox users typically install lb-phone or qs-smartphone alongside ox_lib, which creates a double-layer dependency: the phone script talks to ox_lib for UI components, and ox_lib talks to the game engine through its C++ bridge.

The key QBox difference is identifier handling. QBox uses FiveM license identifiers exclusively and rejects Steam hex identifiers β€” if your phone script stores data by Steam hex, none of it will be readable after migrating to QBox. The diagnostic: run SELECT DISTINCT identifier FROM phone_contacts LIMIT 5 and check whether the format is steam:1100001... (will break), license:abcdef... (works), or fivem:12345... (legacy, may work depending on your QBox build version).

Complete Symptom-to-Cause Reference Table

FiveM Phone Scripts Comparison and Features

Before diving into individual issues, match the symptom you see to the most likely root cause.

| Symptom | Most likely cause | First thing to check | |

Why isn't Twitter or social media loading on my FiveM phone?

Social media apps are self-contained with their own database tables. If the feed loads blank: check that phone_twitter or equivalent tables exist and have data, verify the NUI iframe loads without CORS errors (F8 devtools > Network tab), and confirm the player has a registered profile in phone_twitter_accounts. The most common fix is re-running the phone's SQL install file to create any missing app tables.

Why is the phone app store showing errors?

App store errors come from missing or corrupt app metadata in the phone_apps config/table. Each installable app needs a valid name, icon path, version, and enabled flag. Most commonly this is a config drift after a phone update β€” the phone expects new fields (like min_version or category) that the DB migration didn't add. Re-run the phone's migration SQL to align schema with the current version.

Why isn't GPS working on my FiveM phone?

Phone GPS uses SetNewWaypoint(x, y) client-side. If setting a destination does nothing, verify the coordinates being passed are valid numbers (not nil, not NaN), and check for other scripts calling DeleteWaypoint or clearing waypoints on a loop. Some HUD scripts and minimap replacements interfere with waypoints β€” disable them temporarily to isolate.

Why are phone calls dropping or not connecting?

Phone call failures come from a broken integration with your VOIP resource (pma-voice, mumble-voip). Verify the phone's config points to the correct voice resource name, that the voice resource is ensure-ed BEFORE the phone in server.cfg, and that the voice resource's exports match what the phone expects. If calls connect but audio is silent, the voice resource isn't opening a private call channel β€” check for version mismatch.

Why are notification sounds missing from my phone?

Either the sound files aren't in the phone's audio folder, they're not declared in fxmanifest.lua, or the NUI is blocking audio autoplay. Modern Chromium-embedded NUI blocks audio until the user interacts with the page. Most phone scripts handle this with an on-load click, but custom forks often break it. Check F8 devtools for 'play() failed because the user didn't interact with the document' warnings.

Why isn't dark mode working on my FiveM phone?

Dark mode is a pure NUI feature toggled via a CSS class on the root element. If clicking the toggle does nothing, the click handler isn't firing (check F8 devtools), or the CSS class doesn't exist in the stylesheet. If it toggles but doesn't persist, the phone is storing the preference in localStorage which NUI clears between sessions β€” fix by storing preferences server-side in a phone_settings table.

Why aren't custom apps appearing in my phone?

Custom apps need three things: (1) an entry in the phone's app config matching the app folder name exactly, (2) the HTML/JS files present at the path declared in the config, and (3) inclusion in fxmanifest.lua files block so they're served to the NUI. Missing any one makes the app invisible. Grep the phone's resource folder for your app name to verify all three are wired up.

Why is the billing app not working on my phone?

Phone billing apps bridge to a separate billing/invoicing resource (okokBilling, qb-banking, esx_billing). Both resources must be running, and the event names on both sides must match. Check the phone's billing config for the target resource, verify that resource is ensure-ed, and watch the server console as you open the billing app β€” you'll see the trigger event fire (or not).

Previous Article

FiveM Police Script Troubleshooting β€” 12 Common Issues & Fixes

Next Article

FiveM MLO Scripts Troubleshooting FAQ: 12 Common Issues Fixed

FiveM Admin Scripts Troubleshooting FAQ: 12 Common Issues Fixed
FiveM Drug Scripts Troubleshooting FAQ: 12 Common Issues Fixed
FiveM Economy Scripts Troubleshooting FAQ: 12 Common Issues Fixed
FiveM Housing Scripts Troubleshooting FAQ: 12 Common Issues Fixed
FiveM HUD Scripts Troubleshooting FAQ: 12 Common Issues Fixed
Browse QBCore-ready scripts
Browse premium FiveM scripts
Compare curated bundles
FiveM Case Opening Script | Loot Box

FiveM Case Opening Script | Loot Box

$18.99
LB Phone v2

LB Phone v2

$42.00
HSN Phone

HSN Phone

$42.00
GKSPhone (ESX)

GKSPhone (ESX)

$39.00
Gameconfig for Legacy & Enhanced

Gameconfig for Legacy & Enhanced

8,243,364 downloads
PC Trainer V

PC Trainer V

1,272,946 downloads
LemonUI: Open Source UI Library

LemonUI: Open Source UI Library

1,138,096 downloads
NFS gauge - RPM Gear Speedometer & Timer

NFS gauge - RPM Gear Speedometer & Timer

1,058,515 downloads
FiveM Scripts Guide β€” Complete Server Owner Selection Framework
FiveM Scripts Guide β€” Complete Server Owner Selection Framework
FiveM Troubleshooting: Complete Error & Fix Guide
FiveM Troubleshooting: Complete Error & Fix Guide
FiveM Error Codes & Fixes - Mega-Guide
FiveM Error Codes & Fixes - Mega-Guide

No time to configure everything yourself?

Start with a pre-built, tested FiveM server pack. Framework-optimized, all scripts pre-installed.

Super ESX Server
esxstandalone

Super ESX Server

The Super ESX Server is one of the best FiveM server templates - over 1.000 purchases! Want to know why we call it our Super Server? Check out our video to find out some of the basics details of the world. Update 10 is included, make sure to install v7 first and then use content of v10 yo

$228.32
ESX Server Base (by RibSosay)
esxstandalone

ESX Server Base (by RibSosay)

Prebuilt FiveM server with ESX framework GUARANTEE : We offer a guarantee ensuring compatibility with your setup.

$53.99
View all server packs