Skip to main content

Coming From FiveM (GTA)

Welcome FiveM developers! ๐Ÿ‘‹

Discover why developing in HELIX is a game-changer โ€” and how it improves on what you're used to in FiveM. Let's explore the key differences.

Quick Links:

  • :fontawesome-solid-people-line: Built By Modders, For Modders
    HELIX isnโ€™t just a game โ€” itโ€™s a developer-first platform. Every tool, workflow, and system is designed with modders in mind, removing the friction and overhead youโ€™ve likely encountered before.

    Spend less time fighting limitations, and more time building what you love.

  • :material-unreal: Unreal Engine 5
    FiveM relies on GTA Vโ€™s legacy engine. HELIX is built natively on Unreal Engine 5, unlocking access to next-gen rendering, world-building, and performance features โ€” from Nanite and Lumen to Chaos physics and MetaSounds.

    This means greater creative freedom and a significantly more modern toolset.

  • :material-api: API Improvements
    HELIXโ€™s scripting layer offers a structured, class-based API โ€” familiar to Lua developers, but far more maintainable. Itโ€™s built for clarity, modularity, and future growth.

    Expect cleaner code, simpler event handling, and a scalable foundation for large or team-driven projects.

Structure and Modularityโ€‹

The overall structure of code in HELIX will feel familiar to FiveM developers โ€” but there are some key differences worth noting:

  • Manifest Files: FiveM uses fxmanifest.lua to define resource metadata. In HELIX, this is handled by a package.json file, following a more standardized and flexible format.

  • Resource Folders: Like FiveM, HELIX organizes scripts into folders. However, the folder structure is entirely customizable and defined in package.json, giving you more control over how your packages are structured.

  • Server Configuration: Instead of server.cfg, HELIX uses a Config.json file for server metadata and resource loading. The concept is similar but aligns with a modern JSON-based configuration approach.

Object and Class Handlingโ€‹

HELIX uses a class-based architecture for most of its core systems, offering a more structured and object-oriented approach to development. This design makes your code more organized, modular, and easier to maintain.

Below are some direct comparisons between how things are done in FiveM versus HELIX:

UIโ€‹

ExamplesFiveMHELIX
NUI FocusSetNuiFocus(enable_input, enable_mouse)Input.SetInputEnabled(enable_input)
Input.SetMouseEnabled(enable_mouse)
NUI MessageSendNUIMessage({action = "togglePhone", data = not isOpen })main_hud = WebUI("Phone", "file://ui/index.html")
main_hud:CallEvent("togglePhone", not isOpen)
NUI Eventwindow.addEventListener('message', function(event) { if (event.data.action === "togglePhone") {Events.Subscribe("togglePhone", function(bool) {

Playerโ€‹

ExamplesFiveMHELIX
Player KickDropPlayer(src, reason)my_player:Kick(reason)
Player NameGetPlayerName(src)my_player:GetAccountName()
Player Pedlocal ped = PlayerPedID()local player = Client.GetLocalPlayer()
local ped = player:GetControlledCharacter()

Character (ped)โ€‹

ExamplesFiveMHELIX
AnimationTaskPlayAnim()ped:PlayAnimation()
Set CoordsSetEntityCoords(ped, coords)ped:SetLocation(coords)
Get CoordsGetEntityCoords(ped)ped:GetLocation()
Set HeadingSetEntityHeading(ped, rotation)ped:SetRotation(0.0, rotation, 0.0)
Set ModelSetPlayerModel(ped, model)ped:SetMesh(skeletal_mesh_asset)
Freeze EntityFreezeEntityPosition(ped, bool)ped:SetInputEnabled(bool)
Input.SetInputEnabled(bool)
Get VehicleGetVehiclePedIsIn(ped)ped:GetVehicle()

Vehicleโ€‹

ExamplesFiveMHELIX
Spawnlocal my_veh = CreateVehicle(hash, x, y, z)local my_veh = HSimpleVehicle(location, rotation, blueprint_asset)
Door InteractionSetVehicleDoorShut / SetVehicleDoorOpenmy_veh:SetDoorState(Doorindex, NewState, Curvetype)
Get SpeedGetEntitySpeed(entity)my_veh::GetVehicleSpeed()

Utilitiesโ€‹

ExamplesFiveMHELIX
TimeoutSetTimeout(milliseconds, callback)Timer.SetTimeout(callback, milliseconds)
Vectorvector3(X, Y, Z)Vector(X, Y, Z)
HeadingintRotator(0.0, int, 0.0) (Rotator Yaw = Heading)
Entity DeleteDeleteEntity(entity)actor:Destroy()

Next Stepsโ€‹

โœจ