Garry's Mod
A sandbox game for the PC and Mac

Garry's Mod is a Sandbox Game based around the idea of building. Unlike most other games there aren't any objectives - you can't lose and you definitely can't win.




A minor update containing a few hotfixes for last update just came out. Restarting your servers is strongly recommended.
If there are any persisting issues left, please report them on the official GitHub issues page.

GLIBC_2.15 dependency on Linux dedicated servers

Some Linux dedicated server owners may have noticed that the game now requires glibc 2.15. This is a necessary change since the version we were using before was really outdated. If your server is running on a relatively old distro which does not include that library, you can find instructions on how to install it here: Linux Dedicated Server Hosting.

Fixed non-ASCII characters being removed from player names

This was accidentally introduced in an attempt to fix an exploit which would let servers tamper with a client’s configuration file, sorry for that! Everything should be back to normal now.

Fixed model scaling not working correctly on some models

Entity:SetModelScale and Entity:EnableMatrix had an issue with some models which would cause transformations to be applied twice. This issue is now fixed, you can see the difference below:

This will break scripts that rely on the old broken behaviour, so I also added Entity:SetLegacyTransform for those who want their current scripts fixed with minimal effort. This function basically brings the old scaling behaviour back for the entity it is called on, so it should be used exclusively as a temporary fix.

Full Changelog

  • FIX Fixed plugin_load not doing anything
  • FIX Fixed players being removed when sitting in a vehicle parented to another entity
  • FIX Fixed non-ASCII characters being removed from player names
  • FIX Fixed tabs in RichText selection
  • FIX Fixed properties not correctly working on vanilla
  • FIX Fixed Color.__tostring not outputting alpha
  • FIX Fixed render.CapturePixels crashing when used on render targets
  • FIX Fixed Weapon:CallOnClient crashing when called on a weapon owned by a NPC
  • FIX Fixed weapon holdtypes not always updating on the client
  • FIX Fixed player names not updating in scoreboard and voice panels
  • FIX Definitely fixed Entity:SetModelScale and Entity:EnableMatrix applying transformations twice on some models
  • NEW Added Entity:SetLegacyTransform(bool)
  • DEL Removed properties.HaloThink
  • DEL Removed _restart from blocked concommand list



A major update is coming in, so servers will need to be restarted before joining them as usual.

This update consists mostly of exploit fixes, various requested adjustments, and a few new Lua features for developers including extended support for AI navigation meshes, up to 64 DT vars of each type, and toggleable lag compensation for all entities.

Full Changelog

Game Changes

  • FIX Fixed item pickups not being collectable in some cases
  • FIX Fixed env_microphone not always transmitting NPC voices in multiplayer
  • FIX Fixed some textures on gm_construct having an incorrect normal map when running under DX8
  • FIX Fixed console crash on some machines
  • FIX Fixed another possible exploit with CNetChan::SendFile
  • FIX Fixed an exploit allowing access to any file on a client machine
  • FIX Fixed vehicle noclip exploit
  • FIX Fixed SMG viewmodel animation glitch when firing exactly 3 shots in a single burst
  • FIX Fixed inaccurate text selection in RichText controls
  • UPD Files with an incorrect extension can no longer be loaded as modules
  • UPD Loose .vcd files can now be loaded without having to be compiled into scenes.image


Community Contributions

