1 RAGE:MP, and how it differs from FiveM

RAGE Multiplayer is a multiplayer modification for Grand Theft Auto V — its own client, its own server browser, its own scripting API. It is not FiveM and the two aren't compatible: a player needs the matching client for whichever one you run, and a script written for one won't run on the other.

The practical differences when you're choosing:

RAGE:MPFiveM
ScriptingJavaScript on Node.js by default; C# via a bridge pluginLua, JavaScript, C#
Configconf.jsonserver.cfg
Resource folderspackages/ + client_packages/one resources/ tree with fxmanifest.lua
Default port22005 (+22006 HTTP)30120
EcosystemSmaller — fewer ready-made scriptsMuch larger, most RP frameworks target it

The honest summary: FiveM has far more off-the-shelf content, so if you want a roleplay server assembled from existing resources, that's the easier road. RAGE:MP appeals if you're writing your own systems in JavaScript and want a less crowded browser to stand out in. Both need GTA V — players must own a legitimate copy.

2 Get the server files

Linux

One command pulls the current server build and unpacks it into a ragemp-srv folder:

wget https://cdn.rage.mp/updater/prerelease/server-files/linux_x64.tar.gz
tar -xzf linux_x64.tar.gz
cd ragemp-srv
./ragemp-server

Windows

The Windows server files come out of the client updater, which is unintuitive the first time:

  1. Install the RAGE Multiplayer client.
  2. Open RAGEMP/config.xml and change prerelease to prerelease_server.
  3. Run updater.exe — it downloads the server build instead of the client one.
  4. Copy the server_files folder somewhere sensible.
  5. Change config.xml back to prerelease and run the updater again, or your client will be broken.

Start it with ragemp-server.exe.

On a hosting panel? You'll usually get the server files already in place, with the console and file manager pointed at the right folder — skip to the configuration step. Our Pterodactyl tips guide covers the panel side.

3 What's in the folder

