How to Make a DarkRP Server in Garry's Mod: Setup Guide

By Matthew Zhao|
Garry's ModGuides

To make a DarkRP server, install the Garry's Mod dedicated server, add the DarkRP gamemode (from the Steam Workshop or GitHub), and start the server with +gamemode darkrp and a map. Then put the darkrpmodification addon in your addons folder and do all of your custom jobs, entities, shipments and settings there, never in DarkRP's own files.

The rest of this guide covers each step in order: the install, the startup line, Workshop collections, getting content to players, admin mods, basic config, and the errors new DarkRP owners run into most.

What you need before you start

  • A Garry's Mod dedicated server. You install it with SteamCMD using app ID 4020, as described in the Facepunch wiki's dedicated server guide. Windows and Linux are supported. macOS dedicated servers are no longer shipped.
  • A Game Server Login Token (GSLT). The wiki calls this mandatory and says servers without one are penalized in server list ranking. You create it at steamcommunity.com/dev/managegameservers with App ID 4000, and each server needs its own token (Steam Game Server Accounts).
  • A Steam Workshop collection (optional, but it makes everything else easier).

If you're on a hosted server, the first two steps are usually done for you. On EZ Game Host, the Garry's Mod server hosting panel gives you full file access, so the folder paths below apply as written.

Step 1: Install the DarkRP gamemode

DarkRP's official GitHub README says to get it from either git or the Workshop, and calls manual downloads "possible, but not recommended."

Option A: Steam Workshop (simplest)

Add the DarkRP Workshop item (ID 248302805) to your server's Workshop collection (see Step 3). DarkRP's darkrp.txt file declares that same workshopid, and the Facepunch wiki notes that when the active gamemode sets a workshopid and is in your collection, the server marks it for client download automatically (Workshop for Dedicated Servers). Players get the content without any extra setup.

Option B: Git

Clone the repo into your gamemodes folder so the folder is named darkrp:

cd garrysmod/gamemodes
git clone https://github.com/FPtje/DarkRP.git darkrp

The gamemode name you pass at startup is the folder name inside garrysmod/gamemodes/ (or the gamemodes/ folder of an addon), per the Facepunch wiki. With this layout, that name is darkrp.

Don't edit DarkRP's core files

The README is direct about it: "Just whatever you do, don't touch DarkRP's core files." The DarkRP wiki adds "Not even the config folder," and gives the reasons: you can't update anymore, and support is dropped once you've edited them. Every change goes in the modification addon instead (Step 5).

Step 2: Set the gamemode and map in the startup line

Both are command line parameters. A Windows example:

srcds.exe -console +maxplayers 32 +gamemode darkrp +map gm_construct +host_workshop_collection 123456789 +sv_setsteamaccount YOURTOKEN

On Linux, the wiki's examples use srcds_run:

./srcds_run -game garrysmod +maxplayers 32 +gamemode darkrp +map gm_construct +host_workshop_collection 123456789 +sv_setsteamaccount YOURTOKEN

What each part does:

Parameter Purpose
+maxplayers 32 Player slots
+gamemode darkrp Gamemode folder name
+map gm_construct Map file name without .bsp
+host_workshop_collection Your collection ID
+sv_setsteamaccount Your GSLT

gm_construct is a stock map and a good first test boot. Once DarkRP loads, swap in the roleplay map you want. For a Workshop map, the wiki says to check the addon's Workshop page description for the map file name. To change maps on a running server, use changelevel <mapname>.

If you want to keep the server out of the browser while you build, add +hide_server 1.

Step 3: Add a Steam Workshop collection

A Workshop collection lets the server download and mount addons at startup. Per the Facepunch wiki:

  1. Create a collection on the Garry's Mod Workshop. It must be public or unlisted, or the server can't read it.
  2. Add your addons: DarkRP, your map, ULX and ULib (Step 6), and anything else that's on the Workshop. Collections can be nested, and the server downloads sub-collections too.
  3. Copy the collection ID from the collection's URL.
  4. Add +host_workshop_collection <ID> to the startup line and restart.

Every restart, the server checks that the addons are up to date. You can turn that off with host_workshop_autoupdate 0. The wiki lists the tradeoff: it protects you from an addon update that adds unwanted changes, but if a map updates and your server is still on the old version, players can have trouble joining.

As of Garry's Mod version 2026.09.22, you can also list Workshop IDs in a file at cfg/srcds_workshop_ids.txt instead of (or as well as) using a collection:

"my_workshop_addons"
{
	"1"	{ "wsid" "557962238" }
	"2"	{ "wsid" "557962280" }
}