Lua Scripting

  • FIX Fixed Entity:PhysicsFromMesh building a deformed collision mesh
  • FIX Fixed PhysicsCollide entity callback missing information about the entity which was collided with
  • FIX Fixed IMaterial:GetMatrix crashing the game
  • FIX Fixed sound.Add not working on dedicated servers
  • FIX Fixed ents.FindByClass not interpreting wildcards correctly
  • FIX Fixed util.CRC not working correctly on strings with embedded zeroes
  • FIX Fixed util.JSONToTable losing precision for large integer values
  • FIX Fixed Entity:GetBoneController returning a truncated value
  • FIX Fixed Entity:SetHitboxSet not working properly with an integer parameter
  • FIX Fixed NPC:FoundEnemySound, LostEnemySound, FearSound, IdleSound and AlertSound not calling their appropriate equivalent in the engine
  • FIX Fixed InnerAngle and OuterAngle parameters not doing anything in lights created by DynamicLight()
  • FIX Fixed util.TableToJSON crashing when passed a table containing keys that aren’t strings or numbers
  • FIX Fixed GM:OnReloaded being called more than once on most gamemodes
  • UPD Updated LuaJIT to version 2.0.3
  • UPD Reverted Entity:IsValid to its old behaviour
  • UPD Changed Entity:PhysicsInitBox behaviour to be more consistent with Entity:PhysicsInitConvex (no longer creates a broken physics object in some cases)
  • UPD game.GetWorld is now shared
  • UPD Player:HasWeapon and Player:GetWeapon are now shared
  • UPD Entity(0) now returns the world on both server and client
  • UPD Entities can now have up to 64 DT vars of each type (except strings)
  • UPD Player:Kick and Player:Ban kick/ban reasons are now optional and may contain newlines
  • UPD SWEP holdtypes are now properly networked
  • UPD Vector and angle access using a numerical index rather than x/y/z is now slightly faster
  • UPD gui.OpenURL now clamps URLs to 511 characters max
  • UPD Added safeguards to mesh library functions
  • UPD Entity:GetMaxHealth is now shared again and properly networked
  • UPD Entity:DrawViewModel now takes an optional second argument which controls which viewmodel to show/hide (defaults to 0)
  • UPD Moved Entity:Disposition, GetActivity, IsNPCMoving, IsUnreachable to NPC:Disposition, GetActivity, IsMoving, IsUnreachable
  • UPD Trace tables now accept an “output” parameter which may contain the table the trace results should be written into
  • UPD sound.PlayFile and sound.PlayURL callbacks now receive an error ID and error name as their second and third parameters if an error occurs
  • UPD Weapon:CallOnClient second argument is now optional (defaults to “”)
  • UPD Moved Player:PlayScene, NPC:PlayScene and NextBot:PlayScene to Entity metatable
  • UPD Entity:PlayScene second argument (delay) is now optional (defaults to 0)
  • UPD MsgC can now print text with several colors in a single call
  • UPD Moved Player:Freeze, Player:GodEnable, Player:GodDisable, Player:IsFrozen, Player:HasGodMode to Lua
  • UPD Clamped pitch between -90 and 90 instead of -180 and 180 for AngleRand
  • UPD util.KeyValuesToTable and util.KeyValuesToTablePreserveOrder now accept a third parameter which prevents keys from becoming lowercased when set to true
  • UPD vgui.LoadControlsFromFile/LoadControlsFromString now properly creates scripted panels
  • UPD Improved vgui.LoadControlsFromString (no longer writes to a temporary file)
  • NEW Added Entity:PhysicsDestroy()
  • NEW Added Weapon:GetHoldType()
  • NEW Added util.SharedRandom(uniqueName, min, max, additionalSeed=0)
  • NEW Added util.BlastDamageInfo(dmginfo, origin, radius)
  • NEW Added Entity:SetLOD(lod=-1)
  • NEW Added Entity:SetLagCompensated(bool)
  • NEW Added Entity:IsLagCompensated()
  • NEW Added Player:SetAllowWeaponsInVehicle(bool)
  • NEW Added Player:GetAllowWeaponsInVehicle()
  • NEW Added CSoundPatch:SetDSP(dsp)
  • NEW Added CSoundPatch:GetDSP()
  • NEW Added IGModAudioChannel:EnableLooping(bool)
  • NEW Added IGModAudioChannel:PlayFile(path, flags, callback)
  • NEW Added optional second argument to Entity:SetPhysicsAttacker() which controls expiry time (defaults to 5 seconds)
  • NEW Added game.SetSkillLevel(int), game.GetSkillLevel()
  • NEW Added the following hooks to scripted effects: EFFECT:StartTouch(), EFFECT:Touch(), EFFECT:EndTouch()
  • NEW Added CUserCmd:SelectWeapon(weapon_ent)
  • NEW Added __tostring to CNavArea, CSoundPatch, IGModAudioChannel, PhysObj, dlight_t metatables
  • NEW Added PhysObj:GetName()
  • NEW Added CNavArea:Draw(), IsUnderwater(), GetSizeX(), GetSizeY(), IsRoughlySquare(), IsFlat()
  • NEW Added CNavArea:GetZ(pos)
  • NEW Added CNavArea:IsOverlapping(pos, tolerance)
  • NEW Added CNavArea:Contains(pos)
  • NEW Added CNavArea:IsCoplanar(navArea)
  • NEW Added CNavArea:GetClosestPointOnArea(pos)
  • NEW Added CNavArea:IsVisible(pos)
  • NEW Added CNavArea:GetCorner(cornerId)
  • NEW Added navmesh.GetNavAreaCount()
  • NEW Added navmesh.GetNavArea(pos, beneathLimit)
  • NEW Added navmesh.GetNavAreaByID(id)
  • NEW Added navmesh.BeginGeneration()
  • NEW Added navmesh.IsGenerating()
  • NEW Added navmesh.GetPlayerSpawnName()
  • NEW Added navmesh.SetPlayerSpawnName()
  • NEW Added navmesh.AddWalkableSeed(pos, normal)
  • NEW Added navmesh.ClearWalkableSeeds()
  • NEW Added Entity:IsDormant()
  • NEW Added ENTITY:Blocked(other), only applies to SENTs using the MOVETYPE_PUSH movetype
  • NEW Added Color:__tostring, Color:__eq and Color:ToHSV()
  • NEW Added gui.InternalKeyTyped(code)
  • DEL Removed “loop” flag from sound.PlayURL
  • DEL Removed support for vm_origin and vm_angles from GM:CalcView

