Metadata
Varion metadata is split by visibility and authority. Server-side code owns replicated metadata; client-side local metadata is not a security boundary.
The full server-JS function list is in Server API; client-side reads and writes are in Client JS API.
Scopes
Every network entity (player, vehicle, object, ...) and the global varion object keep separate stores. getMeta and getSyncedMeta are DIFFERENT scopes, not synonyms: getMeta reads the local (non-replicated) store, getSyncedMeta reads the replicated one.
| Scope | Who sees the value | Server JS | Event |
|---|---|---|---|
| Server-only | server only, never sent | setMeta (entity) / varion.setMeta | metaChange / globalMetaChange |
| Local | only that player's client | (C# SetLocalMetaData) | localMetaChange |
| Synced | all clients | setSyncedMeta / varion.setSyncedMeta | syncedMetaChange / globalSyncedMetaChange |
| Stream-synced | clients that stream the entity | setStreamSyncedMeta | streamSyncedMetaChange |
setSyncedMeta* and setStreamSyncedMeta* have ...Data-suffixed aliases (setSyncedMetaData, getSyncedMetaData, getStreamSyncedMetaDataKeys, ...) — they are the same functions.
Server JavaScript
// Server-only: not sent to clients (metaChange event)
player.setMeta('accountId', 42);
const id = player.getMeta('accountId');
player.deleteMeta('accountId');
// Synced: replicated to all clients (syncedMetaChange event)
vehicle.setSyncedMeta('fuel', 75);
const fuel = vehicle.getSyncedMeta('fuel'); // === getSyncedMetaData('fuel')
vehicle.deleteSyncedMeta('fuel');
// Stream-synced: only clients that have the entity streamed in
entity.setStreamSyncedMeta('label', 'shop');Global metadata
The varion object keeps server-side global stores:
| Server JS (varion) | Who sees the value | Event |
|---|---|---|
varion.setMeta / getMeta / hasMeta / deleteMeta | server only, not replicated | globalMetaChange |
varion.setSyncedMeta / getSyncedMeta / ... | all clients | globalSyncedMetaChange |
varion.setGlobalMeta / getGlobalMeta / ... | all clients (same store) | globalSyncedMetaChange |
varion.setSyncedMeta and varion.setGlobalMeta write to ONE replicated store and both raise globalSyncedMetaChange — they are synonyms. Only varion.setMeta has a separate server-only, non-replicated store.
C# (server SDK)
IPlayer keeps server-only data — a plain server dictionary; nothing is replicated and no event is raised:
player.SetData("accountId", accountId);
var id = player.GetData<int>("accountId");
player.DeleteData("accountId");Local metadata is delivered ONLY to that player's client (not to others), where it is read via varion.getLocalMeta:
player.SetLocalMetaData("hudTheme", "dark");
var theme = player.GetLocalMetaData<string>("hudTheme");Synced / stream-synced are available on any entity (IVehicle, ServerEntity, VirtualEntity, IPlayer) and replicate through the native bridge:
vehicle.SetSyncedMetaData("fuel", 75);
var fuel = vehicle.GetSyncedMetaData<int>("fuel");
vehicle.DeleteSyncedMetaData("fuel");
entity.SetStreamSyncedMetaData("label", "shop");
entity.DeleteStreamSyncedMetaData("label");The server-side metadata-change event is Varion.OnMetaChange.
Client JavaScript
The client reads synced metadata set by the server, and owns its own client-local metadata (client-local is not replicated back to the server):
// Read synced / stream-synced entity metadata (source: the server)
const fuel = entity.getSyncedMeta('fuel'); // === getSyncedMetaData
const label = entity.getStreamSyncedMeta('label');
// Client-local metadata of the local player (localMetaChange event)
varion.setLocalMeta('hudTheme', 'dark');
const theme = varion.getLocalMeta('hudTheme');
// Read global synced metadata set by the server (read-only)
const round = varion.getSyncedMeta('round');On the client, entity.getMeta reads the LOCAL (client-side) entity store, not the synced one — use getSyncedMeta / getStreamSyncedMeta for server-set values.
Change Events
The client bootstrap and the server host raise local events:
metaChange— server-only entity metadatasyncedMetaChange— synced entity metadatastreamSyncedMetaChange— stream-synced entity metadatalocalMetaChange— client-local metadata of the local playerglobalMetaChange— global server-only metadataglobalSyncedMetaChange— global synced metadata (server → client)
Source Backing
This page is derived from sdk/Varion.SDK/IPlayer.cs, sdk/Varion.SDK/Player.cs, sdk/Varion.SDK/Vehicle.cs, sdk/Varion.SDK/ServerEntity.cs, sdk/Varion.SDK/VirtualEntity.cs, the server host server/host/varion-host.cjs, the contract in server/src/CServer.cpp, and the client runtime sdk/client-js-runtime/injected/entities-bootstrap.js (+ events-bootstrap.js).