What about the Steam Web API key?

Many older tutorials tell you to add a Steam Web API key with -authkey for Workshop collections to work. The current Facepunch wiki page for Workshop on dedicated servers doesn't list that step, and we couldn't find an official source that settles whether it's still required. If your collection doesn't download, read the console output at startup, confirm the collection is public or unlisted, and check your host's documentation before adding a key.

Step 4: FastDL vs. Workshop downloads for players

Your server having an addon doesn't mean players have it. Lua files are sent automatically, but content (models, materials, sounds, maps) has to be served. The Facepunch wiki's Serving Content page compares the options:

Method How it works Speed Setup
WorkshopDL Players download from Steam Workshop As fast as the client can download, up to about 2 GB per GMA resource.AddWorkshop("<id>") in a server-side Lua file
FastDL Players download from your web server over HTTP As fast as the client can download, but file by file A web server, sv_downloadurl, and resource.AddFile
ServerDL Players download from the game server itself Limited to 64 kb/s sv_allowdownload 1 and resource.AddFile

For most DarkRP servers, Workshop downloads are the practical choice. If an addon in your collection shows up as errors for players, add a server-side file such as garrysmod/lua/autorun/server/workshop.lua with one line per addon:

resource.AddWorkshop("150455514")

A few rules from the wiki:

  • Only add addons that contain content. Lua-only addons don't need this and just slow joins. The wiki warns against generator sites that add every addon in a collection.
  • resource.AddWorkshop takes an addon ID, not a collection ID.
  • There's an 8,192 file limit shared across all resource.Add* calls.
  • Your map and a Workshop gamemode are marked for download automatically if they're in your collection.

FastDL still has a place for custom content you don't want on the Workshop. Clients request a .bz2 compressed copy first, then the plain file. The catch: FastDL doesn't check file contents, so updating a file on the server won't make clients download the new version. Avoid ServerDL. Besides being slow, the wiki warns that sv_allowdownload lets modified clients spam file requests and lag the server.

Step 5: Configure DarkRP with darkrpmodification

The darkrpmodification addon is where every DarkRP change goes. Download it and put its contents into a folder in garrysmod/addons/, so you end up with a path like garrysmod/addons/darkrpmodification/lua/darkrp_customthings/jobs.lua. The README notes the folder should only contain text files.

The files you'll use most:

File What it controls
lua/darkrp_config/settings.lua All DarkRP settings, like starting money and salaries
lua/darkrp_config/disabled_defaults.lua Turn off default jobs, entities, shipments and modules
lua/darkrp_customthings/jobs.lua Custom jobs
lua/darkrp_customthings/entities.lua Buyable entities (printers, labs)
lua/darkrp_customthings/shipments.lua Shipments and single guns
lua/darkrp_customthings/categories.lua F4 menu categories

Settings

settings.lua lists every option with a comment above it. A few you'll likely touch:

GM.Config.startingmoney = 500
GM.Config.normalsalary  = 45

The file's header says that if a setting is missing (after an update, for example), DarkRP uses the default value.

Adding a job

Add jobs below the marked line in jobs.lua. This follows the same format as DarkRP's built-in jobs:

TEAM_BARTENDER = DarkRP.createJob("Bartender", {
    color = Color(150, 90, 20, 255),
    model = {"models/player/Group01/male_07.mdl"},
    description = [[Run the bar and keep the drinks coming.]],
    weapons = {},
    command = "bartender",
    max = 2,
    salary = GAMEMODE.Config.normalsalary,
    admin = 0,
    vote = false,
    hasLicense = false,
    category = "Citizens",
})

admin is 0 for anyone, 1 for admins only, and 2 for superadmins only. The category must already exist, or DarkRP throws an error (CustomJobFields). "Citizens" is one of the defaults.

Editing a default job

To change a built-in job (say, the medic), first disable it in disabled_defaults.lua by setting it to true, then copy it from DarkRP's jobrelated.lua into your jobs.lua and edit the copy. The comments in disabled_defaults.lua warn that if you disable and remake a job, things that relied on it (shipments, door groups) need updating to include your new version.

Entities and shipments

Entities go in entities.lua:

DarkRP.createEntity("Ammo crate", {
    ent = "your_entity_class",
    model = "models/Items/ammocrate_smg1.mdl",
    price = 300,
    max = 1,
    cmd = "buyammocrate",
    allowed = {TEAM_GUN},
})

Shipments go in shipments.lua:

DarkRP.createShipment("Example rifle", {
    model = "models/weapons/w_rif_ak47.mdl",
    entity = "your_weapon_class",
    price = 2500,
    amount = 10,
    separate = false,
    pricesep = nil,
    noship = false,
    allowed = {TEAM_GUN},
    category = "Rifles",
})

