Troubleshooting

Fixes for common installation, panel, in-game menu, Discord, and addon problems. For literal error strings from the multi-instance host, HTTP API, Admin Manager, and Discord OAuth, see Error messages.


Installation

fxPanel doesn't start / "monitor" resource not found

  • Ensure you placed the fxPanel monitor folder inside citizen/system_resources/, not in the server data folder
  • Verify you fully deleted the old monitor folder — leftover files can cause conflicts
  • Check that the directory structure is citizen/system_resources/monitor/ with fxmanifest.lua at the root

Port already in use

  • The default port is 40120. If another process is using it, set a different port via the TXHOST_TXA_PORT environment variable (see Networking)
  • On Linux, use lsof -i :40120 or ss -tlnp | grep 40120 to find the conflicting process
  • On Windows, use netstat -ano | findstr :40120 to identify the process

"Cannot find module" errors on startup

  • Ensure you're using a compatible FXServer artifact version — use the Artifact Updater if you need a newer runtime build
  • Re-download and re-extract fxPanel — the archive may have been corrupted
  • Verify Node.js modules weren't accidentally deleted from the monitor directory

Web Panel & Login

Can't access the panel at localhost:40120

  • Verify FXServer is running and fxPanel initialized (check the server console for the "fxPanel is ready" message)
  • Try http://127.0.0.1:40120 instead of localhost
  • Check your firewall isn't blocking port 40120
  • If hosting remotely, use your server's public IP instead of localhost

Login fails / "Invalid credentials"

  • The master account is created on first launch — if you skipped it, delete the txData profile folder and restart
  • Passwords are case-sensitive
  • Clear browser cookies and try again
  • Check the server console for authentication error messages

CSRF token errors

  • Clear all cookies for the panel domain and log in again
  • This can happen if you have multiple tabs open and one session expired
  • If using a reverse proxy, ensure it's forwarding the X-TxAdmin-CsrfToken header

In-Game Menu

/tx command doesn't work

  • Ensure the player has admin permissions configured in the panel
  • The menu requires the relevant in-game permissions for each feature, such as menu.viewids, menu.vehicle.spawn, or players.noclip
  • Check that the resource is started: type restart monitor in the server console
  • Verify the NUI hasn't been blocked by another resource
  • Another resource may be interfering with the NUI layer — check for SetNuiFocus conflicts
  • Try restarting the monitor resource: restart monitor
  • Check the F8 console for JavaScript errors

Keybinds not responding

  • fxPanel registers keybind commands, but the default key is empty; assign a key in Game Settings -> Key Bindings -> FiveM
  • Some resources override keybinds — check for conflicts
  • Verify the menu is enabled and that your admin has the feature-specific permission for the keybind action

Discord Integration

See Discord Integration for setup (standalone bot, OAuth login, logging, and slash commands). OAuth login issues are listed under OAuth errors and API responses and in Error messages below.

Bot doesn't come online

  • Double-check the bot token in Settings → Discord (see Standalone Bot Runtime)
  • Ensure the bot has been invited to your Discord server with the correct permissions
  • The bot requires the Send Messages and Embed Links permissions at minimum
  • Check the server console for Discord connection errors

Status embed not updating

  • Verify the target channel ID is correct
  • The bot needs Send Messages and Embed Links permissions in the specific channel
  • Status embeds update on an interval — wait at least 60 seconds
  • Check for rate-limiting messages in the server console

Discord logs not posting

  • Verify the correct route is enabled in Settings -> Discord Bot -> Edit Logging (see Discord Logging)
  • If the issue is with restart or warning-style announcements, open the Warnings Channel entry in that list and verify its channel ID
  • Double-check the route's channel ID and the shared log guild override if you are sending logs to a different Discord server
  • If you enabled advanced filtering for Admin Command Logs, make sure the specific command is still checked
  • The bot needs Send Messages and Embed Links permissions in the target channel
  • Check the server console for bridge or Discord delivery errors

Slash commands not appearing

  • Slash commands may take up to 1 hour to propagate after bot setup
  • Ensure the bot has the applications.commands scope
  • Try kicking and re-inviting the bot
  • For addon-provided commands, ensure the addon is in the running state and that discordBot.commands points to an addon-relative path with no absolute segments or ..

Addons

Addon isn't discovered

  • Verify the manifest id is unique and matches the required lowercase ID format
  • Check the console for Zod validation errors on the manifest
  • Ensure addon.json exists in the addon root (not in a subdirectory)
  • The id must be lowercase with only a-z, 0-9, and hyphens (3-64 chars)

Addon stays in "discovered" state

  • It needs to be approved by an admin with all_permissions
  • After approval, the addon starts on the next boot or hot-reload cycle

