Scripting changelog
What changed in the scripting API, newest first.
2026-10-04: animations, and Studz spellings for Roblox's
- Animator.
character.Animator(also on a rig and itsHumanoid) plays the clips the character model ships,RunandJump:animator:Play(clip, { Speed, Weight, Loop, Limbs, Fade, Start })returns a track withSpeed,Weight,Loop,Time,Pause,Resume,Stop(fade),FinishedandAwait. Tracks play on the limbs you pick and blend over each other and over the built-in animation.animator.Locomotion = falseturns the automatic run and jump animation off, andanimator.LocomotionSpeedchanges how fast it plays. At most four tracks play at once. A respawn interrupts them. Everyone sees them: the server sends what is playing, and each client keeps its own clock. See Animations and the examples. :ResetLimbs()removes poses only and leaves playing clips alone.:ResetAppearance()clears poses and clips.- Roblox spellings are deprecated in favour of Studz ones. Every old spelling still works, gives the same result and prints one warning that names the replacement. Lowercase and snake_case forms of them (
getChildren,walkSpeed) point at the new name too. The full list is in Roblox compatibility. In short:- Finding things:
FindFirstChildis nowFindChild,FindFirstChildOfClassandFindFirstChildWhichIsAareFindChildOfClass,FindFirstAncestor(OfClass/WhichIsA) areFindAncestorandFindAncestorOfClass,GetChildrenisChildren,GetDescendantsisDescendants,GetFullNameisFullName,WaitForChildisAwaitChild. - Players:
GetPlayersisList,GetPlayerByNameisFindByName,GetPlayerByUserIdisFindById,GetPlayerFromCharacterisFromCharacter,LoadCharacterisRespawn,TakeDamageisDamage,WalkSpeedisSpeed,JumpPowerisJumpForce. - Events:
signal:Connectissignal:On,connection:Disconnectis:Off,connection.Connectedis.Active,RunService.HeartbeatisFrame,RenderSteppedisDraw, a button'sMouseButton1ClickandActivatedareClicked. - Remotes:
FireServerisToServer,FireClientisToPlayer,FireAllClientsisToAll,OnServerEventisFromClient,OnClientEventisFromServer,InvokeServerisCallServer,OnServerInvokeisOnServerCall. - Properties: sounds use
Speed,LoopandMaxDistance(notPlaybackSpeed,Looped,RollOffMaxDistance), parts useLinearVelocity,AngularVelocityandSurfaceVelocity(notAssemblyLinearVelocity,AssemblyAngularVelocityandVelocity, which was never a physical velocity here), interface elements useTextColor,BackgroundColor,BorderColor,BorderWidth,ShadowColorandShadowTransparency(not the...3andStrokeforms), and anything with a colour usesColorrather thanColor3. - Other:
game:GetServiceisgame:Service,task.delayistask.after, andDebris:AddItem(inst, seconds)isinst:DestroyAfter(seconds).
- Finding things:
- New:
inst:DestroyAfter(seconds). - Error messages and "did you mean" hints use the Studz spellings.
- Protocol 13: player states in snapshots carry what is playing. Clients and servers must update together.
- Polycarbonate: autocomplete and the API reference list the Studz names and the animation members.
2026-10-03: welds and posable limbs
- Welds. New classes
WeldConstraintandWeldwithPart0,Part1,C0,C1andEnabled:Part1is held atPart0 * C0 * C1:Inverse()and followsPart0wherever it goes (a script moving it, physics rolling it, another weld carrying it). AWeldConstraintrecords the offset the parts have when both are set. Alsopart:WeldTo(other)andpart:BreakWelds(). Welds work in chains, hold unanchored parts (they are anchored while held) and move the part's collision with it. See Welds. - Parts welded in Polycarbonate follow now. The Weld tool and the
Weld toproperty only took effect when the place was built, so a script that moved a part left its welded children behind. They follow like any other weld. - Posable limbs.
character.Head,.Torso,.LeftArm,.RightArm,.LeftLegand.RightLeg(before onlyHead,TorsoandHumanoidRootPartexisted, and all three just meant "the player") acceptTransform(aCFrameturn and shift about the joint, drawn on top of the built-in animation),Scale,Size,Visible,Transparency,ColorandColor3. Everyone sees the poses.limb.CFrame/Position/Orientationnow give the limb's real place in the world, and assigning them poses the limb there.:ResetLimbs()clears them (also onResetAppearance, and when the character dies). See Limbs. - Rigs have the same limbs:
rig.Head,rig.RightArmand so on, stored with the rig and replicated with it.rig.Humanoid:ResetLimbs()clears them. - A weld can follow a limb:
part:WeldTo(character.Head)orweld.Part0 = character.RightArm. The part follows the character and any pose given to that limb. character:GetChildren()lists all six limbs, and the Roblox spellings (character["Left Arm"]) find them.- Protocol 12: player states in snapshots carry limb poses (one byte when nothing is posed). Clients and servers must update together.
- Polycarbonate: the new members and methods in autocomplete and the API reference, the
weldandwavesnippets, and theWave PadandHat Padtemplates.
2026-10-03: humanoid rigs (NPCs)
- Rigs are drawn in the real client and in playtests (they only had collision before), with a nametag, and animate when they walk.
- A rig is its own character:
rig.Humanoid,rig:FindFirstChildOfClass("Humanoid"),rig.HumanoidRootPartandhumanoid.Parent. A rig part can be moved, recoloured and so on like any part. - Own stats:
Health,MaxHealth,WalkSpeed,JumpPowerandDisplayNameper rig (before they read the player's). Also:TakeDamage,:Heal([amount]),:Kill()and:LoadCharacter()(revives in place). - New on rig Humanoids:
:MoveTo(position),:Stop(),:LookAt(position or part),.IsMoving,.RootPart, and the signalsMoveToFinished(reached),HealthChanged(health)and a per-rigDied. - A dead rig disappears and stops blocking the way. A moving rig takes its collision with it.
- Polycarbonate: rig stats in the Properties panel, the new members in autocomplete and the API reference, and a
rigpatrolsnippet.
2026-10-02: data stores
DataStoreService(numbers only):GetDataStore(name),GetAsync,SetAsync,IncrementAsync,RemoveAsync. Keys are strings, numbers or players. Saved by the website, and kept in memory in Polycarbonate.leaderstatsnumbers are loaded and saved automatically (autosave every 30 s, on leave and on shutdown). A failed load never overwrites saved data.Players:SetStatsSaving(false)opts out.- A leaving player's
leaderstatsand other objects parented to them are removed instead of piling up on the server. - Fixed: cylinders were drawn with their walls facing inwards.
2026-10-02: API cleanup
- One official spelling per member. About 150 duplicate method registrations (lowercase, camelCase, snake_case,
find, the old "native" shorthand) were removed. They now resolve through a deprecation layer that warns once and forwards to the official spelling. Property aliases (pos,solid,Speed, ...) are resolved the same way. - Members are checked per kind of object. A member of another kind (
part.Health), a typo, a value of the wrong type and non-finite numbers are errors with suggestions. Plain tables are still accepted where aVector3,UDim2orColor3is expected, with a warning. - New:
part.PlayerTouched,part.PlayerTouchEnded,part.Clicked,Instance.Create,inst:GetChild,inst:TweenTo,tween:Await,Players:ForEachPlayer,player:ForEachCharacter,remote:Listen,signal:Once,task.after,task.every,task.debounce,player:Tell, the instance eventsChanged,GetPropertyChangedSignal,ChildAdded,ChildRemoved,DescendantAddedandDestroying, plusmath.lerp,table.cloneandtable.clear. - Destroying is thorough.
DestroyandClearAllChildrenremove descendants (before, grandchildren of a destroyed part stayed in the world as orphans) and forget tags, attributes and listeners.Clonecopies the subtree and keeps the name.Parent = nildestroys. - Buttons. A
TextButton's click is a real signal:Connectreturns a connection, andon_clickno longer registers its handler twice.Changedon value objects passes the new value. - Resource limits. Lua memory is 64 MB on the server and 48 MB on a client (was 256 MB and 128 MB; the server's limit was never applied below 256). Also 20,000 objects, 500 GUI elements, 500 handlers per signal, and output capped at 2,000 lines. Tween records are freed when unused (they leaked before).
- Templates and Polycarbonate autocomplete use the official API.
2026-10-02: reliability pass
- The per-event time limit now covers every coroutine. Before, only code on the main Lua thread was cut off. Script main chunks and event handlers run in coroutines, so
while true do endin aScriptwas not stopped. task.waitworks inHeartbeat,RenderSteppedand GUI click handlers.signal:Wait()andInvokeServerpark the thread instead of resuming it on the next step with a bogus value.- Handlers of a signal run in connect order.
- Tweens honour
RepeatCount,ReversesandDelayTime. Added theQuart,Quint,Exponential,Circular,BackandElasticstyles. FixedCubic.CancelfiresCompleted("Cancelled").:Play()restarts a finished tween. Added thePlaybackStateproperty. - Script errors are reported under the script's name and line.
- GUI element ids are never reused after a destroy.
