Issue:
Setting any value on playerdata (for example, a setting for the world) syncs all playerdata keys/values to all users (for example, SaveData), even ones that were not changed. I don't want to to sync certain keys, as they are very big and not commonly changed. I also don't need other players to be able to see certain keys.
Context:
So this is very similar to https://feedback.vrchat.com/persistence/p/user-private-persistence however my reasoning is completely different.
I have a leaderboard system and a settings panel in my world and they both use persistence, they work perfectly fine, but I recently introduced a Save-Load system, which lets players save pickup locations and pen drawings to their player-data, so they can load it later.
The issue comes because when something unrelated gets changed in the player-data, for example a value on the leaderboard. All of that player's persistent data still gets sent over the network, including the large save data, this creates a LOT of network lag and makes the instance unstable.
Using persistence is the only way I can make sure everyone can use the save-load system. I cant rely on a simple text box export alone or using the debug logs, as some users are on quest and that makes it quite difficult to extract debug logs/save text. And debug logs get automatically deleted, so It's unreliable.
Solution:
My idea is to have a third, optional argument for PlayerData.Set<T>(), For example:
instead of: PlayerData.SetBytes(Key, Value);
We would have:
PlayerData.SetBytes(Key, Value, true);
The third argument would be 'Local'
it defaults to false so people would not need to update all their existing scripts
When it is true, it makes it so that key is marked as Local Only, and doesn't get sent to other players, ever.
If somewhere else in the code, localplayer calls PlayerData.SetBytes(Key, Value, false);
or without the third argument, it sets that variable back to global.
I have included a mockup screenshot.

Photo Viewer

View photos in a modal