As a Roblox developer, it is currently too hard to control what data is replicated between the server and the clients. This limitation often results in unnecessarily large network traffic and performance issues, which technically limits creativity.
Currently, I have to rely entirely on Roblox’s built-in replication system. While it works for most use cases, it lacks customization options. For example:
All property changes are replicated to all clients, even if only some clients need them.
Tweening an object on the server unnecessarily replicates every frame to the clients.
Developers can’t exclude certain properties or instances from replication, even when they’re intended as server-only.
If Roblox is able to address this issue, it would improve my development experience because I would have the ability to:
Choose which properties or instances replicate, when, and to whom.
Reduce bandwidth usage by preventing unnecessary replication, which is especially important for my open-source tweening library.
It would allow for more optimized and creative games.
Proposed solution
Enable developers to disable replication for the entire game, so that they can craft their own, more optimized and customizable systems.
Not only is this (at least seemingly) super simple, but it ensures maximum creativity regarding replication, and can greatly optimize certain games.
Developers can share solutions, so that less experienced users can take advantage of state-of-the-art systems, without having to spend countless hours creating their own.
This would be huge and I am in full support. Being able to restrict instances from being replicated to clients would be a lifesaver in so many different situations.
Currently you need to use a hacky workaround of parenting them to the server’s Camera in workspace. A cleaner, more intuitive, and more customizable system for altering what can be replicated would be amazing.
Huge support! I have two games which would benefit for optimizations, for example:
When player enter in the tutorial or cutscene, all server stuff are invisible and non collidable to not ruin player’s experience. However, the server stuff are still replicating, even tho client can’t see them, using a decent amount of bandwidth for no reason.
There’s also another use case: You can use it for quests, for example:
Server will replicate important steps to only 1 or a few clients, while everyone can’t see, still having control and good network optimization.
Well, i don’t have enough experience to create some good systems. This feature would help to simple system along with maintaining server control and lesser lag.
Developers can share solutions, so that less experienced users can take advantage of state-of-the-art systems, without having to spend countless hours creating their own.
Thanks to the power of open-source, anyone can benefit from custom systems!
This would be great, but has weird edge cases that would have to be clarified for it to work IMO.
Obviously we want RemoteEvents to be available so we can use our own replication thru them. But how is the client going to know about the RemoteEvents at all without them being replicated?
Seems the answer is to replicate just those. But what are we replicating? Their state on server start? Their current state when the user joins? Constant replication?
Do we have to replicate their folders too? What about modules? You can’t pass modules through remotes. What about models used for local use? What about GUI? What about other player instances?
It’s a lot more involved of a proposition than just disabling replication outright, and the tricky thing is if you would have said “yes” to all of the above being replicated, you can already do that in the Roblox engine. Granted, you’ll need to put a lot in Cameras, but it’ll work.
I sure think replication control should be possible, but if it is to be added, I believe that in addition to being able to disable it completely, there could be an option to disable it only in specific properties or instances, instead of having to disable all built-in engine replication just to prevent a part or property change from being replicated, for example.
I believe the best solution is to remove some more limits!
A new API would allow us to send the exact data to the clients that we want, without doing it through a RemoteEvent and its identifier. Could be as simple as:
Much better, and can be optimized more than RemoteEvents! In my opinion, RemoteEvents should be deprecated and superseded by this!
All instances consist of data. We can just send relevant data through a remote event. This also means we can highly optimize instance replication — so it’s the exact opposite of a problem!
You see, with custom systems, that and much more could be possible!
Don’t forget that with the power of open-source, you won’t have to spent countless hours crafting your own system, but can just leverage community creations!
Okay, so your angle is that utterly nothing replicates, and your proposed SendData is basically a fancy wrapper for a remote event without an identifier (2 bytes… how devastating). How do you get code to run on the client to even start receiving anything when no scripts replicate in the first place, and thus the client has nothing to run? The client is going to have zero clue what to do with your data without any code running. Imagine if you ripped all of the C++ RemoteEvent handlers in the engine and tried to get it to run… it’d do nothing.
Okay, maybe you’ll say “well one script can run to start with.” The client does not have a compiler for security reasons, ergo there is no way to load code that you send through this new function (replicating your modules that have anything more complex than static data inside them is going to be impossible, no functions or metamethods). If you bend the rules and let “SendData” send full on Instances, then congrats, you’ve literally just offloaded the entire task of replicating things (with more overhead because now you have to categorize whatever you send through it so your game code isn’t dealing with instance replication) and this is all pointless because you could just parent them to the player’s PlayerGUI for mostly the same effect.
It really sounds like you want something like Godot when the Roblox engine is not even remotely similar to that, and I think this is the wrong angle.
The game’s code is fundamental and will obviously be downloaded at start. You’re acting like I’m rejecting network as a whole — then games would literally be impossible.
I’m talking about Roblox’s dynamic replication system that unnecessarily constantly updates everything. All they have to do is disable it and allow us to create our own, better, more optimized and customizable solutions.
RemoteEvents are definitely unnecessary. They should simply allow us to send data normally — it’s not just about saving 2 bytes like you suggest — it’s about not forcing us to make new instances that have to be replicated before we can interact with the network ourselves.