Exploit Fix Released


An exploit was released last night that took advantage of the Source Engine’s file sending mechanism which made it possible to send files with any extension to the client or server. This exploit is likely still active in all other Source Engine games so I’m not going to go into specific details about it.

Needless to say that this was exploited in Garry’s Mod on Windows to send dlls to clients and servers. As far as I am aware the exploit wasn’t used to do anything malicious beyond propagating itself, spamming chat and changing server names. But to be safe I would recommend that you consider deleting your Garry’s Mod install and starting fresh. It might be a good idea to do an online virus scan too.

The patch I released this morning attempts to clean up any mess left behind by these exploits and patches the variety of methods which they used. If anyone has further information about the exploits, or any exploits left un-patched please email me personally at



Here are a few quick fixes for the issues introduced by yesterday’s update. Servers will need to be restarted.
Some known issues remain and will be addressed next week.

  • FIX TTT: Fixed ironsights being broken due to changes from last update
  • FIX Fixed .mp3 and .ogg playback becoming very expensive due to changes from last update
  • FIX Fixed Father Grigori not being the king of animals
  • FIX Entity:FireBullets no longer inflicts ammo-specific damage if the damage is 0 unless an ammo type is explicitly specified
  • UPD IGModAudioChannel:SetTime now prints a warning if it is called on a non block streamed channel
  • NEW Added IGModAudioChannel:IsBlockStreamed



You have waited a long time.. and this is a big one.. so servers will need to be restarted before you’ll be able to join them.

Fixed lamps projecting backwards

This annoying visual bug that has been there since lamps existed is now finally gone for good.

Improved mounting system

You will most likely not notice it but the mounting system has been given a heavy lifting. This means a slight decrease in load times, less remounting, and no more texture issues on changelevels.

Fixed gamemode name reported by Steam not being updated after a changelevel

The gamemode name used to be sent to Steam’s master server only when a server was started, so it wouldn’t be updated after a changelevel. Now it is sent at regular intervals along with the current map name.

Minor Half Life 2 campaign fixes

A lot of minor fixes have been oriented towards making the HL2 campaign fully playable. For instance, the GMan intro now plays correctly, ropes should now be properly positioned on all levels, NPCs now receive the correct amount of damage from HL2 weapons (the shotgun was notably weak against them), and metrocops no longer get stuck into a T-pose when attacked.

Lots of requested Lua fixes and features

