Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

Installer ox_lib sur un serveur FiveM : la bibliothèque indispensable pour le scripting moderne

Mis à jour le 5 novembre 2026 24 min de lecture 11 sections

Ouvrez le dossier resources d'un serveur FiveM monté en 2026 et comptez les scripts qui démarrent par shared_script '@ox_lib/init.lua' : inventaires, téléphones, garages, systèmes de métiers, presque tout le catalogue moderne s'appuie sur ox_lib, la bibliothèque utilitaire publiée par Overextended. Elle fournit aux scripts Lua et JavaScript ce que les frameworks ne standardisent pas : notifications, prompts à l'écran, menus contextuels, boîtes de saisie, barres de progression, callbacks client-serveur, traductions. Ce guide s'adresse à la personne qui administre le serveur, chez un hébergeur ou sur un VPS qu'elle gère elle-même : installation de la dernière version d'ox_lib et de sa nouvelle dépendance cfxlua-require, configuration dans server.cfg, premier script qui affiche une notification, un prompt et un menu, place d'ox_lib à côté d'ESX, de QBCore et de Qbox, et lecture des erreurs de dépendances qui remplissent la console txAdmin. Si votre serveur n'est pas encore en ligne, commencez par notre guide de mise en place d'un serveur FiveM.

ox_lib, la bibliothèque de l'écosystème Overextended

ox_lib est une ressource FiveM publiée sous licence LGPL-3.0 sur GitHub et documentée sur overextended.dev. Ce n'est pas un framework : elle ne gère ni comptes, ni métiers, ni inventaire. C'est une bibliothèque de fonctions partagées, chargée une seule fois sur le serveur, que chaque script appelle à travers la table globale lib. Une ressource qui veut afficher une notification n'embarque plus sa propre page NUI : elle appelle lib.notify, et c'est l'interface d'ox_lib, commune à tout le serveur, qui l'affiche. Même logique pour les menus, les dialogues, la progression d'une action ou la vérification de version d'une ressource. Le code se divise en deux parties : le dossier imports, chargé dans chaque script qui déclare ox_lib, et le dossier resource, exécuté par ox_lib lui-même. Une version JavaScript existe sous forme de paquet npm, @overextended/ox_lib, avec une couverture partielle des fonctions Lua.

Le rythme de publication est soutenu : la version 3.42.1 est sortie le 3 novembre 2026, deux jours après la 3.42.0, elle-même précédée de la 3.41.0 du 25 octobre et de la 3.40.3 du 15 octobre. Deux changements récents comptent pour l'administration d'un serveur. Depuis la 3.41.0, le système de modules require vit dans un projet séparé, cfxlua-require, livré dans l'archive de release à côté d'ox_lib ; les notes de version expliquent que cette séparation évite les conflits entre bibliothèques qui redéfinissent chacune leur require, ESX étant cité en exemple. Depuis la 3.42.0, un module de versionnage sémantique vérifie au démarrage que les dépendances d'ox_lib sont à la version attendue, cfxlua-require 1.0.2 au minimum. Un mot enfin sur le fork CommunityOx/ox_lib que vous croiserez encore dans des tutos plus anciens : son dépôt GitHub est archivé en lecture seule depuis le 28 avril 2026. Installez la version Overextended.

ModuleFonction principaleCe que ça remplace dans un script
Notificationslib.notify, événement ox_lib:notify côté serveurUne page NUI de notification par script, ou les notifications natives de GTA
Prompt (TextUI)lib.showTextUI, lib.hideTextUILe texte d'aide « Appuyez sur E » dessiné chaque frame avec des natives
Menu contextuellib.registerContext, lib.showContextLes menus maison, souvent incompatibles entre scripts
Dialogueslib.alertDialog, lib.inputDialogLes formulaires NUI de saisie de texte, nombre, liste, date
Progressionlib.progressBar, lib.progressCircleLes barres de progression propres à chaque framework
Mini-jeulib.skillCheckLes tests de compétence pour crochetage, réparation, braquage
Menu radiallib.addRadialItem, lib.registerRadialUn menu d'actions ouvert par une touche (Z par défaut)
Callbackslib.callback, lib.callback.awaitLes callbacks serveur d'ESX ou de QBCore, propres à chaque framework
Cache et localecache.ped, cache.vehicle, lib.onCache, lib.localeLes boucles qui relisent l'entité du joueur chaque frame, les fichiers de traduction maison
Versionslib.versionCheck, lib.checkDependencyLes vérifications de mise à jour écrites à la main

