
- ESX
- QBCore
- vRP
Por Luke

FiveM es compatible oficialmente con Lua, JavaScript y C#. Elige el entorno de ejecución que se adapte a tu framework, las habilidades de tu equipo y las bibliotecas necesarias, no una supuesta clasificación de rendimiento universal. Los tres pueden llamar a las funciones nativas de FiveM, manejar eventos y exponer API de recursos. Las diferencias prácticas son el límite del entorno de ejecución, el ecosistema de paquetes, el flujo de trabajo de compilación y el código ya utilizado por tus dependencias.
Los ejemplos de configuración y código aquí están dirigidos a FiveM para GTA V Legacy. Enhanced tiene diferentes reglas de tiempo de ejecución y compatibilidad; consulta los cambios de Legacy a Enhanced de Cfx.re antes de aplicarlos a un servidor Enhanced.
| Entorno de ejecución | Buena opción | Límite importante | Flujo de trabajo típico |
|---|---|---|---|
| Lua | Marcos Lua existentes, recursos compactos y ejemplos directos de FiveM | CfxLua es un entorno de ejecución Lua 5.4 modificado, no una instalación Lua de sistema arbitraria | Edita los archivos fuente y cárgalos a través del manifiesto de recursos |
| JavaScript | Equipos que utilizan herramientas JavaScript/TypeScript y npm | Los scripts de cliente no reciben APIs de navegador o Node.js; los scripts de servidor usan el entorno de ejecución de Node de FiveM | Ejecuta la fuente directamente o compila/agrupa TypeScript en JavaScript listado en el manifiesto |
| C# | Equipos .NET, código de dominio tipado y proyectos compilados | El recurso debe enviar los ensamblados y archivos esperados por el entorno de ejecución de Cfx.re | Compila a partir de una plantilla de Cfx.re y después despliega los archivos generados. |
Cfx.re documenta CfxLua como un entorno de ejecución modificado de Lua 5.4. Eso importa cuando comparas el código de FiveM con tutoriales antiguos de Lua: las características del lenguaje y el comportamiento del entorno de ejecución deben verificarse con CfxLua, no inferirse del paquete del sistema operativo de un servidor.
Lua suele ser la opción menos disruptiva cuando el framework y los recursos vecinos ya están escritos en Lua. Puedes mantener eventos, exportaciones y configuración compartida en el mismo lenguaje y evitar agregar un paso de compilación solo por estilo. Un pequeño manifiesto puede listar scripts de cliente, servidor y compartidos separados. Mantén los secretos y las comprobaciones de autoridad solo del servidor fuera de los archivos del cliente, incluso cuando ambos lados usen Lua.
La sintaxis corta facilita el escaneo de los manejadores de eventos, pero no reemplaza el diseño de la interfaz. Documenta cada carga útil de evento, valida los valores en el servidor y evita tratar un evento de cliente como prueba de que el dinero, el inventario o los permisos son válidos.
La guía oficial Guía de entorno de ejecución de JavaScript describe el soporte de ES2017 y una división crítica cliente/servidor. Los scripts de cliente se ejecutan en el entorno de ejecución del cliente de FiveM y no tienen APIs de navegador o Node.js. Los scripts de servidor usan un entorno de ejecución de Node.js personalizado. Para el entorno de ejecución Legacy, el valor predeterminado documentado del servidor es Node.js 16; un recurso puede optar por Node.js 22 con node_version '22' en fxmanifest.lua.
No asumas que un paquete que funciona en un proyecto Node ordinario también funciona en un script de cliente FiveM. Coloca las dependencias de sistema de archivos, base de datos y npm del lado del servidor en el límite del servidor. Para las definiciones de editor y TypeScript, Cfx.re publica los @citizenfx/client y @citizenfx/server paquetes. Mejoran la verificación de tipos, pero no otorgan APIs que el tiempo de ejecución seleccionado carece.
FiveM también documenta las restricciones de afinidad de subprocesos para algunas llamadas nativas del lado del servidor. Cuando el código asíncrono de Node necesite volver al hilo principal del juego, sigue la guía de entorno de ejecución y usa setImmediate donde sea necesario. Prueba el JavaScript compilado que realmente implementas, incluidos los mapas de origen y el orden de inicio, en lugar de solo el código fuente TypeScript.
El Documentación de entorno de ejecución de C# proporciona plantillas de proyectos actuales y guía de compilación. Comienza allí en lugar de copiar un diseño de ensamblado antiguo de una aplicación .NET no relacionada. Un recurso C# normalmente tiene un proyecto que hace referencia a los ensamblados CitizenFX compatibles, compila su código y coloca los archivos resultantes donde el manifiesto puede cargarlos.
C# puede ser una buena opción cuando el equipo ya utiliza tipos, herramientas y prácticas de prueba de .NET. La contrapartida es operativa: los colaboradores y la CI necesitan el SDK y el comando de compilación correctos, y el artefacto implementado debe permanecer sincronizado con su origen. Registra la plantilla, el marco de destino y el proceso de lanzamiento en el repositorio para que una actualización del servidor sea reproducible.
La elección del lenguaje no cambia el contrato del recurso. Cada recurso necesita un fxmanifest.lua que declara metadatos y los archivos a cargar. El código del cliente se ejecuta para los jugadores conectados; el código del servidor se ejecuta bajo FXServer. Los archivos compartidos se entregan a ambas partes, por lo que no deben contener credenciales ni decisiones de confianza solo del servidor.
Un servidor de lenguaje mixto es normal. El límite estable es el evento o la exportación documentados, no el lenguaje de implementación detrás de ellos. Esto hace posible reemplazar un recurso sin reescribir toda la pila.
No hay ninguna razón basada en la evidencia para considerar que uno de los tres lenguajes de programación de FiveM sea siempre el más rápido o el más popular para todos los recursos. Selecciona Lua, JavaScript/TypeScript o C# según las características documentadas que admite su entorno de ejecución, el framework que lo rodea y el coste de mantenimiento que tu equipo realmente pueda asumir.
Enhanced cambia el entorno de ejecución de JavaScript y C# y algunos comportamientos de la plataforma. Utiliza la documentación de la edición exacta de cliente/servidor en lugar de aplicar suposiciones de Legacy Node o Mono. Reconstruye y prueba las dependencias contra ese entorno.