Notable additions include new BASS library bindings allowing more control over sounds being played, advanced matrix manipulation functions, a hook which allows you to override sounds before they are played, and another hook which overrides bullets fired from any weapon. You decide what to do with them!
A lot of Lua functions also had more or less important issues pointed out by various coders, most of those are now fixed.

And now for the…

Full Changelog

Game Changes

  • FIX Fixed viewmodel bobbing snapping when jumping or noclipping
  • FIX Fixed flashlight getting duplicated when receiving a full packet update
  • FIX Fixed spawnicons not always regenerating at the correct resolution when resized
  • FIX Fixed “Dopwnload finished” typo in console output
  • FIX Fixed lamps projecting backwards!
  • FIX Fixed gamemode name reported by Steam not being updated after a changelevel
  • FIX Fixed key bindings not working correctly in the main menu
  • FIX Fixed GMod decals not working when used on props
  • FIX Fixed debug textures not being precached (brings mat_wireframe 1 back to its former glory)
  • FIX Fixed rendering artifacts when some particle effects are rendered in front of the skybox
  • FIX Fixed nav files remaining open after loading a map
  • FIX Fixed shell ejection issues on the HL2 pistol and SMG
  • FIX Fixed players colliding with other players while noclipping
  • FIX Fixed viewmodel jittering when overwriting viewmodel position
  • FIX Fixed viewmodel prediction errors when switching to thirdperson and back
  • FIX Fixed sound spam with weapon_rpg when no ammo is left
  • FIX Fixed jigglebones occasionally snapping into impossible positions when rapidly moving
  • FIX Fixed keyframe_rope ignoring attachment points (this fixes various issues such as the cable from prop_vehicle_crane)
  • FIX Fixed combine balls not colliding with players
  • FIX Fixed env_zoom not working at all (i.e. HL2 intro)
  • FIX Fixed choppy MP3 sound playback in some cases
  • FIX Fixed metrocops holding the stunstick going into a T-pose when attacked
  • FIX Fixed metrocops not turning their stunstick on before attacking
  • FIX Fixed NPCs not receiving the appropriate amount of damage from HL2 weapons
  • UPD Improved mounting system, no more texture issues on changelevels
  • UPD sv_kickerrornum now defaults to 0 and its value is now saved to the config file
  • UPD sv_allowcslua is now saved to the config file
  • UPD Clientside Lua is now always allowed in singleplayer
  • UPD Improved some spawn icons
  • UPD TextEntry panels no longer filter ‘\t’ characters
  • UPD Restored old damage force behaviour
  • UPD Singleplayer jump boost from HL2 is now implemented in Lua as a sandbox feature and works in multiplayer as well
  • NEW Added clientside convar cl_steamoverlay_pos

Community Contributions

Lua Scripting



An update has been released. Servers don’t need to be restarted – but it’s recommended.



An update has been released. Servers don’t need to be restarted – but it’s recommended.

  • FIX  Fixed crash when using Matrix:Scale, Translate, Rotate wrong
  • FIX Added extra debug to blue screen errors
  • FIX If a startup crash is detected we will automatically verify install
  • FIX  Fixed gamemode name not updating with server changes
  • FIX  Fixed util.SteamIDTo64 spouting rubbish
  • FIX  Added GM:PreCleanupMap
  • FIX  Added GM:PostCleanupMap
  • FIX  Fixed large avatars being partially broken
  • FIX  Fixed NPCs not talking or playing scenes


  • NEW Added a bunch of loose files into vpk’s for faster load times
  • FIXED Fixed soundchannel:SetVolume( float )
  • FIXED sound.PlayURL can now handle playlists
  • FIXED Fixed ‘BASS’ error on launch
  • FIXED Fixed missing scenes causing low FPS with NPCs
  • FIXED Fixed sqlite db’s getting stomped by updates/verifying cache
  • FIXED Fixed rope material crash exploits



