Replication filtering is a feature that prevents changes done on a game client from propagating to the server. It was formerly enabled by changing the value of the
FilteringEnabled property of the Workspace, but is now turned on by default and impossible to disable. When the
FilteringEnabled property is set to true, changes done to properties of the DataModel (the game object) and its descendants will only replicate if they originated from the server, and otherwise will be ignored. This effectively prevents nearly all exploiting, since players in a game can only modify how the game works and looks for themselves: their changes will not be replicated to the server and then to other players, and remain harmless.
This works by separating the instance between the Roblox server and client, and no longer taking any changes done from the client to the server, unless specifically programmed to by the developer so that the server looks for any changes done to the client, usually via RemoteEvents and RemoteFunctions.
Because most exploiting uses the random-access memory's values, and then modifies them so that when the central processing unit queries the random-access memory cards for data values and then sends what it finds to the Roblox client and in turn, the Roblox Server, an exploiter may change nearly all aspects of a game on Roblox by simply modifying his client's interpretation of the game. FilteringEnabled fixes this by simply blocking any future changes to the server from the client, which also causes some scripts to break as they rely on the server taking input from the client.
A place that does not have FilteringEnabled enabled are constered as Experimental Places, which players under the age of 13 cannot access these places. The feature along with Experimental Places were discontinued, and all places are forced to use FilteringEnabled.
- When a LocalScript modifies an object in the game, the change will be made on the client, but will not replicate to the server. For example, if a LocalScript creates a part, the part will only exist on that client's data model. The server will reject the change and not replicate it to the other clients. This makes it possible to create local parts.
- This feature broke the majority of legacy content, such as places, vehicles, gear, because their scripts still depended on replication from client to server. To develop games that still work with FilteringEnabled, you need to have clients communicate with the server through RemoteFunction and RemoteEvent.
- When this property is true, a Player's PlayerGui will not replicate to the server. It will only exist on the client. This means that Scripts within PlayerGui will not run, and the server will be unable to access it.
- Enable "PrintFilters" from Studio Settings > Network > PrintFilters to see what's being filtered. This is very useful for debugging scripts.