ragemp-srv/
├── conf.json           ← all server configuration
├── ragemp-server       ← the executable (.exe on Windows)
├── packages/           ← SERVER-side scripts
├── client_packages/    ← CLIENT-side scripts and UI
├── maps/               ← map files, JSON format
└── plugins/            ← .dll plugins (C# bridge lives here)

The split between packages/ and client_packages/ is the thing to internalise early. Server-side logic — player data, money, jobs, anything a player must not be able to edit — goes in packages/ and never leaves the server. Anything in client_packages/ is downloaded to the player's machine, so treat it as public: no secrets, no database credentials, no trust.

4 conf.json — the settings that matter

A minimal working config for a public server:

{
    "announce": true,
    "bind": "0.0.0.0",
    "name": "My RAGE:MP Server [RP]",
    "gamemode": "freeroam",
    "maxplayers": 100,
    "port": 22005,
    "stream-distance": 500.0,
    "language": "us",
    "url": "yoursite.com"
}
KeyDefaultWhat it does
announcefalseTells the master server you exist. Must be true or nobody sees you.
bind127.0.0.1Which IP to listen on. Must be 0.0.0.0 for anyone outside the machine to connect.
port22005UDP and TCP. The HTTP download port is this +1.
maxplayers100Slot count. Your CPU is the real limit, not this number.
nameRAGE:MP Unofficial serverBrowser name. Square brackets mark tags.
gamemodeFreeroamThe mode shown in the browser filter.
stream-distance500.0How far entities stream in. Lowering it cuts bandwidth and CPU on busy servers.
sync-rate40Sync interval in ms. Lower is smoother and more expensive.
enable-nodejstrueNode.js server-side scripting. Leave it on unless you're pure C#.
csharpdisabledSet true if you're using the C# bridge plugin.
enable-http-securityfalseExtra layer against flooding. Worth turning on for a public server.
disallow-multiple-connections-per-ipfalseBlocks multiple clients from one IP. Useful against basic alt spam, annoying for households.
fastdl-hostServe client packages from an external URL instead of your server.
voice-chatBuilt-in voice. Sample rate must be 8000, 16000, 24000 or 48000.
conf.json is strict JSON. One trailing comma and the server refuses to start, usually with an error that doesn't point at the line. If it won't boot after an edit, paste the file into any JSON validator first — that's the problem more often than not.

5 Ports — open both of them

  • 22005 — UDP and TCP. The game connection itself.
  • 22006 — HTTP. Delivers client_packages to joining players.

Open only 22005 and you get the classic symptom: players connect, the loading screen appears, and then it sits there forever while the client silently fails to download resources. If your server "accepts people but never loads them in", check 22006 before you touch anything else.

6 Your first package

Each folder inside packages/ is a resource, and RAGE:MP runs its index.js on startup. Create packages/mygamemode/index.js:

// packages/mygamemode/index.js  — runs on the SERVER
mp.events.add('playerJoin', (player) => {
    console.log(`${player.name} joined`);
    player.outputChatBox('!{4ade80}Welcome to the server.');
});

mp.events.add('playerChat', (player, message) => {
    mp.players.broadcast(`${player.name}: ${message}`);
});

And the client side, in client_packages/index.js:

// client_packages/index.js — runs on the PLAYER'S machine
mp.events.add('render', () => {
    mp.game.graphics.drawText('My Server', [0.5, 0.05], {
        font: 4, colour: [255, 255, 255, 185],
        outline: true, scale: [0.4, 0.4]
    });
});

Restart the server — RAGE:MP loads packages at startup, so a file change needs a restart to take effect.

7 When it doesn't work

  • Server isn't in the browserannounce is still false, or bind is still 127.0.0.1. Fix both, restart, wait a minute for the master list.
  • Players connect then hang on loading → port 22006 is closed. This is the single most common RAGE:MP support ticket.
  • Server won't start at all after an edit → malformed conf.json. Validate the JSON.
  • Scripts do nothing → wrong folder. Server logic must be in packages/<name>/index.js; client code in client_packages/. Also confirm you restarted rather than just saved.
  • Only you can join → you're testing on 127.0.0.1 and it works locally because bind is local. Same fix as the first point.
  • Stutter with plenty of CPU headroom → look at sync-rate and stream-distance before you buy more cores. GTA V multiplayer is single-thread bound; total core count rarely helps.

RAGE:MP hosting with both ports already open

22005 and 22006 configured from the start, full file manager and SFTP for packages/, a live console, and high-clock CPUs with NVMe — which is what GTA V multiplayer actually needs. DDoS protection and instant setup included.

View RAGE:MP hosting

8 Quick recap

  1. Linux: wget the server files and run ./ragemp-server. Windows: pull them through the client updater.
  2. Server code in packages/, client code in client_packages/ — the second one is public.
  3. Set announce: true and bind: "0.0.0.0" or your server is invisible and unreachable.
  4. Open 22005 (UDP + TCP) and 22006 (HTTP).
  5. conf.json is strict JSON — validate it when the server won't boot.
  6. Restart after script changes; packages load at startup.

9 FAQ

What port does a RAGE:MP server use?

22005 on UDP and TCP, plus 22006 over HTTP for client package downloads. Open both.

Why doesn't my RAGE:MP server show in the server list?

announce defaults to false and bind defaults to 127.0.0.1. Set them to true and 0.0.0.0, restart, and give the master list a minute.

Is RAGE:MP the same as FiveM?

No — separate clients, separate APIs, separate browsers, not compatible. FiveM has a much bigger script ecosystem; RAGE:MP is JavaScript-first and less crowded.

Do players need to own GTA V?

Yes, a legitimate copy plus the RAGE Multiplayer client.

What language do I script in?

JavaScript on Node.js by default. C# works through the bridge plugin with csharp set to true.

How many players can it hold?

maxplayers defaults to 100, but your CPU's single-thread speed is the real ceiling, not the number in the config.