Prérequis côté serveur

  • Un serveur FiveM (FXServer) dont les artefacts sont au moins à la version 7290 : c'est la contrainte /server:7290 inscrite dans le manifeste d'ox_lib. Les frameworks récents demandent plus, Qbox exige par exemple la version 10731. Si votre serveur tourne sur des artefacts anciens, notre guide pour configurer la version des artefacts explique la mise à jour.
  • OneSync activé (convar onesync à on), deuxième contrainte du manifeste. Sans OneSync, FXServer refuse de démarrer ox_lib.
  • Lua 5.4 : tous les scripts Lua de FiveM s'exécutent en 5.4 depuis juin 2025 et la directive lua54 'yes' est dépréciée, mais elle reste présente dans la plupart des manifestes, y compris celui d'ox_lib, sans effet négatif.
  • Un accès aux fichiers du serveur (panel de l'hébergeur, client SFTP, ou terminal sur un VPS Linux) et à la console txAdmin. Sur nos offres serveur FiveM, txAdmin et la protection anti-DDoS sont inclus et le répertoire resources est accessible depuis le panel.
  • Pas de base de données : ox_lib n'utilise pas MySQL. En revanche, la plupart des scripts qui dépendent d'ox_lib dépendent aussi d'oxmysql ; voyez notre guide pour lier une base de données MySQL à un serveur FiveM.

Installer ox_lib et cfxlua-require

Téléchargez l'archive ox_lib.zip depuis la dernière release GitHub, jamais le bouton « Code » du dépôt : un clone des sources ne contient pas l'interface compilée (web/build) ni cfxlua-require, et ox_lib démarre alors sans aucune interface, ou ne démarre pas du tout. L'archive contient deux dossiers frères : ox_lib et cfxlua-require. Déposez les deux dans le répertoire resources de votre serveur, par exemple dans une catégorie [ox], sans renommer ni l'un ni l'autre. Le manifeste de cfxlua-require déclare provide 'require' : c'est ainsi qu'il satisfait la dépendance require inscrite dans le manifeste d'ox_lib, quel que soit le nom de son dossier.

resources/
└── [ox]/
    ├── cfxlua-require/
    │   ├── fxmanifest.lua       (provide 'require', version 1.0.2)
    │   ├── init.lua
    │   ├── LICENSE
    │   └── README.md
    └── ox_lib/
        ├── fxmanifest.lua
        ├── init.lua
        ├── require.lua
        ├── imports/
        ├── resource/
        ├── modules/
        ├── locales/             (33 langues, dont fr.json)
        └── web/build/           (interface compilée)

Sur un FXServer que vous administrez vous-même, sous Ubuntu ou Debian, les mêmes étapes se font en ligne de commande, dans un shell ouvert en SSH, depuis le compte qui lance le serveur, dans le dossier server-data qui contient server.cfg. Le seul paquet système à ajouter est unzip : ox_lib n'a pas d'installeur, ne dépend d'aucun paquet Lua, Node.js ou Python de la distribution, et les runtimes de script sont livrés avec les artefacts FXServer.

sudo apt install -y unzip
cd ~/FXServer/server-data/resources
mkdir -p '[ox]'
curl -L -o /tmp/ox_lib.zip https://github.com/overextended/ox_lib/releases/latest/download/ox_lib.zip
unzip /tmp/ox_lib.zip -d '[ox]'
ls '[ox]'              # doit lister cfxlua-require et ox_lib

Deux détails propres aux systèmes Unix évitent un ticket. Le système de fichiers distingue les majuscules : un répertoire Ox_lib n'est pas ox_lib, alors que sous Windows les deux se confondent, et un serveur migré d'un PC Windows vers un VPS Linux refuse parfois de démarrer pour cette seule raison. Ensuite, extrayez et lancez avec le même compte utilisateur, dédié au serveur, jamais en root : des dossiers créés en root appartiennent à root, et le compte qui exécute FXServer peut se retrouver sans droit d'écriture sur server-data, où le serveur écrit son cache. Les crochets du dossier [ox] sont une convention de rangement, pas une obligation : FXServer parcourt les dossiers entre crochets comme des catégories et y cherche les manifestes.

Sous Windows ou depuis le panel de l'hébergeur

FXServer existe en deux builds, Windows et Linux, publiés sur runtime.fivem.net : il n'y a pas de version macOS, donc depuis un Mac on administre toujours un serveur distant, par SSH ou par le panel de l'hébergeur. Sous Windows, l'exécutable est FXServer.exe, dans le dossier des binaires (par exemple C:\FXServer\server), et les ressources vivent dans un dossier de données séparé, C:\FXServer\server-data\resources. Pour installer ox_lib, un clic droit sur ox_lib.zip puis « Extraire tout » vers ce répertoire suffit ; en PowerShell (5.1 ou plus récent), la commande Expand-Archive fait la même chose. L'option -LiteralPath évite que les crochets du nom de dossier soient lus comme un joker.

# PowerShell, sous Windows
Set-Location C:\FXServer\server-data\resources
New-Item -ItemType Directory -Name '[ox]'
Set-Location -LiteralPath '[ox]'
Expand-Archive -LiteralPath "$env:USERPROFILE\Downloads\ox_lib.zip" -DestinationPath .
Get-ChildItem           # doit lister cfxlua-require et ox_lib

Le lancement se fait ensuite depuis une invite cmd ou PowerShell ouverte dans server-data : C:\FXServer\server\FXServer.exe +exec server.cfg démarre le serveur en lisant la config, et la même commande sans +exec lance txAdmin, qui est un composant de FXServer et n'a rien à installer. Sur un hébergement managé, rien de tout cela n'est nécessaire : sur nos offres serveur FiveM, le panel Pterodactyl fournit un gestionnaire de fichiers dans le navigateur et un accès SFTP (FileZilla, WinSCP), txAdmin est préinstallé, et vous n'avez ni exécutable à lancer ni compte root à gérer.

EnvironnementRépertoire ciblePour déposer les fichiersPour lancer et recharger
Windows (FXServer.exe)C:\FXServer\server-data\resources\[ox]\Clic droit, « Extraire tout », ou Expand-Archive en PowerShellFXServer.exe +exec server.cfg dans cmd ou PowerShell, console txAdmin pour refresh et ensure
VPS Linux (serveur privé virtuel) ou dédié~/FXServer/server-data/resources/[ox]/unzip dans un shell SSH, ou transfert SFTP avec FileZilla, WinSCP ou scpbash run.sh +exec server.cfg, de préférence dans un service systemd pour un redémarrage au boot
Panel Pterodactyl (hébergement managé)resources/[ox]/ vu depuis le gestionnaire de fichiersTéléversement de l'archive puis décompression dans le panel, ou SFTP avec les identifiants du panelBouton de démarrage du panel, console txAdmin pour refresh et ensure

Configurer server.cfg : convars et ordre de démarrage

server.cfg est le fichier de configuration exécuté au boot du serveur par +exec : chaque ligne est une commande console. Ajoutez-y les lignes d'ox_lib. La seule obligatoire est ensure ox_lib, placée avant chaque script qui en dépend : ensure démarre la ressource si elle est arrêtée et la redémarre sinon. Aucune ligne n'est nécessaire pour cfxlua-require, FXServer le charge lui-même comme dépendance d'ox_lib. Les convars sont facultatives : ox:locale fixe la langue de l'interface et des scripts qui utilisent le module de traduction (le fichier fr.json est fourni), ox:userLocales à 1 laisse chaque joueur choisir sa langue avec la commande /ox_lib, ox:primaryColor et ox:primaryShade règlent la couleur d'accent des menus, et ox:progressPropLimit plafonne le nombre d'objets attachés par une barre de progression. Les quatre lignes add_ace ne servent qu'aux scripts qui ajoutent ou retirent des permissions ACE à travers les fonctions d'ox_lib ; sans elles, ces appels sont refusés par le serveur.

# server.cfg : convars ox_lib, avant la ligne ensure
setr ox:locale fr
setr ox:userLocales 1
setr ox:primaryColor blue
setr ox:primaryShade 8
setr ox:progressPropLimit 2

# facultatif : autorise ox_lib à gérer des ACE pour le compte des scripts
add_ace resource.ox_lib command.add_ace allow
add_ace resource.ox_lib command.remove_ace allow
add_ace resource.ox_lib command.add_principal allow
add_ace resource.ox_lib command.remove_principal allow

# ordre de démarrage : la bibliothèque avant tout ce qui l'utilise
ensure oxmysql
ensure ox_lib
ensure es_extended        # ou qb-core, qbx_core, selon votre framework
ensure mon_script

Sans redémarrer le serveur, chargez la nouvelle ressource depuis la console txAdmin : refresh rescanne le dossier resources et lit les manifestes, puis ensure ox_lib la démarre. Le log de démarrage doit rester silencieux. Pour vérifier que la bibliothèque répond, ouvrez le chat en jeu et tapez /ox_lib si vous avez activé ox:userLocales : le sélecteur de langue qui s'ouvre est rendu par l'interface d'ox_lib. Pour la suite de l'administration de la console, voyez notre guide configurer txAdmin.

Déclarer ox_lib dans un script

Un script n'a pas accès à lib par magie : son manifeste doit charger le fichier init.lua d'ox_lib comme script partagé, c'est-à-dire exécuté côté client et côté serveur. C'est cette ligne qui crée les globales lib, cache et require dans l'environnement du script. La ligne dependency 'ox_lib' demande en plus à FXServer de démarrer ox_lib avant le script, ce qui protège d'une erreur d'ordre dans server.cfg. Si vous commencez tout juste le Lua sur FiveM, notre tutoriel pour créer son premier script FiveM pose les bases du manifeste et des événements.

-- resources/[local]/mon_script/fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
lua54 'yes'                        -- déprécié depuis juin 2025, toléré

shared_script '@ox_lib/init.lua'   -- crée lib, cache et require
client_script 'client.lua'
server_script 'server.lua'

files { 'locales/*.json' }         -- pour lib.locale()

dependency 'ox_lib'

Le bloc facultatif ox_libs { 'locale', 'math', 'table' } précharge des modules au démarrage ; sans lui, chaque module est chargé à son premier appel, ce qui suffit dans la plupart des cas. Pour les traductions, créez locales/fr.json et locales/en.json dans votre script, appelez lib.locale() une fois, puis locale('cle') partout : la langue retenue est celle de la convar ox:locale, ou celle choisie par le joueur si ox:userLocales est actif.

Notifications, prompts et menus contextuels

Les trois fonctions que tout script finit par appeler. La notification prend une table : un title ou une description (au moins l'un des deux, la description accepte le Markdown), un type parmi inform, success, warning et error, une position (top-right par défaut, huit valeurs possibles de top à bottom-left), une duration en millisecondes (3000 par défaut), une icône Font Awesome 6 et, si vous le souhaitez, un id : deux notifications avec le même identifiant ne s'empilent pas, utile contre le spam d'un script qui se répète. Côté serveur, il n'y a pas de fonction à appeler : on déclenche l'événement client ox_lib:notify vers le joueur visé avec la même table.

-- client.lua
lib.notify({
    title = 'Garage',
    description = 'Votre **Sultan** est sortie',
    type = 'success',
    position = 'top',
    icon = 'car',
    duration = 5000
})

-- server.lua : même table, envoyée au joueur dont l'identifiant est source
TriggerClientEvent('ox_lib:notify', source, {
    id = 'solde',           -- une seule notification « solde » visible à la fois
    description = 'Solde insuffisant',
    type = 'error'
})

Le prompt, appelé TextUI dans la documentation, est le petit cadre « [E] Faire quelque chose » affiché sur un bord de l'écran. lib.showTextUI fonctionne comme un interrupteur : on l'appelle une fois pour afficher, lib.hideTextUI une fois pour masquer, et surtout pas à chaque frame. Les positions disponibles sont right-center (par défaut), left-center, top-center et bottom-center, avec icône, couleur et style CSS en option. Le module cache évite la boucle qui relit l'état du joueur en permanence : lib.onCache appelle votre fonction uniquement quand la valeur suivie change, ici le véhicule.

-- client.lua : prompt affiché quand le joueur monte dans un véhicule
lib.onCache('vehicle', function(value)
    if value then
        lib.showTextUI('[E] Démarrer le moteur', {
            position = 'left-center',
            icon = 'car'
        })
    else
        lib.hideTextUI()
    end
end)

Le menu contextuel se déclare une fois avec lib.registerContext, puis s'ouvre à la demande avec lib.showContext et son identifiant. Chaque option porte un titre, une description, une icône et une action : une fonction onSelect, un événement client event, un événement serveur serverEvent avec des arguments args, ou un sous-menu menu. Une option disabled reste visible mais grisée, et metadata affiche des détails au survol, avec une barre progress si besoin. Le champ menu au niveau du menu lui-même désigne le parent et ajoute la flèche de retour.

-- client.lua
lib.registerContext({
    id = 'garage_principal',
    title = 'Garage municipal',
    canClose = true,
    options = {
        {
            title = 'Sultan',
            description = 'Garée, place 3',
            icon = 'car',
            metadata = {
                { label = 'Carburant', value = '62 %', progress = 62 },
                { label = 'État moteur', value = 'Bon' }
            },
            serverEvent = 'mon_script:sortirVehicule',
            args = { plaque = 'ABC 123' }
        },
        {
            title = 'Dépanneuse',
            description = 'Indisponible hors service',
            icon = 'truck',
            disabled = true
        },
        {
            title = 'Options',
            icon = 'gear',
            menu = 'garage_options'   -- sous-menu enregistré par ailleurs
        }
    }
})

RegisterCommand('garage', function()
    if not lib.getOpenContextMenu() then
        lib.showContext('garage_principal')
    end
end, false)

Deux outils complètent ce trio. lib.inputDialog(titre, lignes) ouvre un formulaire et renvoie une table des valeurs saisies, ou nil si le joueur annule ; les lignes acceptent les types input, number, checkbox, select, multi-select, slider, color, date, time et textarea, avec required, default, min et max. lib.alertDialog pose une question à deux boutons et renvoie 'confirm' ou 'cancel'. Toutes ces fonctions sont asynchrones : l'appel bloque le thread Lua courant jusqu'à la réponse du joueur, ce qui rend le code linéaire et lisible.

-- client.lua : saisie puis confirmation
local saisie = lib.inputDialog('Nouvelle plaque', {
    { type = 'input', label = 'Plaque', placeholder = 'ABC 123', required = true },
    { type = 'select', label = 'Couleur', options = {
        { value = 'noir', label = 'Noir' },
        { value = 'blanc', label = 'Blanc' }
    } }
})
if not saisie then return end      -- annulé

local reponse = lib.alertDialog({
    header = 'Confirmer',
    content = 'Changer la plaque pour **' .. saisie[1] .. '** ?',
    centered = true,
    cancel = true
})
if reponse == 'confirm' then
    TriggerServerEvent('mon_script:changerPlaque', saisie[1], saisie[2])
end

ox_lib face à ESX, QBCore et Qbox

Première chose à clarifier : ox_lib n'embarque pas de « pont » vers un framework. C'est l'inverse qui se produit : les frameworks et les scripts s'appuient sur ox_lib, chacun à sa façon, et ce sont vos scripts qui décident de ce qu'ils demandent au framework (identité, métier, argent, inventaire) et de ce qu'ils confient à ox_lib (interface, callbacks, traductions). Le tableau suivant résume la situation des trois frameworks du moment, telle que la décrivent leurs manifestes.

FrameworkDépendance à ox_libNotifications et prompts natifsCe que ça implique pour vous
ESX Legacy (es_extended 1.16.3)Aucune : le cœur dépend de sa propre bibliothèque esx_lib et d'oxmysqlESX.ShowNotification appelle l'export de esx_notify, ESX.TextUI celui de esx_textuiInstallez ox_lib à côté d'ESX pour les scripts qui l'exigent ; les deux cohabitent
QBCore (qb-core 1.3.0)Aucune : seule oxmysql est déclaréeQBCore.Functions.Notify envoie un message à l'interface NUI de qb-coreMême chose : ox_lib s'ajoute, il ne remplace rien dans le cœur
Qbox (qbx_core 1.24.1)Obligatoire : ox_lib et oxmysql dans les dépendances, @ox_lib/init.lua chargé par le cœur, artefacts 10731 minimumCelles d'ox_libox_lib est déjà dans la recette txAdmin de Qbox ; mettez-le à jour avec le reste

Pour choisir entre ESX et QBCore, notre comparatif ESX Legacy ou QBCore détaille les différences ; l'installation d'ESX est couverte dans installer ESX Legacy sur FiveM. Concrètement, ce que les développeurs appellent « pont ESX/QBCore » dans un script ox_lib, c'est un petit fichier qui détecte le framework démarré et ne lui demande que les données métier. Tout le reste, notifications comprises, passe par ox_lib et devient identique sur les deux frameworks. Les callbacks d'ox_lib remplacent ESX.TriggerServerCallback et QBCore.Functions.TriggerCallback : côté serveur, lib.callback.register enregistre une fonction qui reçoit l'identifiant du joueur en premier argument ; côté client, lib.callback.await l'appelle et attend la réponse.

-- server.lua : pont minimal, le framework ne sert qu'aux données métier
local ESX, QBCore
if GetResourceState('es_extended') == 'started' then
    ESX = exports['es_extended']:getSharedObject()
elseif GetResourceState('qb-core') == 'started' then
    QBCore = exports['qb-core']:GetCoreObject()
end

local function getJob(source)
    if ESX then
        local xPlayer = ESX.GetPlayerFromId(source)
        return xPlayer and xPlayer.job.name
    elseif QBCore then
        local Player = QBCore.Functions.GetPlayer(source)
        return Player and Player.PlayerData.job.name
    end
end

lib.callback.register('mon_script:getJob', function(source)
    return getJob(source)
end)

RegisterNetEvent('mon_script:sortirVehicule', function(args)
    local source = source
    if getJob(source) ~= 'mecano' then
        TriggerClientEvent('ox_lib:notify', source, { type = 'error', description = 'Réservé aux mécaniciens' })
        return
    end
    -- ... faire apparaître le véhicule args.plaque
end)
-- client.lua : la réponse arrive dans la même ligne, sans callback imbriqué
local job = lib.callback.await('mon_script:getJob', false)
if job == 'mecano' then
    lib.showContext('garage_principal')
end

Un script du marché conçu pour ox_lib vous demandera rarement plus que cela : ses fichiers de configuration proposent en général le choix du framework et, parfois, du système de notification. Avant d'en acheter un, notre guide scripts FiveM, où les trouver et lesquels éviter liste ce qu'il faut vérifier, et nos tutoriels pour installer Quasar Inventory et installer LB Phone montrent deux ressources courantes qui déclarent ox_lib en dépendance.

Déboguer les erreurs de dépendances les plus fréquentes

La console txAdmin et la console F8 du client donnent presque toujours le diagnostic. Les messages ci-dessous sont ceux que produisent ox_lib, cfxlua-require et FXServer, par ordre de fréquence dans les tickets.

Symptôme dans la consoleCauseCorrectif
ox_lib must be started before this resource.Le script démarre avant ox_lib : ligne ensure mal placée, ou dossier ox_lib absent ou mal nommé (par exemple ox_lib-master)Placez ensure ox_lib avant le script, vérifiez le nom exact du dossier, ajoutez dependency 'ox_lib' au manifeste du script
attempt to index a nil value (global 'lib')Le script appelle lib sans avoir chargé @ox_lib/init.luaAjoutez shared_script '@ox_lib/init.lua' au manifeste, avant les autres scripts
FXServer refuse de démarrer ox_lib faute de trouver la dépendance requireLe dossier cfxlua-require n'a pas été copié (archive extraite partiellement, ou ox_lib récupéré par clone git)Ré-extrayez l'archive de release complète : les deux dossiers vont dans resources
The following resource dependencies do not meet the required versioncfxlua-require antérieur à 1.0.2 à côté d'un ox_lib 3.42 ou plus récentRemplacez cfxlua-require par celui de la même archive qu'ox_lib. Un cfxlua-require trop ancien se manifeste aussi par attempt to index a nil value au démarrage d'ox_lib sur FiveM Enhanced : c'est l'issue 839 du dépôt, close par le mainteneur avec la consigne de passer en 1.0.2
An error occurred when importing '@ox_lib/imports/...' suivi de This is likely caused by improperly updating ox_libMise à jour par écrasement : des fichiers de l'ancienne version traînent à côté des nouveauxSupprimez entièrement le dossier ox_lib, ré-extrayez l'archive, redémarrez le serveur
Aucune notification ni menu ne s'affiche, sans erreurInterface absente : web/build manque parce qu'ox_lib vient d'un clone git non compiléUtilisez l'archive de release, ou compilez l'interface avec bun i puis bun run build dans web
ox_lib ne démarre pas, message sur la version du serveur ou sur OneSyncArtefacts antérieurs à 7290, ou OneSync désactivéMettez à jour les artefacts FXServer et passez onesync à on
Un script tiers signale une version d'ox_lib trop ancienne, ou plante sur une fonction lib.xxx inexistanteLe script appelle lib.checkDependency('ox_lib', 'x.y.z') ou une fonction ajoutée après votre versionMettez ox_lib à jour, puis le script. Ne mélangez jamais un ox_lib récent avec un cfxlua-require ancien

Pour isoler une panne, les commandes de ressource de la console txAdmin suffisent, sans toucher aux fichiers : stop ox_lib arrête la ressource, start ox_lib la démarre si elle était arrêtée, restart ox_lib la relance, et ensure ox_lib fait l'un ou l'autre selon son état. Pour désactiver ox_lib le temps d'un test, mettez sa ligne ensure en commentaire avec un # dans server.cfg et redémarrez : tous les scripts qui le déclarent en dépendance cesseront de fonctionner, ce qui vous dit au passage lesquels en dépendent réellement. Si un comportement subsiste avec ox_lib seul sur un serveur de test, sans aucun autre script, c'est un bug à signaler sur le dépôt GitHub, avec la version d'ox_lib, celle de cfxlua-require, le numéro des artefacts et le log complet ; sinon, c'est une erreur de config ou un conflit entre scripts, et le dépôt vous renverra vers votre installation.

Trois réflexes évitent la plupart de ces tickets. Mettez à jour ox_lib et cfxlua-require ensemble, toujours depuis la même archive, en supprimant les anciens dossiers plutôt qu'en les écrasant. Lisez le log complet au démarrage, pas seulement la dernière ligne : la première erreur en haut de la pile est la cause, les suivantes sont des conséquences. Enfin, lib.versionCheck('overextended/ox_lib') dans un script serveur interroge l'API GitHub et signale en console quand une nouvelle version d'ox_lib est publiée, ce qui vous évite de découvrir un retard de dix versions le jour où un script refuse de démarrer. Pour tout ce qui touche au démarrage du serveur lui-même, notre page solutions aux erreurs courantes sur FiveM complète ce tableau.

Lexique : ressource, plugin, package, runtime, environnement

Les tickets sur ox_lib mélangent souvent le vocabulaire de FiveM avec celui d'autres serveurs de jeu ou de l'hébergement web. Ces définitions fixent les termes utilisés dans ce guide et dans la documentation d'Overextended.

TermeCe que ça désigne sur un serveur FiveM
RessourceL'unité d'installation : un répertoire dans resources qui contient un fxmanifest.lua, démarré par une ligne ensure. C'est l'équivalent du plugin d'un serveur Minecraft ou Rust (un fichier déposé dans plugins), mais sans archive à compiler : FXServer lit le manifeste et charge les scripts tels quels. ox_lib, cfxlua-require, es_extended et oxmysql sont des ressources.
Bibliothèque et frameworkUne bibliothèque (ox_lib, esx_lib) fournit des fonctions aux autres ressources. Un framework (ESX Legacy, QBCore, Qbox) gère les joueurs, les métiers et l'argent, et impose sa structure aux scripts. Un serveur a un framework et autant de bibliothèques que nécessaire.
Runtime de scriptL'interpréteur qui exécute une ressource. FiveM en embarque trois, Lua, JavaScript et C#, livrés avec les artefacts FXServer : aucun paquet Lua, Node.js, Python ou PHP à installer sur le système. ox_lib s'adresse aux runtimes Lua et JavaScript.
Environnement de ressourceChaque ressource s'exécute dans son propre environnement, isolé des autres : une variable globale d'un script est invisible depuis un autre script. C'est pourquoi init.lua doit être chargé dans chaque script qui utilise lib, et pourquoi les exports et les événements sont les seuls passages entre environnements.
ImportAu sens d'ox_lib, le dossier imports contient les modules copiés dans l'environnement du script par init.lua. En JavaScript ou TypeScript, l'instruction import lib from '@overextended/ox_lib/server' du package npm joue le même rôle.
Package npm@overextended/ox_lib, publié sous le même numéro de version que la ressource (3.42.1) et décrit par ses auteurs comme un wrapper JS/TS des exports d'ox_lib. Il sert aux scripts écrits en TypeScript et compilés avec un bundler ; il ne remplace pas la ressource ox_lib, qui doit rester installée et démarrée sur le serveur, et ne couvre pas toutes les fonctions Lua.
Fichiers de configurationTrois fichiers de config à ne pas confondre : server.cfg (convars, ensure, ACE, exécuté par +exec), fxmanifest.lua (le manifeste de chaque ressource, lu par refresh) et le config.lua propre à chaque script. ox_lib n'a pas de fichier de conf à éditer : tout se règle par convars.
Extensions de fichiers.lua et .js pour les scripts, .json pour les traductions du dossier locales, .cfg pour la configuration serveur. Aucun exécutable ni DLL dans ox_lib : l'archive ne contient que des scripts, des traductions et l'interface compilée en HTML, CSS et JavaScript.
NUIL'interface d'une ressource, affichée par le navigateur Chromium intégré au client FiveM à partir des fichiers de la ressource. Aucun serveur web (Apache, nginx) ni PHP n'entre en jeu : c'est ce qui permet à ox_lib d'afficher menus et notifications sans rien d'autre que ses fichiers.

Conclusion

Installer ox_lib sur un serveur FiveM tient en trois gestes, sous Windows comme sur un VPS Linux ou depuis un panel : extraire l'archive de release complète, ox_lib et cfxlua-require côte à côte dans resources, écrire ensure ox_lib avant les scripts qui l'utilisent dans server.cfg, et fixer ox:locale fr pour une interface en français. Chaque script y accède ensuite par une ligne de manifeste, shared_script '@ox_lib/init.lua', et gagne des notifications, des prompts, des menus contextuels, des dialogues et des callbacks identiques quel que soit le framework, ESX Legacy, QBCore ou Qbox. Les pannes se lisent dans la console, et presque toutes se ramènent à un ordre de démarrage, un dossier manquant ou une mise à jour incomplète. Le manifeste d'ox_lib cible aussi RedM, la bibliothèque sert donc également sur un serveur RedM. Pour que l'interface reste fluide avec cinquante scripts qui l'appellent, le serveur doit suivre : nos offres serveur FiveM vont de 4 à 64 Go de RAM DDR4, avec txAdmin et protection anti-DDoS inclus, hébergées en France, et si vous préférez gérer FXServer vous-même, notre guide FiveM sous Docker sur un VPS Linux couvre l'installation complète.

FAQ

Qu'est-ce que ox_lib et à quoi sert-il sur un serveur FiveM ?

ox_lib est une bibliothèque de fonctions partagées pour FiveM et RedM, publiée par Overextended sous licence LGPL-3.0 et documentée sur overextended.dev. Ce n'est pas un framework : elle ne gère ni comptes, ni métiers, ni inventaire. Chargée une fois sur le serveur, elle expose à chaque script la table globale lib avec des notifications (lib.notify), des prompts à l'écran (lib.showTextUI), des menus contextuels (lib.registerContext), des boîtes de saisie et d'alerte, des barres de progression, un mini-jeu de compétence, un menu radial, des callbacks client-serveur (lib.callback), un cache des entités du joueur et un module de traduction. La majorité des scripts FiveM modernes la déclarent en dépendance.

Quelle version d'ox_lib installer et où la télécharger ?

Téléchargez toujours l'archive ox_lib.zip de la dernière release sur le dépôt GitHub overextended/ox_lib, la 3.42.1 publiée le 3 novembre 2026 au moment où nous écrivons. Un clone des sources par le bouton Code ne contient ni l'interface compilée (web/build) ni cfxlua-require : ox_lib démarrerait sans menus ni notifications, ou pas du tout. Le fork CommunityOx/ox_lib que citent encore certains tutoriels est archivé en lecture seule sur GitHub depuis le 28 avril 2026 ; installez la version Overextended.

À quoi sert le dossier cfxlua-require et faut-il l'ajouter à server.cfg ?

Depuis ox_lib 3.41.0 (25 octobre 2026), le système de modules require est un projet séparé, cfxlua-require, livré dans la même archive de release dans un dossier frère d'ox_lib. Son manifeste déclare provide 'require', ce qui satisfait la dépendance require inscrite dans le manifeste d'ox_lib sans renommer le dossier. Déposez-le dans resources à côté d'ox_lib, sans ligne ensure : FXServer le charge lui-même comme dépendance. Depuis ox_lib 3.42.0, la version minimale exigée est cfxlua-require 1.0.2 ; un dossier plus ancien bloque le démarrage avec le message « The following resource dependencies do not meet the required version ».

Faut-il ox_lib avec ESX Legacy, QBCore ou Qbox ?

Qbox l'exige : qbx_core 1.24.1 déclare ox_lib et oxmysql en dépendances, charge @ox_lib/init.lua dans son cœur et demande des artefacts 10731 au minimum. ESX Legacy (es_extended 1.16.3) et QBCore (qb-core 1.3.0) ne dépendent pas d'ox_lib : ESX s'appuie sur sa propre bibliothèque esx_lib et sur oxmysql, QBCore sur oxmysql seule. Sur ces deux frameworks, ox_lib s'installe à côté du cœur pour les scripts qui le demandent, et les deux cohabitent sans conflit. Ce sont vos scripts qui décident de ce qu'ils demandent au framework (métier, argent, inventaire) et de ce qu'ils confient à ox_lib (interface, callbacks, traductions).

Comment afficher une notification ox_lib depuis le serveur ?

Côté client, appelez lib.notify avec une table contenant un title ou une description (la description accepte le Markdown), un type parmi inform, success, warning et error, une position (top-right par défaut) et une duration en millisecondes (3000 par défaut). Côté serveur, il n'y a pas de fonction à appeler : déclenchez l'événement client ox_lib:notify vers le joueur visé avec la même table, par exemple TriggerClientEvent('ox_lib:notify', source, { type = 'error', description = 'Solde insuffisant' }). Un champ id évite d'empiler plusieurs fois la même notification.

Pourquoi la console affiche « ox_lib must be started before this resource » ?

Ce message vient du fichier init.lua d'ox_lib, chargé par votre script : il signifie que la ressource ox_lib n'est pas démarrée au moment où le script se lance. Trois causes reviennent : la ligne ensure ox_lib est placée après celle du script dans server.cfg, le dossier d'ox_lib porte un autre nom (ox_lib-master, ox_lib-3.42.1), ou ox_lib a lui-même refusé de démarrer, par exemple faute de cfxlua-require. Placez ensure ox_lib avant tous les scripts qui l'utilisent, vérifiez le nom exact du dossier et ajoutez dependency 'ox_lib' au manifeste du script pour que FXServer impose l'ordre.

Comment mettre ox_lib à jour sans casser les scripts ?

Supprimez entièrement les dossiers ox_lib et cfxlua-require, puis ré-extrayez les deux depuis la même archive de release, sans écraser les anciens fichiers : un mélange de versions produit l'avertissement « An error occurred when importing @ox_lib/imports/... This is likely caused by improperly updating ox_lib ». Redémarrez ensuite le serveur plutôt que la seule ressource, car chaque script a chargé init.lua dans son propre environnement. Pour savoir quand une version sort, appelez lib.versionCheck('overextended/ox_lib') dans un script serveur : la fonction compare la version installée à la dernière release GitHub.

Comment mettre l'interface d'ox_lib en français ?

Ajoutez setr ox:locale fr dans server.cfg, avant la ligne ensure ox_lib. Le dossier locales d'ox_lib contient 33 langues, dont fr.json. Les scripts qui utilisent le module de traduction d'ox_lib (lib.locale() puis locale('cle')) lisent la même convar et chargent leur propre fichier locales/fr.json s'ils en fournissent un. Avec setr ox:userLocales 1, chaque joueur peut en plus choisir sa langue avec la commande /ox_lib dans le chat.

ox_lib fonctionne-t-il sur RedM ?

Oui. Le manifeste d'ox_lib cible gta5 et rdr3, avec l'avertissement d'usage sur la version préliminaire de RedM, et cfxlua-require déclare les deux jeux de la même façon. Les mêmes fonctions d'interface et de callbacks sont disponibles sur un serveur RedM, et le cache expose en plus la monture du joueur (cache.mount). Les prérequis sont identiques : artefacts 7290 au minimum et OneSync activé.

Comment installer ox_lib sous Windows, sans panel ?

FXServer sous Windows se compose d'un exécutable, FXServer.exe, dans le dossier des binaires (par exemple C:\FXServer\server), et d'un dossier de données séparé, C:\FXServer\server-data, qui contient server.cfg et le répertoire resources. Faites un clic droit sur ox_lib.zip puis « Extraire tout » vers resources\[ox], ou utilisez Expand-Archive en PowerShell avec -LiteralPath pour que les crochets du dossier ne soient pas lus comme un joker. Vérifiez que les deux dossiers ox_lib et cfxlua-require sont bien côte à côte, ajoutez ensure ox_lib dans server.cfg, puis lancez depuis une invite cmd ou PowerShell ouverte dans server-data : FXServer.exe +exec server.cfg, ou la même commande sans +exec pour passer par txAdmin. Il n'existe pas de build macOS de FXServer : depuis un Mac, on administre un serveur distant par SSH ou par le panel de l'hébergeur.

Faut-il un serveur web, PHP, Python ou Node.js pour faire tourner ox_lib ?

Non. L'interface d'ox_lib est une page NUI, affichée par le navigateur Chromium intégré au client FiveM à partir des fichiers de la ressource : aucun serveur web (Apache, nginx), aucun PHP ni Python n'intervient. Les runtimes de script Lua et JavaScript sont livrés avec les artefacts FXServer, donc aucun paquet Lua ou Node.js n'est à installer sur le système. Le seul outil externe, bun, ne sert qu'à recompiler l'interface depuis les sources (bun i puis bun run build dans le dossier web), ce qui est inutile avec l'archive de release, déjà compilée. Sur un VPS Linux, le seul paquet à ajouter est unzip.

Comment désactiver ou redémarrer ox_lib sans toucher aux fichiers ?

Depuis la console txAdmin, les commandes de ressource de FXServer suffisent : stop ox_lib arrête la ressource, start ox_lib la démarre si elle était arrêtée, restart ox_lib la relance, ensure ox_lib fait l'un ou l'autre selon son état, et refresh rescanne le répertoire resources pour relire les manifestes après un ajout. Pour désactiver ox_lib le temps d'un test, mettez sa ligne ensure en commentaire avec un # dans server.cfg et redémarrez le serveur : tous les scripts qui le déclarent en dépendance cesseront de fonctionner, ce qui révèle lesquels en dépendent réellement. Après une mise à jour d'ox_lib, redémarrez le serveur entier plutôt que la seule ressource, car chaque script a chargé init.lua dans son propre environnement.