Release Notes for 408

Notes for Release 408


Client Difference Log

API Changes

Renamed Class "MDIInstance" to "MultipleDocumentInterfaceInstance"

Added Property bool DataModel.EnableScriptCollabOnLoad {PluginSecurity} [Hidden]
Added Property bool JointInstance.Enabled  [Hidden]
Added Property Class<MultipleDocumentInterfaceInstance> Plugin.MultipleDocumentInterfaceInstance {RobloxScriptSecurity} [ReadOnly] [NotReplicated]

Added Function Array Animator:GetPlayingAnimationTracks()
Added Function bool InputObject:IsModifierKeyDown(Enum<ModifierKey> modifierKey)
Added Function Variant Instance:GetAttribute(string attribute)
Added Function RBXScriptSignal Instance:GetAttributeChangedSignal(string attribute)
Added Function Dictionary Instance:GetAttributes()
Added Function void Instance:SetAttribute(string attribute, Variant value)
Added Function void Plugin:Invoke(string key, Tuple arguments) {RobloxScriptSecurity}
Added Function Instance Plugin:OnInvoke(string key, Function callback) {RobloxScriptSecurity}
Added Function Instance Plugin:OnSetItem(string key, Function callback) {RobloxScriptSecurity}

Added Event Animator.AnimationPlayed(Instance animationTrack)
Added Event Instance.AttributeChanged(string attribute)

Added Enum ModifierKey
	Added EnumItem ModifierKey.Shift : 0
	Added EnumItem ModifierKey.Ctrl : 1
	Added EnumItem ModifierKey.Alt : 2
	Added EnumItem ModifierKey.Meta : 3

Changed the parameters of Function Plugin:SetItem 
	from: (string key, string value = "")
	  to: (string key, Variant value)

Changed the parameters of Event MultipleDocumentInterfaceInstance.DataModelSessionEnded 
	from: (string sessionId)
	  to: (Instance dataModelSession)

Changed the parameters of Event MultipleDocumentInterfaceInstance.DataModelSessionStarted 
	from: (string sessionId)
	  to: (Instance dataModelSession)

Changed the parameters and return-type of Function Plugin:GetItem 
	from: (string key, string defaultValue = "") string
	  to: (string key, Variant defaultValue) Variant

Removed Property MultipleDocumentInterfaceInstance.FocusedDataModelSessionId
Removed Property Plugin.MDIInstance

Removed Function Plugin:Bind
Removed Function Plugin:BindAndFire
Removed Function Plugin:Fire
Removed Function Plugin:HasItem
Removed Function Plugin:RemoveItem

(Click here for a syntax highlighted version!)


Does this mean 2 people will be able to edit a script at once? This seems pretty interesting.


Since when does Roblox run on Chromebooks?


Looks like script collaboration is coming soon :eyes:
Also what are these attribute functions?

You got any more info on it?


Some Chromebooks can run Android apps. Roblox is one of the apps that works with it.


Attributes are a way to store key-value pairs within instances. It’s a bit like CollectionService’s tagging feature, but more focused on holding information instead of just providing a way to identify certain items. Think of it like adding custom properties, I suppose.

There was a thread by an engineer discussing it a while back, but for the life of me I can’t find it… (update: it was deleted for some reason.)


Its a system that lets plugins run independently of the place you have open.
More details should follow whenever they make the feature available to developers.

1 Like
Added Function Variant Instance:GetAttribute(string attribute)
Added Function RBXScriptSignal Instance:GetAttributeChangedSignal(string attribute)
Added Function Dictionary Instance:GetAttributes()
Added Function void Instance:SetAttribute(string attribute, Variant value)
Added Event Instance.AttributeChanged(string attribute)

Attributes are pretty awesome. They’re effectively custom properties and allow you to store various Lua types inside of an Instance. The attributes are serialized into the instance so they can be saved and loaded later. It even supports arrays and dictionaries!

Supported Types
  • string
  • bool
  • number
  • table
  • Axes
  • BrickColor
  • CFrame
  • Color3
  • ColorSequence
  • ColorSequenceKeypoint
  • EnumItem
  • Faces
  • NumberRange
  • NumberSequence
  • NumberSequenceKeypoint
  • PhysicalProperties
  • Ray
  • Rect
  • Region3
  • Region3int16
  • UDim
  • UDim2
  • Vector2
  • Vector2int16
  • Vector3
  • Vector3int16

(Also worth mentioning that int and float types are technically supported, but all Lua numbers in practice are doubles, so you can’t add them through Lua.)

There are a few catches of course. For example, instances and functions cannot be attributes; only the built-in types like numbers, booleans, Vector3, CFrame, etc, can be attributes. You also can’t attach tables that have functions or metatables connected to them. Its purely data oriented.

Serializing a table has the following requirements:

  • Arrays cannot have any holes in them.
  • If a table is a dictionary instead of an array, all of its keys must be strings.
  • Any values that are stored in the table have to be supported as attributes themselves.

As for Roblox’s CollectionService feature, attributes haven’t quite superseded tags yet. Tags can still be used to efficiently mass-query instances in the game, whereas attributes cannot be queried globally. Therefore tags and attributes serve different purposes from each other.

This feature hasn’t been rolled out just yet, but it should be available soon!
Shoutouts to @ComplexGeometry for implementing this feature!


What does this mean for non-Humanoid animations? Are there plans to deprecate AnimationControllers in favour of instancing an Animator in the Humanoid? There aren’t any playing methods here so it’s slightly confusing what this change around AnimationControllers and Animators is.


~ Speculation ~

They might be trying to make the Animator object function as a standalone component that isn’t muddied up by requiring a parent controller object.

The Animator object probably required its parent to provide information about the rig it was working with, and now they’ve reworked the class to operate on its own, making the AnimationController obsolete?

This change might be part of that new character controller system they showed off at RDC.


Holy bloxx, this is going to make life so much easier. I’m already thinking of a million ways I can abuse this.


I’m interested to know if the new Attributes will replicate to the client just like any other Instance property would. This would mean I no longer need a custom ReplicationService for my custom classes if I switched to using Attributes for properties. Can an engineer confirm this for me?


We will have more information to share about attributes soon!


It’s been a while, Is there any News on Attributes so far?


Nope, no news just yet. Soon™.


This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.