DarkRP's F4 menu lists every job a player could take. Hiding a job from players who should not see it is done in the job's own definition, or by switching the job off altogether. This guide covers the options DarkRP itself provides. Checked against DarkRP 2.7.0 (GitHub source, July 2026), October 2026.
You need the full darkrpmodification addon for these edits, because jobs live in its jobs.lua. If it is not on the server yet, follow Install DarkRP modifications on GMod first. All files below are under garrysmod/addons/darkrpmodification/lua/, and you edit them in the File Manager.
Hide a job from players who cannot take it
Add a condition to the job in darkrp_customthings/jobs.lua. A job's customCheck is a function that gets the player and returns true or false. When it returns false, the player cannot take the job, and DarkRP's F4 menu does not show it to them by default. The same goes for a job that needs a different job first (NeedToChangeFrom) and for admin gating. This example keeps a job for the donator usergroup and admins:
TEAM_VIPGUARD = DarkRP.createJob("VIP Guard", {
color = Color(255, 215, 0, 255),
model = "models/player/Group03/Female_01.mdl",
description = [[You guard the VIPs.]],
weapons = {"weapon_fists"},
command = "vipguard",
max = 2,
salary = 90,
admin = 0,
vote = false,
hasLicense = false,
customCheck = function(ply) return ply:GetUserGroup() == "donator" or ply:IsAdmin() end,
CustomCheckFailMsg = "This job is for donators.",
})The message in CustomCheckFailMsg appears when someone tries and fails to get the job. Usergroups come from your admin mod, so set them up with ULX and ULib admin commands for Garry's Mod first.
For a job only admins should see, you do not need a function: set admin = 1 for admins and above, or admin = 2 for superadmins only.
Hide a whole heading
A category is a heading in the F4 menu. In darkrp_customthings/categories.lua, a category can carry a canSee function, and the file's own comment describes it as deciding whether the player can see the category and everything in it:
DarkRP.createCategory{
name = "Staff Jobs",
categorises = "jobs",
startExpanded = true,
color = Color(0, 107, 0, 255),
canSee = function(ply) return ply:IsAdmin() end,
sortOrder = 100,
}Point the jobs at it with category = "Staff Jobs". The category has to exist, or DarkRP reports an error.
Remove a default job completely
To drop one of DarkRP's built-in jobs, open darkrp_config/disabled_defaults.lua and set its entry in the jobs list to true, for example ["hobo"] = true. Its own comment warns that if you disable a job and remake it, things that rely on the job stop working, such as shipments and door groups.
Hidden or grayed out
Two settings in darkrp_config/settings.lua shape the F4 menu:
GM.Config.hideTeamUnbuyableistrueby default. It is what hides items for a different job, or ones whosecustomChecksays no. If you set it tofalse, those jobs are grayed out instead of hidden.GM.Config.hideNonBuyableisfalseby default. Leave it that way for this purpose: in DarkRP 2.7.0 setting it totruehides every job button in the F4 menu, including the ones a player can take.
A job that is full (its max is reached) is grayed out, not hidden, unless hideNonBuyable is true.
Apply the change
Save the file and restart the server from the dashboard, because DarkRP reads its files as it starts.
If your server uses an addon that replaces DarkRP's F4 menu, that addon draws its own job list. Check its documentation for hiding jobs.
Related guides

Restrict Prop Spawning to DarkRP Jobs
Let only chosen DarkRP jobs spawn props with a short PlayerSpawnProp module, plus the settings to switch prop spawning off or charge for it.
3 min read
Host a Star Wars RP Server on GMod
Build a Star Wars roleplay server on DarkRP: Workshop content, your own whitelisted jobs and ranks, and the settings that suit a themed city.
3 min read
Remove the DarkRP /advert Billboard
Stop players placing /advert billboards by setting the limit to zero in settings.lua, or block the command with your own message using the canAdvert hook.
3 min read