Addon fails to start

  • Check the console for [addon:<id>] error messages
  • Missing "type": "module" in package.json
  • Syntax error in the server entry file
  • addon.ready() never called (10-second timeout)
  • Server entries must import from 'addon-sdk'; addon-owned Discord command/event files should import from 'addon-sdk/discord' (not a relative path)
  • Invalid discordBot.commands or discordBot.events path in addon.json (absolute paths and .. traversal are rejected)
  • Missing "fxpanel": { "minVersion": "..." } in the manifest

API routes return 503

  • The addon runtime is not running (check state in the Addons page)
  • The addon crashed — check console logs for the error

Public routes return "Not found"

  • Ensure "publicRoutes": true is set in your addon.json manifest
  • Verify your route paths use simple :param segments — regex patterns like :path(.*) are not supported
  • Check that the number of path segments in the request matches the registered route pattern

Dedicated public port not starting

  • Check if another process is already using the configured port
  • Verify the configured port number is valid (1-65535). In practice, ports below 1024 may require elevated privileges on some hosts.
  • If fxPanel logs a TLS credential error, set TXHOST_ADDON_PUBLIC_TLS_KEY + TXHOST_ADDON_PUBLIC_TLS_CERT or TXHOST_ADDON_PUBLIC_TLS_KEY_FILE + TXHOST_ADDON_PUBLIC_TLS_CERT_FILE
  • Check the console for [addon:<id>] bind errors
  • If no port is configured, fxPanel logs that public routes are enabled without a public server port. The main panel origin intentionally does not serve public addon routes.

Storage operations fail

  • Ensure storage is listed in permissions.required and was approved
  • Storage operations timeout after 5 seconds
  • Check if the addon has exceeded the configured storage limit (10 MB by default)

Panel component doesn't render

  • Verify your entry file exports a function matching the component name in the manifest
  • Check the browser console for import or render errors
  • Ensure React is not bundled in your panel entry (use externals)

Theme addon doesn't apply on the login page

  • Verify the addon is in the running state (check the Addons page)
  • Ensure static/theme.json exists in the addon's directory with "enabled": true
  • The panel object in theme.json must contain CSS custom property names starting with --
  • CSS selectors must be gated behind a data attribute (e.g. html[data-addon-themer-enabled='true']) — the server sets this attribute when a valid theme.json is found
  • Refresh the page after making changes to theme.json — values are read at HTML generation time

Theme addon logo doesn't appear on the login page

  • Ensure branding.panelLogo in theme.json points to a valid file in the addon's static/ directory
  • Supported formats: PNG, JPG, GIF, SVG, WebP, ICO
  • The logo is base64-encoded and embedded in the HTML. Files larger than 100,000 bytes are skipped.
  • Check that the filename in theme.json matches the actual file exactly (case-sensitive on Linux)

WebSocket push not working

  • Ensure ws.push is in your granted permissions
  • Panel clients must be subscribed to the addon's room (automatic for addon components)

Hot-reload not triggering

  • Ensure file changes are within the addon's directory
  • Check that the addon is in the running state
  • Panel/NUI bundles are not hot-reloaded — refresh the browser manually after rebuilding

Error messages

Literal strings returned by fxPanel, the standalone multi-instance host (fxp-host), HTTP APIs, and the panel UI. Use this section when logs or toasts match a message exactly. Related guides: Configuration, Admin Manager, Artifact Updater, Discord Integration.

Host (FXPHOST)

Console stderr / startup failures for the standalone host process (packages/host).

Message / patternTypical causeWhat to do
EADDRINUSE binding instance "<id>" UI on <port>Another process (or second fxp-host) owns fxpUiPortStop the conflicting listener; adjust fxpUiPort / FXPHOST_UI_PORT_BASE in host.instances.json; or set FXPHOST_UI_LISTEN_RELAX=1 for local dev
[fxp-host] instance "<id>": fxpUiPort <n> busy; listening on <m> (FXPHOST_UI_LISTEN_RELAX)Relax mode shifted the bind to the next free portUpdate host.instances.json if you need a fixed port; otherwise expected in dev
Could not bind extra UI for instance "<id>" starting at fxpUiPort <n>No free port in the retry windowFree ports or raise offsets / disable conflicting instances
fxpUiPort <p> conflicts with FXPHOST_HTTP_PORTInstance panel port equals control-plane HTTP portChange FXPHOST_HTTP_PORT or the instance fxpUiPort
Duplicate fxpUiPort <p>Two instances share the same UI portAssign unique fxpUiPort values
Gameplay port <g> equals FXPHOST_HTTP_PORT / equals an fxpUiPortGame port collides with host or panel portsAdjust game endpoint / FXPHOST_GAME_PORT_BASE or instance ports
Admin API auth is ON (FXPHOST_ADMIN_TOKEN)Informational — token auth enabledSend Authorization: Bearer …, X-Fxp-Admin-Token, or use POST /api/v1/session

