ox_lib Komplett-Guide: Die unverzichtbare FiveM-Utility-Bibliothek
Alles, was du über ox_lib wissen musst – die wichtigste Utility-Bibliothek im FiveM-Ökosystem. Behandelt Features, Installation, UI-Komponenten und das OX-Ökosystem.

ox_lib ist die wichtigste Utility-Bibliothek im FiveM-Ökosystem. Sie bildet das Fundament, auf dem moderne Skripte, Frameworks und UI-Systeme aufgebaut sind. Egal ob du ESX, QBCore oder QBOX betreibst – das Verständnis von ox_lib ist für die Server-Entwicklung in 2026 unverzichtbar.
Was ist ox_lib?
ox_lib ist eine Open-Source-Utility-Bibliothek, die vom Overextended-Team entwickelt wurde. Sie stellt geteilte Funktionen, UI-Komponenten und Entwickler-Tools bereit, von denen andere Ressourcen abhängen. Stell sie dir als die Standardbibliothek für die FiveM-Entwicklung vor.
Sie ist kein Framework für sich – sie arbeitet neben deinem Framework (ESX, QBCore oder QBOX) und stellt gemeinsame Funktionalität bereit, die sonst in jedem Skript neu implementiert werden müsste.
Kernfunktionen
UI-Komponenten
ox_lib enthält einen vollständigen Satz von UI-Elementen, den Skripte verwenden können, ohne eigene Oberflächen mitbringen zu müssen:
- Kontextmenüs: Konfigurierbare Menüs mit Icons, Beschreibungen und verschachtelten Untermenüs
- Benachrichtigungen: Toast-Style-Benachrichtigungen mit Typen (success, error, warning, info)
- Fortschrittsbalken: Lineare und kreisförmige Fortschrittsanzeigen mit Abbruch-Unterstützung
- Eingabedialoge: Formulare mit Textfeldern, Checkboxen, Selects, Farbwählern, Datumswählern
- Text UI: Einfache Taste-Hinweis-Anzeigen für Interaktionshinweise
- Skill-Checks: Timing-basierte Minispiele für Aktionen wie Schlösserknacken oder Hacking
- Radialmenü: Kreisförmiges Menü für Schnellzugriffs-Aktionen
Diese UI-Komponenten geben Servern ein einheitliches Aussehen und Gefühl über alle Skripte, die ox_lib verwenden, anstatt dass jede Ressource ihre eigene nicht passende UI hat.
Geteilte Module
Module, die sowohl client- als auch serverseitige Skripte importieren können:
- Locale: Internationalisierungsunterstützung für mehrsprachige Server
- Logger: Strukturiertes Logging mit konfigurierbaren Leveln
- Tabellen-Utilities: Deep Copy, Merge, Contains und weitere Tabellenoperationen
- Mathe-Utilities: Runden, Eingrenzen, Skalieren und Gruppen-Mathefunktionen
- String-Utilities: Formatierung, Trimmen und Musterabgleich-Helfer
Client-Utilities
- Zonen: Poly- und Kugelzonen-Erstellung zum Auslösen von Events, wenn Spieler Bereiche betreten/verlassen
- Punkte: Effiziente distanzbasierte Punkt-Erkennung (leichter als Zonen für einfache Prüfungen)
- Raycast: Kamerabasiertes Raycasting für das Anvisieren von Entitäten und Oberflächen
- Streaming: Modelle, Animationen und Partikeleffekte anfordern und laden mit automatischer Bereinigung
- Fahrzeugeigenschaften: Vollständigen Fahrzeugzustand abrufen/setzen (Mods, Farben, Schäden, Extras)
Server-Utilities
- Versions-Checker: Automatische Update-Benachrichtigungen für Ressource-Entwickler
- Callbacks: Client-Server-Callback-System (ähnlich ESX/QBCore-Callbacks, aber sauberer)
- Zugangskontrolle: ACE-basierte Berechtigungsprüfungen
Installation
ox_lib ist einfach zu installieren:
- Lade die neueste Version aus dem GitHub-Repository herunter
- Platziere sie in deinem
resources-Ordner - Füge
ensure ox_libzu deinerserver.cfghinzu, vor jeder Ressource, die davon abhängt - Führe
refreshundensure ox_libin der Server-Konsole aus
Wichtig: ox_lib muss vor jeder Ressource starten, die es verwendet. Platziere die ensure-Zeile nahe am Anfang deiner server.cfg, direkt nach deinem Framework.
Wie Skripte ox_lib verwenden
Wenn ein Skript ox_lib voraussetzt, bedeutet das, dass das Skript die Funktionen von ox_lib verwendet, anstatt eigene zu implementieren. Zum Beispiel:
- Ein Job-Skript könnte den Fortschrittsbalken von ox_lib für Arbeitsaktionen nutzen
- Ein Polizei-Skript könnte die Eingabedialoge von ox_lib für das Schreiben von Berichten verwenden
- Ein Drogen-Skript könnte die Skill-Checks von ox_lib für die Verarbeitung nutzen
- Ein Inventarsystem könnte die Kontextmenüs von ox_lib für Item-Aktionen nutzen
Deshalb ist ox_lib zum Standard geworden: Es eliminiert doppelten Aufwand und gibt Spielern eine einheitliche Oberfläche.
ox_lib und das OX-Ökosystem
ox_lib ist das Fundament eines größeren Ökosystems von Ressourcen des Overextended-Teams:
Ressource | Zweck | Abhängig von ox_lib? --- | --- | --- ox_inventory | Inventarsystem | Ja ox_target | Interaktion/Targeting | Ja ox_doorlock | Türverwaltung | Ja ox_fuel | Kraftstoffsystem | Ja ox_core | Framework (QBOX-Basis) | Ja ox_mdt | Polizei MDT/CAD | Ja
QBOX-Server erhalten die tiefste Integration, da QBOX auf ox_core aufgebaut ist, das selbst von ox_lib abhängt. Alles arbeitet nativ zusammen.
Häufige Probleme und Lösungen
Skripte starten nicht
Wenn Skripte mit „ox_lib not found" oder ähnlichen Meldungen fehlschlagen, stelle sicher, dass ox_lib vor ihnen in der server.cfg startet. Die Ressource-Ladereihenfolge ist entscheidend.
UI erscheint nicht
Lösche den FiveM-Cache (%localappdata%/FiveM/FiveM.app/data/cache). Der NUI-Cache kann verhindern, dass aktualisierte UI geladen wird. Sieh unseren Troubleshooting-Guide für weitere Cache-Fixes.
Versions-Konflikte
Halte ox_lib aktuell. Ältere Versionen fehlen möglicherweise Funktionen, die neuere Skripte benötigen. Prüfe die Dokumentation des Skripts auf Mindest-ox_lib-Versionsanforderungen.
Performance-Bedenken
ox_lib selbst ist leichtgewichtig. Wenn du hohe Ressourcennutzung siehst, liegt das Problem wahrscheinlich in Skripten, die ox_lib verwenden, nicht in ox_lib selbst. Nutze resmon, um den tatsächlichen Engpass zu identifizieren.
ox_lib vs. Alternativen
Bevor ox_lib zum Standard wurde, verwendeten Server verschiedene Alternativen:
- qb-menu / qb-input: QBCores integrierte UI-Komponenten. Noch funktional, aber weniger funktionsreich. Die Äquivalente von ox_lib sind schneller und flexibler.
- ESX-Menüs: Altes ESX-UI-System. Erheblich veraltet. ox_lib ist die empfohlene Ersetzung auch für ESX-Server.
- Benutzerdefiniertes NUI: Einige Premium-Skripte bündeln ihre eigene UI. Das funktioniert, führt aber zu inkonsistenten Spielerfahrungen über verschiedene Skripte.
Das Ökosystem hat sich auf ox_lib konvergiert, da es kostenlos, gut gepflegt und eine konsistente Grundlage für alle ist.
FAQ
Ist ox_lib für meinen Server erforderlich?
Technisch nein, aber praktisch ja. Die meisten modernen Skripte hängen davon ab. ox_lib nicht zu verwenden schränkt erheblich ein, welche Ressourcen du installieren kannst.
Beeinträchtigt ox_lib die Server-Performance?
Minimal. ox_lib ist eine der leichtesten verfügbaren Utility-Bibliotheken. Ihr Ressourcen-Fußabdruck liegt typischerweise unter 0,01ms im Leerlauf. Die UI-Komponenten verbrauchen nur Ressourcen, wenn sie aktiv angezeigt werden.
Kann ich ox_lib mit ESX verwenden?
Ja. ox_lib ist framework-agnostisch. Es funktioniert mit ESX, QBCore, QBOX und eigenständigen Servern. Das ist eine seiner wichtigsten Stärken.
Wie oft sollte ich ox_lib aktualisieren?
Prüfe monatlich auf Updates. Größere Updates können neue Funktionen hinzufügen, die Skripte möglicherweise benötigen. Teste Updates immer zuerst auf einem Staging-Server, bevor du sie in die Produktion pushst.
Entwickler-Kurzreferenz: Meist verwendete ox_lib-Funktionen
Wenn du Skripte schreibst oder vorhandene anpasst, hier sind die am häufigsten verwendeten ox_lib-Funktionen mit praktischen Beispielen. Die vollständige Dokumentation ist auf overextended.dev/ox_lib und der Quellcode auf GitHub verfügbar.
Benachrichtigungen
-- Clientseitige Benachrichtigung
lib.notify({
title = 'Polizei',
description = 'Sie wurden mit einer Geldstrafe von $500 für Geschwindigkeitsüberschreitung belegt.',
type = 'error', -- 'success' | 'error' | 'warning' | 'inform'
duration = 5000,
position = 'top-right'
})
Benachrichtigungen sind die häufigste ox_lib-Funktion, auf die du stoßen wirst. Jedes Skript, das dem Spieler etwas mitteilen muss, verwendet dieses Muster. Das type-Feld steuert Farbe und Icon automatisch.
Fortschrittsbalken
-- Clientseitiger Fortschrittsbalken mit Abbruchmöglichkeit
local completed = lib.progressBar({
duration = 5000,
label = 'Schloss knacken...',
useWhileDead = false,
canCancel = true,
disable = {
car = true,
move = true,
combat = true
},
anim = {
dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
clip = 'machinic_loop_mechandplayer'
}
})
if completed then
-- Aktion erfolgreich
else
-- Spieler hat abgebrochen
end
Die disable-Tabelle steuert, was der Spieler während der Aktion nicht tun kann. Die anim-Tabelle spielt gleichzeitig eine GTA-Animation ab. Die meisten Minigame-Skripte verwenden genau dieses Muster.
Kontextmenüs
-- Ein Kontextmenü öffnen
lib.registerContext({ lua
id = 'mechanic_menu',
title = 'Mechaniker-Dienste',
options = {
{
title = 'Fahrzeug reparieren',
description = 'Vollständige Fahrzeugreparatur - $500',
icon = 'wrench',
onSelect = function()
-- Reparatur verarbeiten
end
},
{
title = 'Performance-Tuning',
description = 'Motor und Fahrwerk upgraden',
icon = 'gauge-high',
arrow = true, -- zeigt Pfeil an, der Untermenü anzeigt
menu = 'tuning_menu'
}
}
})
lib.showContext('mechanic\_menu')
Kontextmenüs unterstützen Icons (FontAwesome-Namen), Untermenüs über `menu`-Verkettung, Metadaten-Anzeige und bedingte Option-Sichtbarkeit. Sie sind das Standard-Interaktionsmenü für die meisten modernen FiveM-Skripte.
### Eingabedialoge
```lua
```lua
-- Spielereingabe sammeln
local input = lib.inputDialog('Spieler verwarnen', {
{ type = 'input', label = 'Grund', required = true, max = 100 },
{ type = 'number', label = 'Betrag ($)', min = 1, max = 10000 },
{ type = 'checkbox', label = 'Zum Strafregister hinzufügen', checked = true }
})
if input then
local reason = input[1]
local amount = input[2]
local addToRecord = input[3]
-- Strafe verarbeiten
end
Eingabedialoge ersetzen die alten `qb-input`- und ESX-Eingabesysteme. Sie unterstützen Text, Zahlen, Selects, Checkboxen, Farbwähler und Datums-/Zeitwähler, alles in einem Modal.
### Skill-Checks (Minispiele)
```lua
```lua
-- Einfacher Skill-Check
local success = lib.skillCheck({'easy', 'easy', 'medium'}, {'w', 'a', 's', 'd'})
-- Benutzerdefinierte Schwierigkeit
local success = lib.skillCheck(
{
{ areaSize = 35, speedMultiplier = 1 }, -- leicht
{ areaSize = 25, speedMultiplier = 1.5 }, -- mittel
},
{'w', 'a', 's', 'd'}
)
if success then
-- Spieler hat die Prüfung bestanden
end
Skill-Checks sind Timing-basierte Minispiele, bei denen eine Zone um einen Kreis rotiert und der Spieler die Taste drücken muss, wenn der Indikator in den Zielbereich eintritt. Wird ausgiebig für Schlösserknacken, Hacking, Drogenverarbeitung und andere fähigkeitsbasierte Aktionen verwendet. `areaSize` steuert, wie groß der Zielbereich ist (größer = leichter), und `speedMultiplier` steuert die Rotationsgeschwindigkeit.
### Zonen und Punkte
```lua
```lua
-- Eine Interaktionszone erstellen
local zone = lib.zones.sphere({
coords = vec3(452.0, -980.0, 30.0),
radius = 5.0,
debug = false,
onEnter = function()
lib.showTextUI('[E] Auf Geldautomaten zugreifen')
end,
onExit = function()
lib.hideTextUI()
end,
inside = function()
if IsControlJustReleased(0, 38) then -- E-Taste
-- Geldautomaten-Menü öffnen
end
end
})
-- Einen leichtgewichtigen Distanzpunkt erstellen (günstiger als Zonen)
local point = lib.points.new({
coords = vec3(452.0, -980.0, 30.0),
distance = 10.0,
onEnter = function(self)
-- Innerhalb von 10 Einheiten
end,
onExit = function(self)
-- Bereich verlassen
end,
nearby = function(self)
-- Wird jeden Frame aufgerufen, während man sich im Bereich befindet
end
})
**Zonen** verwenden, wenn präzise Formerkennung benötigt wird (Poly-Zonen für unregelmäßig geformte Bereiche). **Punkte** verwenden, wenn nur radiusbasierte Erkennung benötigt wird – sie sind CPU-mäßig erheblich günstiger für eine große Anzahl von Standorten.
### Callbacks (Client ↔ Server)
```lua
```lua
-- Serverseitig: Callback registrieren
lib.callback.register('myresource:getData', function(source, param1)
local player = exports.qbx_core:GetPlayer(source)
return player.PlayerData.money.cash
end)
-- Clientseitig: Server-Callback aufrufen
local cash = lib.callback.await('myresource:getData', false, 'someParam')
print('Spieler-Cash: ' .. cash)
```lua
```lua
-- Async-Version mit Callback-Funktion
lib.callback('myresource:getData', false, function(result)
print('Ergebnis erhalten: ' .. result)
end, 'someParam')
ox\_lib-Callbacks ersetzen die älteren `QBCore.Functions.TriggerCallback`- und ESX-Callback-Muster. Sie unterstützen sowohl Async/Await-Style als auch traditionelle Callback-Funktionen und behandeln Timeout- und Fehlerfälle automatisch.
## Versionshistorie und was sich geändert hat
Das Verständnis, welche Version wichtige Funktionen eingeführt hat, hilft beim Debugging von Kompatibilitätsproblemen:
Version | Wichtige hinzugefügte Features
--- | ---
3.x | Radialmenü, Zonen-Rewrite, verbesserte NUI-Performance, Skill-Check-Überarbeitung
2.x | Eingabedialoge, Kontextmenü-Verbesserungen, Callback-System, Punkte-System
1.x | Erstveröffentlichung: Benachrichtigungen, Fortschrittsbalken, grundlegende Kontextmenüs, Streaming-Utilities
Prüfe immer die [GitHub-Releases-Seite](https://github.com/overextended/ox_lib/releases) für das aktuelle Versions-Changelog. Skripte geben oft eine Mindest-ox\_lib-Version in ihrer `fxmanifest.lua` an:
```lua
```lua
dependencies {
'/server:7290',
'/onesync',
'ox_lib >= 3.0.0'
}
Wenn ein Skript nach dem Aktualisieren von ox\_lib mit „function not found" fehlschlägt, prüfe, ob du tatsächlich auf die benötigte Version aktualisiert hast oder ob das Skript die ältere API benötigt, die geändert wurde.
## ox\_lib mit QBOX verwenden
Die tiefste Integration gibt es mit [QBOX-Servern](/blog/best-qbox-scripts-2026). Da QBOX auf ox\_core aufgebaut ist (das von ox\_lib abhängt), ist die Bibliothek bereits initialisiert, bevor andere Ressourcen starten. Du erhältst:
* Null Konfiguration: ox\_lib initialisiert sich automatisch als Teil des Framework-Starts
* Garantierte Versionskompatibilität: QBOX pinnt auf eine getestete ox\_lib-Version
* Native Callbacks: Das QBOX-Callback-System verwendet ox\_lib intern
* Einheitliche UI: Alle QBOX-nativen Skripte teilen das gleiche ox\_lib-UI-Theme
Wenn du von QBCore zu QBOX migrierst, lies den [QBCore zu QBOX Migrationsguide](/blog/qbcore-to-qbox-migration-guide) – die ox\_lib-Kompatibilität ist einer der reibungslosesten Teile dieser Migration. Und für die Wahl des richtigen Inventarsystems, das mit ox\_lib gepaart werden soll, sieh unseren [besten FiveM Inventar-Skripte Guide](/blog/best-fivem-inventory-scripts).
Für den vollständigen Framework-Vergleich, der zeigt, wie ox\_lib in jedes Ökosystem passt, lies unseren [ESX vs QBCore vs QBOX technischen Vergleich](/blog/esx-vs-qbcore-vs-qbox-technical-framework-comparison-2026).
Für weitere Skript-Empfehlungen und Server-Einrichtungsguides, sieh unseren [vollständigen FiveM-Skripte-Guide](/blog/fivem-scripts-complete-guide) oder durchsuche unseren [Marktplatz](/shop).