Here’s answers to two of the most commonly asked questions.

  • NEW Added OGG audio streaming
  • NEW Added sound.PlayURL( “url”, “3d mono loop noplay”, callback_func )
  • NEW Added soundchannel:Play()
  • NEW Added soundchannel:Stop()
  • NEW Added soundchannel:Pause()
  • NEW Added soundchannel:SetVolume( float )
  • NEW Added soundchannel:SetPos( vecPos )
  • NEW Creating a timer now returns a timer object
  • NEW Added bodygroup & skin changer to player editor
  • NEW Eli player model now colourable
  • FIXED Fixed other game content not mounting on Linux
  • FIXED Fixed broken MP3 streaming
  • FIXED Fixed some Linux case sensitivity problems when mounting other content




Here’s answers to two of the most commonly asked questions.

  • NEW Main menu shows which beta branch we’re using next to the version number
  • NEW Added mount.cfg to allow mounting of extra content (for dedicated servers) 
  • NEW Map Icons should now load much faster 
  • NEW Addons should now load much faster (especially if you have lots installed)
  • NEW Development branch is now called “dev”
  • FIXED Fixed OSX not launching with Steam User error
  • FIXED Fixed Windows DS crash when using workshop collections
  • FIXED Fixed Legacy Server Browser not working
  • FIXED Fixed insane screeching when playing some sounds
  • FIXED Removed ‘headers’ console spam
  • LUA Added global ‘BRANCH’


Update 165

  • NEW Garry’s Mod is now on Steam Pipe
  • NEW Added the Portal 2 version of Chell as a player model
  • NEW Added back the CS:S hostage player models
  • NEW Added medic player models (and their arms)
  • NEW Phong & rimlight on players modulates based on their chosen color
  • NEW Adapted more zombie animations into the player model libraries
  • NEW Optimized CS:S player models
  • NEW Now colourable: CS:S Phoenix/Guerilla/Leet, Magnusson
  • NEW Improvements to the player model selection interface
  • FIXED Updated CS:S hands model and material
  • FIXED Fixed the remaining visual issues with CS:S c_models
  • FIXED Bullets properly come out of the barrel of CS:S weapons
  • FIXED Added missing medkit w_model
  • FIXED Thumbs on first-person medkit animations are less broken
  • LUA Added math.Remap( value, inMin, inMax, outMin, outMax )

Update 164

  • NEW New viewmodel arms for the Combine
  • NEW Two default SWeps: fists and medkit
  • NEW Added a female metrocop player model
  • NEW Now colourable: Combine soldiers, Corpse1
  • NEW Further LOD optimizations on player models for performance
  • NEW Added a rimlight effect on player models for readability
  • NEW 3 new death animations
  • FIXED Fixed NPCs not being able to use AR2 or Pistol
  • FIXED Fixed steampipe games not mounting properly on OSX
  • FIXED Solved most oddities with the new viewmodels, especially on CS:S weapons
  • FIXED Fixed zombie anims twitching when transitioning between states
  • FIXED Fixed punching anims being out of alignment
  • FIXED Fixed player color Lua errors
  • FIXED Fixed missing H.U.G.E. 249 world model
  • FIXED Improved look of zombie crouch anims
  • LUA Updated dtooltip.lua
  • LUA Fixed error spam when disabling a DComboBox

Update 163


I have sent a quick patch to Valve for that last update.

  • FIXED Player color errors
  • FIXED Weapons without viewmodels crashing

A few people are complaining that they’re missing textures in some maps with the new update. If you’re having these problems then make sure you have Counter-Strike:Source installed and make sure it’s being mounted into G(arrys)Mod. Try running CS:S. Check the console on startup for any errors. Try validaing CS:S and G(arrys)Mod.

Update 162


What up! I sent a patch to Valve! It should be live now! Your server needs to restart! Here’s what’s changed!

  • NEW Unified viewmodel system
  • FIXED Fixed NPCs going into T-pose
  • FIXED Player model updates
  • FIXED gm_construct update
  • FIXED Fixed Steampipe overrides
  • FIXED Fixed GetCustomAmmoDisplay hook
  • NEW Added PostDraw2DSkyBox hook
  • FIXED Fixed SteamIDTo64, SteamIDFrom64
  • FIXED Fixed Workshop Gamemodes
  • FIXED Fixed Auto Refresh bug
  • FIXED Fixed bone scale accuracy
  • NEW Added “PhysicsCollide” hook
  • NEW Nextbot enhancements
  • NEW  Added PostDraw2DSkyBox hook