Environment variables for the host are summarized in the host operator docs; panel-side TXHOST_* validation is below.

Instances (host API)

JSON error fields from POST /api/v1/instances and instance lifecycle routes.

Message / patternHTTPTypical causeWhat to do
Instance id already exists: <id>409Duplicate id in host.instances.jsonPick a new id or remove the old row
Unknown instance: <id>404Stale id or typoRefresh instance list; fix client id
Already running409Start requested while FXServer is upStop first or use restart
Still running after stop409Stop did not terminate the processKill orphaned FXServer; check serverCwd / binary path
Persisted instance not resolved after write500Host failed to reload registry after createCheck disk permissions on instances file; restart host
config.json not found or unreadable404Profile path wrong for instanceFix serverCwd / deploy profile
Zod flatten() object on create body400Invalid JSON bodyMatch OpenAPI / createInstanceBodySchema fields

Port-plan violations from instance validation use the same codes as Host (FXPHOST) (duplicate_fxp_ui_port, fxp_ui_equals_control_plane, etc.).

Artifact download and apply (core)

Background updater and /fxserver/artifacts/* routes (core/modules/FxUpdater).

Message / patternWhereTypical causeWhat to do
Only admins with all permissions can manage artifacts.Download route toastMissing all_permissionsGrant permission or use master account
A valid HTTPS download URL is required.Download routeBad URLUse https://runtime.fivem.net/... only
Download URL hostname is not allowed. Permitted: runtime.fivem.netDownload routeCustom host blockedUse official artifact URLs
A version identifier is required.Download routeMissing version fieldPass tier label or custom
No downloaded update ready to apply. Please download first.Apply routeStatus not extractedComplete download/extract first
A download is already in progress.Updater (internal)Overlapping downloadWait for current job
An update is currently being applied.Updater (internal)Apply in progressWait for restart
Invalid artifact structure: … / FXServer.exe not foundExtract phaseWrong platform archivePick Windows vs Linux tier; see Artifact Updater
tar exited with code <n>Linux extractCorrupt .tar.xzRe-download; check disk space
Archive entry has unsafe name / escapes staging directoryZIP extractZip-slip attemptDo not use untrusted archives
Failed to stop game server: …ApplyFXServer did not exitStop server manually; retry apply
fxserver_update_failure.txt beside artifact rootPersisted failurePrior download/apply failedRead file; fix cause; delete marker and retry

Panel UI strings for /system/artifacts are in Artifact updater UI.

HTTP / SQL (host API)

GET /host/status (embedded monitor) and /api/v1/* database routes.

Message / patternWhereTypical causeWhat to do
token not configuredGET /host/statusTXHOST_API_TOKEN unsetSet token or disabled — see Configuration
token missing / invalid token / token conflictGET /host/statusWrong/missing X-TxAdmin-EnvToken or query envtokenMatch env token; use header or query, not both
Unauthorized + hint about FXPHOST_ADMIN_TOKEN / bridgeHost API 401No admin or bridge tokenSet FXPHOST_ADMIN_TOKEN; use Bearer, X-Fxp-Admin-Token, or session cookie
FXPHOST_ADMIN_TOKEN is not set on this hostPOST /api/v1/sessionSession login disabledSet admin token on host
Invalid tokenPOST /api/v1/sessionWrong body tokenCopy exact token from host env
sqlite_required + Set FXPHOST_DB_MODE=sqliteProfile mirror routes 503SQLite mode offSet FXPHOST_DB_MODE=sqlite and optional mirror flags
MariaDB is not fully configured (need host, database, user via FXPHOST_DB_*)MariaDB query routeMissing DB envSet FXPHOST_DB_HOST, FXPHOST_DB_NAME, FXPHOST_DB_USER, etc.
Invalid SQLMariaDB query routeParser rejected statementFix SQL; avoid multi-statement abuse
Enable FXPHOST_DB_MODE=sqlite for audit persistence.GET /api/v1/audit/recentAudit DB disabledInformational when mode is none

Admin Manager

Panel toasts from POST /adminManager/:action (requires manage.admins unless noted).

Message / patternTypical causeWhat to do
You don't have permission to execute this action.Missing manage.adminsGrant permission — see Permissions
Invalid Request / Invalid Request - missing parametersMalformed API bodyCheck required fields (name, permissions, …)
Invalid username, it must follow the rule:Username regex failed3–20 chars; see Account Constraints
Invalid CitizenFX ID1 / ID2 / ID3 / (ERR1–3) Invalid CitizenFX IDCfx.re lookup failedUse fivem:<id> or resolvable forum username
Failed to verify CitizenFX ID. Please try again or check the ID.Network/API errorRetry; verify id
Invalid Discord IDSnowflake regex failedUse numeric Discord user id
You cannot give permissions you do not have:Privilege escalation blockedGrant only permissions you hold
(ERR0) You cannot edit yourself.Self-edit blockedUse Account settings or another admin
You can't delete yourself. / You cannot delete an admin master.Safety ruleSee Safety Rules
Admin not found.Wrong usernameRefresh admin list
You cannot reset your own password here.Use change-password flowOpen profile password page
Unknown action.Bad :action segmentUse add, edit, delete, resetPassword

More context: Common errors (Admin Manager).

Discord OAuth

Login flow (/auth/discord/*) — setup in Discord OAuth Login.

Message / errorCodeTypical causeWhat to do
Discord OAuth is not configured.Missing client id/secretSet OAuth fields under Settings → Discord Bot
no_admins_setup (redirect API)No admins in vault yetComplete master setup first
invalid_sessionSession lost between redirect and callbackRetry login; avoid clearing cookies mid-flow
invalid_stateCSRF state mismatchRetry; one tab only
Discord token exchange failed + statusBad code, secret, or redirect URIMatch Developer Portal redirect to /login/discord/callback exactly
Invalid access_token in responseDiscord returned unexpected JSONCheck app OAuth settings
Failed to fetch Discord user infoUser endpoint errorRetry; check Discord API status
not_admin + identifier contextDiscord user not linked to an adminAdd discord:<id> on admin account
Failed to loginVault/session errorCheck server logs

Full callback matrix: OAuth errors and API responses.

fxPanel v1 monitor sync

POST /api/v1/host/fxpanel-v1/sync-monitor (desktop orchestrator).

Message / patternHTTPTypical causeWhat to do
Missing v1 path: PATCH … panelV1SourcePath or pass v1SourcePath400No v1 checkout pathSet orchestrator settings or body v1SourcePath
Missing artifactRoot: set FXPHOST_ARTIFACT_ROOT …400No artifact treeSet env or artifactRoot in body
v1 path does not exist: <path>400Wrong repo pathPoint at fxPanel v1 root containing monitor/
artifactRoot does not exist: <path>400Artifact dir missingFix FXPHOST_ARTIFACT_ROOT
Expected a fxPanel v1 repo root (contains monitor/)400Path is not v1 layoutUse repo root or monitor folder
{ ok: false, error: "<msg>" }400Copy/sync failureCheck permissions; disk space

TXHOST environment validation

Fatal startup errors from getHostVars() (quoted values or Zod failures). Summaries also appear on Configuration → Environment validation errors.

Message / patternTypical causeWhat to do
Invalid value for a TXHOST environment variable. + quoted value hintValue wrapped in " or 'Remove quotes in service manager / panel
Zod message on TXHOST_API_TOKENToken length/format16–48 chars; alphanumeric, _, -; or disabled
DATA_PATH must be an absolute pathRelative TXHOST_DATA_PATHUse full path
TXA_PORT cannot be 30120Reserved portPick another panel port
FXS_PORT cannot be between 40120 and 40150Conflicts with panel rangeChange game port
Invalid IPv4 address on TXHOST_INTERFACEBad bind addressUse dotted-quad IPv4
Provider name regex errorsTXHOST_PROVIDER_NAME format2–16 chars; see Provider Customization
The account needs to be in the username:fivemId … formatBad TXHOST_DEFAULT_ACCOUNTuser:fivemId or user:fivemId:bcrypt
The key needs to be in the cfxk_… formatBad TXHOST_DEFAULT_CFXKEYValid Cfx license key
Public addon server requires TLS credentials. Set TXHOST_ADDON_PUBLIC_TLS_*Public addon port without TLSSet key/cert env vars or disable public routes

Artifact updater UI

Strings shown on /system/artifacts (FxUpdaterPage).

Message / patternTypical causeWhat to do
Failed to load artifact dataGET /fxserver/artifacts failedCheck network, permissions, server logs
Please enter a URLEmpty custom URL fieldPaste artifact URL
Please enter a valid https URLNon-HTTPS or parse errorUse https://runtime.fivem.net/...
Please enter a valid https URL from an allowed domain (runtime.fivem.net)Host not allowlistedOfficial runtime only
Downloading FXServer build <version>...Success toast (download started)Wait for status poll
Applying update... The server will restart shortly.Apply acceptedExpect process exit/restart
Updater status phase: error + messageBackground failureMatch message in Artifact download and apply; check fxserver_update_failure.txt

Operator workflow: Artifact Updater.