Coming from FiveM
Welcome, FiveM developer! If you've been building servers, scripts, or full RP frameworks on FiveM, you'll feel right at home on HELIX. This guide walks you through every major difference so you can hit the ground running.
Why Switch?
| FiveM | HELIX | |
|---|---|---|
| Engine | Modified RAGE (GTA V) | Unreal Engine 5 |
| Graphics | Limited to GTA V visuals | Nanite, Lumen, full UE5 pipeline |
| Map Creation | YMAP / CodeWalker | HELIX Studio (full UE5 editor) |
| Scripting | Lua, C#, JavaScript | Lua (UnLua), Blueprint, JavaScript |
| Monetization | Tebex / custom | Built-in LIX economy |
| Hosting | txAdmin / self-host | Instant Hosting (one-click) or self-host |
| Anti-cheat | Third-party / custom | Built-in server-authoritative |
HELIX gives you a purpose-built multiplayer sandbox on a modern engine without the legal gray areas of modding a commercial game.
Resources vs Packages
In FiveM, your code lives in resources with a fxmanifest.lua at the root. In HELIX, the equivalent is a package defined by a package.json file.
| FiveM | HELIX |
|---|---|
fxmanifest.lua | package.json |
server.cfg | Config.json |
resources/ folder | packages/ folder |
ensure my-resource | Packages auto-load or toggle in Config |
Here's what a typical package.json looks like compared to fxmanifest.lua:
- Blueprint
- Lua
- JavaScript
// Blueprint packages are configured through HELIX Studio.
// No manifest file needed -- add your package via
// Content Browser > New Package and configure dependencies
// in the editor.
-- FiveM fxmanifest.lua (old way)
fx_version 'cerulean'
game 'gta5'
client_scripts { 'client.lua' }
server_scripts { 'server.lua' }
-- HELIX package.json (new way)
-- {
-- "name": "my-package",
-- "type": "script",
-- "version": "1.0.0",
-- "client_scripts": ["client.lua"],
-- "server_scripts": ["server.lua"]
-- }
// HELIX package.json
// {
// "name": "my-package",
// "type": "script",
// "version": "1.0.0",
// "client_scripts": ["client.js"],
// "server_scripts": ["server.js"]
// }
API Comparison Table
This is the big one. Here's how common FiveM natives map to HELIX APIs:
| FiveM Native / Function | HELIX Equivalent | Notes |
|---|---|---|
PlayerPedID() | Client.GetLocalPlayer():GetControlledCharacter() | Returns the local character pawn |
SetEntityCoords(ped, x, y, z) | ped:SetLocation(Vector(x, y, z)) | Uses Vector() instead of vector3() |
TaskPlayAnim(ped, dict, name, ...) | ped:PlayAnimation(path) | No anim dict loading needed |
FreezeEntityPosition(ped, true) | ped:SetInputEnabled(false) | Disables player input |
DeleteEntity(entity) | actor:Destroy() | Works on any Actor |
DropPlayer(src, reason) | player:Kick(reason) | Server-side only |
SetNuiFocus(true, true) | Input.SetInputEnabled(false) | Toggles game input for UI |
SendNUIMessage(data) | WebUI:CallFunction(name, args) | Direct function calls |
SetTimeout(ms, cb) | Timer.SetTimeout(cb, ms) | Note: callback is the first argument |
vector3(x, y, z) | Vector(x, y, z) | HELIX uses Vector globally |
Networking: Events
FiveM uses TriggerServerEvent / TriggerClientEvent with string-based event names. HELIX Lua uses the same global function names with a similar pattern. HELIX JavaScript uses an endpoint/call model instead:
- Blueprint
- Lua
- JavaScript
// Use the "Call Remote Event" and "Subscribe to Remote Event" nodes
// in Blueprint to send and receive events between client and server.
-- FiveM (client -> server)
TriggerServerEvent('myEvent', data)
-- HELIX (client -> server) -- same function name!
TriggerServerEvent('myEvent', data)
-- FiveM (server -> client)
TriggerClientEvent('myEvent', source, data)
-- HELIX (server -> client) -- controller instead of source
TriggerClientEvent(controller, 'myEvent', data)
-- FiveM (subscribe on server)
RegisterNetEvent('myEvent', function(data) end)
-- HELIX (subscribe on server) -- controller passed as first arg
RegisterServerEvent('myEvent', function(controller, data) end)
-- HELIX (subscribe on client)
RegisterClientEvent('myEvent', function(data) end)
-- HELIX (broadcast to all clients from server)
BroadcastEvent('myEvent', data)
// HELIX JS uses an endpoint/call model instead of events
// Server: register an endpoint
Helix.server(async () => {
Helix.endpoint('myModule:getData', async (helixId) => {
const data = await loadData(helixId);
return data;
});
});
// Client: call the endpoint
const id = Helix.Player.helixId();
const result = await Helix.call('myModule:getData', id.toString());
One key difference: HELIX events are server-authoritative by default. The server validates everything, which means way less anti-cheat headache for you.
NUI vs WebUI
FiveM's NUI system lets you load HTML/CSS/JS interfaces in-game. HELIX has WebUI, which does the same thing but with a dedicated event system instead of message passing.
| FiveM NUI | HELIX WebUI |
|---|---|
SendNUIMessage({ type: 'show' }) | WebUI:CallFunction('show', data) |
RegisterNUICallback('action', cb) | WebUI:Subscribe('action', cb) |
SetNuiFocus(true, true) | Input.SetInputEnabled(false) |
Load via ui_page 'index.html' in manifest | Load via WebUI('id', 'path/to/index.html', zOrder) |
No more fiddling with SetNuiFocus cursor states -- Input.SetInputEnabled and Input.SetMouseEnabled handle input toggling cleanly.
Server Setup
| FiveM | HELIX |
|---|---|
| Download artifacts + cfx-server-data | Download HELIX Server or use Instant Hosting |
Configure server.cfg | Configure Config.json |
| Manage with txAdmin | Built-in web dashboard or CLI |
| Port forward 30120 | Port forward 7777 (default) |
ensure resource-name | Packages load automatically from packages/ |
Instant Hosting is HELIX's one-click server deployment. No VPS setup, no txAdmin configuration -- pick your region, upload your packages, and you're live. You can always switch to self-hosting later.
Quick Start Checklist
- Install HELIX from the official site and launch HELIX Studio
- Create a new package -- this replaces your FiveM resource folder
- Port your Lua scripts using the API comparison table above
- Replace NUI with WebUI -- your HTML/CSS stays the same, update the JS bridge
- Update your events -- HELIX Lua uses the same
TriggerServerEvent/TriggerClientEventnames, butRegisterServerEvent/RegisterClientEventinstead ofRegisterNetEvent - Test locally with the built-in local server
- Deploy via Instant Hosting or your own server
If you're running QBCore on FiveM, check out the QBCore on HELIX section -- it's been ported and ready to use.