Skip to content

Start typing to see game suggestions. This only suggests apps that have a store page.

Only apps with a store page are suggested. Enter Submit to view all results. Ctrl+Enter View and filter in instant search.
Close ×

Neos VR update for 27 April 2021

2021.4.27.1385 - Introducing Cloud Variables, inspector reference improvements

Share · View all patches · Build 6610732 · Last edited by Wendy

Patchnotes via Steam Community
This build has not been seen in a public branch.

Hello everyone, I've got an exciting update, the first release of cloud variables is here! :smile: There provide a brand new mechanism to easily persist data/state independently from the objects/worlds that use them, but also provide a way for cross-world/session communication, synchronizing values between your Userspace and Worldspace (e.g. to control stuff on your avatar from private UI) or tag users for events and more.

This is just the first version, so there are likely to be some bugs, but hopefully this will open up some new cool options for building interactive content in Neos. I've designed the system to be quite versatile and there's a few more things that are coming (e.g. using them to control access on headless), but I hope you'll already have lots of fun with them!

I'll also do a bit more of a writeup for weekly update, but I'll have to do that tomorrow since I'm already in a bit of a zombie state. There's a few other things too, like improvements for the inspector and few bugfixes.

New Features:

  • Introducing cloud variable system! A new way to persist and synchronize data independently from items and worlds (previously requested by @Toxic_Cookie#8064, @Hidi#1111 and many others)
    -- You can use this to create items that will save their settings (and other state) for the user across sessions and worlds
    -- All linked instances of the same variable are synced in realtime across worlds (including between Userspace and Worldspace), providing a mechanism for cross-world/session synchronization and for synchronizing values from Userspace to the World
    -- Group-defined variables can also be used to store custom information on users, for example to tag them with specific role for events and similar

  • To be able to use a variable, you first need to create a variable definition
    -- Definition includes name/path (essentially a key), datatype (all Neos primitives should be supported), default value and read/write/list permissions
    -- The definition allows each user/group to store the variable value on their account based on this definition. You cannot store variables without them being defined first
    -- Both users and groups can define variables. The ID of the user/group becomes first part of the path (e.g. G-Neos.test.string)
    -- User-defined variables cannot be written to by anyone else other than the user owning the value (in other words you cannot write value on behalf of another user). Group variables don't have this limitation

  • Added CloudValueVariable<T> (under Cloud/Variables) which outputs/syncs in-world value with a cloud variable
    -- You can specify both the variable Path and VariableOwnerId, allowing you to read/write cloud variables for any user/group (assuming the right permission)
    -- You can specify change handling, which lets you ignore changes to the field or sync them to the cloud variable, either only when owner is present or always

  • Added CloudValueVariableDriver<T> which drives target field with a state of a cloud variable
    -- The value is locally driven by the value of the cloud variable for each user, allowing you to completely replace ValueUserOverride to provide customized settings
    -- WriteBack will update the CloudVariable (when permission allows) when the driven field is changed
    -- FallbackValue provides value for when one isn't available. This is not default value, once the variable is linked it will use the default value from the variable definition if user hasn't changed it yet

  • Added ReadCloudVariable<T> and WriteCloudVariable<T> LogiX nodes for reading/writing cloud variables (under Storage)
    -- Read will force the value to be updated as soon as possible. Do not spam this, otherwise you might get throttled by the cloud server

  • Added following Neos commands to create and manage variable definitions and variable values (you can use the AdminX tool in Steam install to send these - exclude the forward slash)
    -- /getUserVar <path> - lists definition
    -- /getGroupVar <group> <path>
    -- /getUserVarValue (<user>) <path> (<target user>) - gets current value of given variable for given user
    -- /getGroupVarValue <group> <path> (<target user>)
    -- /setUserVarValue (<user>) <path> <value> - sets current value of given variable for yourself
    -- /setGroupVarValue <group> <path> <value> (<target user>) <value> - sets current value of given variable for specific user
    -- /listUserVars (<user>) - lists all variable definitions
    -- /listGroupVars <group>
    -- /createUserVar <path> - creates new user variable definition
    -- /createGroupVar <group> <path> - creates new group variable definition
    -- /setUserVarType <path> <type> - sets the datatype of given variable definition
    -- /setGroupVarType <group> <path> <type>
    -- /setUserVarDefaultValue <path> <value> - sets the default value for given definition
    -- /setGroupVarDefaultValue <group> <path> <value>
    -- /setUserVarPerms <path> <perm_types> <permissions> - sets read/write/list permissions for given variable definition
    -- /setGroupVarPerms <group> <path> <perm_types> <permissions>`

  • Following datatypes are supported:
    -- Neos/C# primitives - bool, byte, int, float, double, float3, bool3, double4, float3x3, color and so on
    -- string and string:<max_length> (default length of string is 256, maximum is 8192)
    -- uri, datetime and timespan
    -- More datatypes will be supported in the future

  • Following types of permission are supported:
    -- read who can read the value of given variable
    -- write who can write to the value of given variable
    -- list who can see the definition of given variable
    -- all - shortcut to set all of them
    -- You can also do multiple like so: /setGroupVarPerms Neos test.string read,write anyone

  • Following permissions are supported:
    -- definition_owner only the user/group who defined the variable can read/write/list it
    -- variable_owner only the user/group who own the variable (the value) can read/write it in safe context (e.g. Userspace)
    -- variable_owner_unsafe same as above, but works in public (outside Userspace). Requires presence of the user owning the variable value, but anyone in the public world could potentially alter the value
    -- anyone - anyone can read/write/list given variable, recommended for read/list for public variables, generally not recommended for writes (means absolutely anyone can change anyone's value)

  • Some more important notes:
    -- Reads/writes are buffered, batched and cached and will take a bit to propagate. All active instances within Neos are synced in realtime
    -- Variable Definitions are heavily cached and will typically take several minutes to update. It's recommended to set them up fully in advance
    -- Written values are validated according to datatype and will be rejected if they do not conform
    -- Users can define up to 256 variables, Groups 8192. These limits will likely be extended for Patreon supporters and through other means
    -- Current limits, permissions and other aspects are subject to change


  • Inspector reference fields will now try to show the name/path of the target/field (when available) instead of the type (requested by @Psychpsyo)

  • Added a mechanism for providing custom member/field names for display and implemented on SkinnedMeshRenderer for blendshape weights
    -- Combined with above, the inspector and other sources will now show the actual name of the blendshape when possible, rather than its index

  • Record upsert on the cloud API is now idempotent, rather than generating conflict when already updated record is tried to be inserted again
    -- This fixes unecessary "Sync Error" message in Neos when the sync succeeds, but the request times out or fails due to network connectivity issues

  • Added health check to cloud instances, to automatically restart misbehaving servers in the pool
    -- This should improve cloud reliability in case one of the instances in the load balancer pool becomes unresponsive

  • Optimized cloud variable definition fetching

  • Merged Korean locale additions by@MirPASEC

  • Merged Japanese locale additions by @Aesc

  • Merged Spanish locale additions and tweaks by @Ruzert

  • Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)

  • Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]


  • Fixed not being able to join Contacts+ sessions when not friends with the host (reported by @Santus_Lupinus#9753, @H3BO3, @Turk, @Froppy and @Chris Filvazt)
  • Added extra diagnostics to errors when formatting locale strings

Known Issues:

  • You cannot delete variable definitions yet
  • Unregistered users cannot store cloud variable values. A system for local storage will likely be added at some point
  • Currently all sessions must be on the same host/user to sync in realtime. For different hosts the sync is only done once every few minutes. This will change in the future

Changed depots in android-preview branch

View more data in app history for build 6610732
Windows 64-bit Neos VR Windows Depot 740251
SteamDB has been running ad-free since 2012.
Donate or contribute.
Open link