Replace your_entity_class and your_weapon_class with the class names from the addon you're selling. The full field lists are on the DarkRP wiki's entity and shipment pages.

Step 6: Add an admin mod (ULX and ULib)

DarkRP ships with its own admin module, FAdmin (you'll see it in the modules list in disabled_defaults.lua). Many servers add ULX as well, which provides multiple admin groups and commands like kick, ban, freeze and voting.

ULX needs ULib. Install both:

  • Workshop: add ULib (557962238) and ULX (557962280) to your collection.
  • Manual: extract both into garrysmod/addons/.

Both READMEs say you need a full server restart after installing. A map change isn't enough.

To make yourself superadmin, use the ulx adduser command, for example from the server console:

ulx adduser "YourName" superadmin

After that, ulx menu opens the GUI in game, and chat commands use !, for example !menu.

Common problems and how to fix them

Missing textures and ERROR models

This means players don't have the content. Check, in order:

  1. Is the addon in your collection? If not, the server doesn't have it either.
  2. Is it marked for download? Add resource.AddWorkshop for each content addon (Step 4). Maps and Workshop gamemodes from the collection are handled automatically.
  3. Does the addon need other content? Check its Workshop page for listed requirements.
  4. Did a job set a model players don't have? The DarkRP wiki notes an ERROR shows if the client doesn't have the job's model.

Also remember that players can limit which downloads they accept in their game settings, per the wiki.

Lua errors

The Facepunch wiki's Lua error guide explains the format: the first line gives the file path, the line number, and the error. Server-side errors print in blue, client-side errors in yellow. Errors halt the script that hits them, which is why one typo can make a whole feature vanish.

In DarkRP configs, the most common cause is a syntax mistake in a createJob or createShipment table:

  • '}' expected near ...: often a missing comma after a table item.
  • unexpected symbol near ...: unclosed brackets or a stray character.
  • attempt to index global ... (a nil value): you used a variable that isn't defined, often a misspelled name.

Read the file path in the error. If it points into your darkrpmodification folder, the bug is in your config. If it points into another addon, test by removing that addon.

The server fails to start or shows "Steam error code 6"

The GSLT page says an invalid or expired token prevents the server from starting, and changing your Steam password invalidates all your tokens. The "Connection to Steam servers lost (Steam error code 6)" message is usually the same token being used on two servers.

Hosting your Garry's Mod server with EZ Game Host

The Facepunch wiki pages above don't publish official RAM or CPU requirements for a DarkRP server, so size your plan by player count and how many addons you run. On EZ Game Host, the Standard plan is the one that lists "DarkRP ready" and "Workshop collections"; Basic lists Sandbox/TTT. Plans include DDoS protection, ULX admin support, and a 99.9% monthly uptime SLA. If you're new to the panel, start with getting started.

These are advertised allocations as of October 12, 2026:

Plan Price RAM CPU Players Storage
Basic $12/mo 4 GB 1 thread 16 40 GB NVMe
Standard $24/mo 8 GB 2 threads 48 40 GB NVMe
Pro $48/mo 16 GB 4 threads 100 80 GB NVMe

See the full feature list on the Garry's Mod plans page. For why DDoS protection matters on public servers, see DDoS protection for game servers.

FAQ

How do I make a DarkRP server for free?

You can run the Garry's Mod dedicated server on your own PC at no cost. Install it with SteamCMD (app 4020), add DarkRP, and start it with +gamemode darkrp. The tradeoff is that your PC has to stay on, and you'll need to handle port forwarding and updates yourself.

Can I edit DarkRP's config folder directly?

No. The DarkRP wiki says not to edit any core files, "not even the config folder," because you lose the ability to update and lose developer support. Put settings in darkrp_config/settings.lua inside the darkrpmodification addon.

Why don't my new jobs show up?

Often a Lua error in jobs.lua stops it from loading. Check the server console for an error pointing to that file, and check that the job's category exists.

Do players need to download DarkRP?

If DarkRP is in your Workshop collection, the server marks it for client download automatically, because DarkRP's darkrp.txt declares its Workshop ID. Players download it when they join.

Is ULX required for DarkRP?

No. DarkRP includes FAdmin. ULX is a popular addition for its group permissions and command set, and it needs ULib installed alongside it.

🍪 Cookie Notice

We use cookies to enhance your browsing experience, analyze site traffic, and personalize content. By clicking “Accept”, you consent to our use of cookies. Read our Privacy Policy to learn more.