GMod Update 161


Hey guys. So it took a long time for update 160 to come out.. and it came out this morning and there was a bunch of crap that went wrong.

Weapons were firing too fast, some people had a missing texture over their screen, crouching and jumping got you stuck in the ceiling and on some systems was insanely low.

So. Weapons firing too fast was fixed. This was a really really dumb oversight made by me – and not picked up by anyone (even though it had been on the SVN version for a month and a half.. blagh.). I rolled back the stuff that caused this until I can do it properly.

Missing texture was caused by having CS:GO or Portal 2 mounted. It was overriding the motion blur material using some stuff we don’t have in our version of the engine. So I included the material with GMod so it overrides everything.

Getting stuck in the ceiling was a bug in my crouch bug fix. Bugs on top of bugs. I think I fixed it.

The low FPS was caused by having LuaJIT enabled by default. Which is kind of funny because it’s meant to make it faster. My feeling is that this is down to one of two things. Either it’s a problem only on AMD CPUs.. which is why it never appeared in any of our tests here in the office.. or it’s something in Wiremod or some other addon that’s dynamically compiling code over and over. Either way we’re back to having LuaJIT disabled by default. If you want to benchmark you can enable jit again by running with the command line “-withjit”.

GMod Update 160


Hey guys – I sent an update to valve. There’s a lot of internal changes here that might bite us in the ass in many different ways. We’ve spent quite a bit of testing but still… cross your fingers!

Here’s the changes:

New balloon models

There’s a couple of new balloon models available by default now! Enjoy!

Player model updates

The HL2 citizen player models were drastically enhanced, and Odessa is now colourable. The player models will now transition between animation states more smoothly, sitting animations have been improved, idle sequences (standing still) are much more varied, and other various things that looked odd or didn’t work were fixed.

Fixed infinite loop when spawning entities

If your GMod was freezing up when trying to spawn some entities – you were getting the infinite loop bug. This is now fixed!

Fixed cheating with crouch

There was a bug with crouching where you could crouch, uncrouch and then crouch again while you were still uncrouching – and your view would stay in place. This was being exploited by people to shoot over boxes while being fully ducked behind them.

Fixed Coroutines

One for the coders.. coroutines should now work flawlessly! Now you just need to find a use for them!

Added Nextbot stuff

Another one for the coders. I exposed a lot of nextbot stuff. This means that we can code better AI. I’m not done with this yet but it should be safe enough to start using it.

SteamPipe Mounting

Valve are switching all their games over to Steam Pipe. This affects us because we like to mount their games. Don’t worry though – I have updated the mounting stuff so it’ll mount games using SteamPipe now too! This includes games like CS:GO and Left 4 Dead!

Fixed Lua errors when saving

Some people were getting Lua errors when creating a save via the spawn menu. This should be fixed now – it was my fault! Sorry guys!

Fixed fastdl downloads

Server owners were having trouble with fastdl downloads. They didn’t download properly if they were compressed. This is also my fault – and should now be fixed!

Fixed duplicate props when loading a save

Sometimes when you loaded a save the props would get duplicated because it was restoring them first, then creating the saved version. This code was all a bit sticky. So I nuked the lot so it will delete all the props on the map and restore them from the save versions.

Lua performance fixes

I added a few small optimizations to improve the performance of Lua. A lot of the slowdown in Lua is when it has to call back to c. So I try to avoid that in a few common places. I make CurTime, RealTime and FrameTime all Lua functions – which don’t call into c in any way. The entity meta tables are also done in Lua now too.

GMod Update 159



There were a few problems with yesterday’s update. Not massive problems, but they should all be fixed in this update.

  • Fixed SteamID not being passed to CheckPassword hook
  • Fixed possible shadow/flashlight crash
  • Fixed addons not showing up immediately
  • Fixed offline addons not working
  • Fixed legacy addons not mounting under linux
  • Fixed crash when live editing Lua in addons folder
  • Fixed crash on windows dedicated server using workshop collection
  • Fixed skin property errors (robotboy)