Hi Creators,
Today, we are officially releasing the Character Controller Library for use in live experiences. This system, composed of the AvatarAbilities Library and the ControllerManager it was built on, represents a foundational shift: moving character logic and physics from the hard-coded Engine “black box” of the Humanoid into a transparent, performant, and extensible Luau implementation.
Our vision is simple: enable natural and immersive character motion while giving you control. By moving to Luau, it is now possible to debug, configure, and extend character behavior just like any other part of your game script, without having to build a system from scratch or sacrifice performance.
We believe the future of character movement on Roblox is Luau-based and intend for this system to become the new default for character control.
- No Changes to Existing Experiences: We will not change existing experiences and do not intend to deprecate any existing APIs.
- Template Rollout: Starting today, the Character Controller Library is defaulted to ON in the Classic Obby template. Over the next several months, we will progressively default it to ON in all Studio templates.
- Flexibility: Switching between the legacy Humanoid and this new Character Controller Library is available via Avatar Settings.
Maintaining High Performance
One of the biggest hurdles in moving logic out of the Engine and into Luau was maintaining performance. We are thrilled to share that in real-world scenarios, measured performance varies from the same as Humanoid to 2x faster on both the server and players’ devices, depending on in-game circumstances. We also plan to roll out further optimizations soon to make physics-based characters the fastest, and most reliable, way to model character motion – even with large numbers of NPCs.
The Foundation: Humanoid Parity with Configurable improvements
For this initial release, we are providing Abilities that bring this new character controller to parity with Humanoid (Walk, Run, Jump, Swim, Climb, Sit). Moreover, we’re also introducing intentional improvements to increase realism and promote intuitive building.
-
Conservation of Momentum: Characters now maintain linear and angular momentum when leaving the ground. You no longer have to manually script complex CFrame math to keep players from “sliding” off moving platforms or vehicles.
-
Friction-Based Ground Movement: Walking now respects material properties. Characters will naturally slide on ice or have better traction on high-friction surfaces like rubber.
-
Standardizing Default Controls: We have programmatically disabled the legacy “Shift-Lock” by setting
Player.DevEnableMouseLockto false. The plan is to replace this with a much more flexible Strafe Ability soon, which will allow for better camera and movement integration across all platforms.

Prefer the legacy “feel”?
The system is built around configurability. You can easily achieve close-to-legacy behavior:
- Disabling Conservation of Momentum: Turn off
MaintainLinearMomentumandMaintainAngularMomentumon theAirController. - Uniform Ground Friction: Set
FrictionWeightto 100 andFrictionto 2 on theGroundControllerto maintain sticky movement on any ground Part. . - “Classic” Roblox Death: Set
StarterPlayer.BreakJointsOnDeathto True. - Re-Enabling Shift-Lock: Set
Player.DevEnableMouseLockto True via a script at runtime.
What you can do today
- Runtime Configuration: Modify Ability and Physics Controller parameters via Luau scripts in real-time. Some examples of modifiable character behavior includes:
- Turn Speed: Modify the TurnSpeedFactor or RollSpeedFactor on the various Controllers to adjust how quickly the character can rotate. It can also be changed per-controller.
- Air Movement: Modify the AirController.MoveMaxForce to adjust how much players can influence their character while in the air.
- Knocked Over: Modify the Balance properties of the Controller instances to determine how difficult it is for the character to get knocked down by external forces.

For a full breakdown of every tunable parameter and a sample script for real-time modification, check out our Character Controller Library guide.
- Granular Toggles: You can disable specific default Abilities via Avatar Settings. For example, disable “Climbing” for specific levels or “Jumping” until a player unlocks it.
How to Adopt the Character Controller Library
-
Existing Experiences: You can easily opt-in via Avatar Settings in Studio. Go to the Movement section of the Avatar Settings and select Character Controller Library. You should see a list of Abilities show up after doing so; you can deselect any you’d like to disable in your game.
Note: In order to access Avatar Settings, you must first Save or Publish your experience.
-
New Experiences: While we have no plans to deprecate existing APIs, we strongly recommend building all future projects on the Character Controller Library. Starting with this foundation ensures you can leverage new default abilities (like Crouch and Sprint) and performance improvements as they land, without needing to refactor your character logic later.
Note: If you are starting from a template other than the Classic Obby, simply follow the opt-in steps via Avatar Settings to enable this new character controller.
The Roadmap: What’s Next
The ecosystem is expanding quickly. Soon, you will have access to:
- Rules & Sensors API: Full control to modify the ruleset for abilities in order to decide which abilities block and cancel, or require others (e.g. enable climbing when swimming).
- Extended Default Abilities: We’re taking extra time to polish the UX for Crouch, Strafe, and Sprint across all platforms before a live release in the coming months. We’ve temporarily removed them from the Studio Beta, but they will be coming back very soon!
- Object Interaction: Native Reach and Hold abilities are coming soon to Studio Beta.
- Custom Ability API: Register your own, custom abilities triggered by Input Actions (e.g., Double Jump), Environmental Sensors (e.g., flailing when standing on Lava), or Object Interaction (e.g., gaining a “Swing” ability after picking up a tennis racket).
Resources
-
[Documentation]: Full API references and tuning guides.
-
[Studio Beta Post]: For deeper-dive on technical architecture.
-
[CCL Reference Place]: Our uncopylocked testing ground to easily test all default abilities (Swimming, Climbing, etc.).
Note: We’ve removed the scripts that previously automatically loaded in the new Character Controller Library, so in order to test this new system in the reference place file, you’ll need to Save or Publish the experience in Studio and then toggle on the Character Controller Library via Avatar Settings.
Your feedback is invaluable! Please let us know if you see any behavior differences between the Humanoid and the new library that we didn’t cover above; we will let you know if it’s an intentional difference or we’ll add the newfound bug to the list of follow-up work.
Happy building,
Roblox Avatar Movement Team
Known Issues & Planned Polish
Click here to view
We are actively working to iron out these behaviors. If your experience relies heavily on any of the following, please test thoroughly before fully switching over.
Movement & Physics
- Slope Reliability: Walking up steep slopes below the CharacterMaxSlopeAngle is currently less reliable than the legacy Humanoid and may result in slipping.
- Ladder-to-Platform Transitions: Characters may momentarily “dip” into the floor when transitioning onto a platform on top of a ladder.
- Wall Sticking: If a player holds a movement input while jumping against a flat wall, the character may “stick” to the surface until the input is released.
- Truss/Ladder Jitter: The new ladder sensor keeps the character normal to the detected ladder’s rungs. This causes characters to jitter when climbing truss corners due to alternating normals and causes issues when using round ladder rungs.
- Shallow, Sloped Water: There is a transition issue when running along a slope into shallow water, where the character might jitter due to alternating between running and swimming.
API & Logic
- MoveTo Support: Humanoid:MoveTo is not yet supported by the new system.
- Single-Collider Incompatibility: Swimming does not currently function well if the “Single-Collider” avatar setting is enabled.
- HumanoidDescription Updates: Updating a character’s HumanoidDescription can cause them to die, due to the neck connection being lost momentarily. This is not an issue if the character’s Dead ability has the “RequiresNeck” attribute unchecked.
- R6 Experiences: Though R6 is supported by the CCL, the UI to enable the CCL is currently hidden if you set your experience to “R6 Only”. If you enable the CCL with R15 avatars and then set the experience to “R6 Only”, the characters will still spawn with the CCL.
Camera
- First-Person Re-orientation: When zooming from first-person back to third-person, the character will snap back to its previous facing direction rather than maintaining the camera’s orientation.
Upcoming Touch UI Changes
In the coming weeks, we will be adjusting the default Movement and Jump touch buttons to better align with ergonomic zones on mobile devices. This also gives us space to support touch buttons for upcoming default abilities.
Recommendation: Please review your custom UI placement in the regions shown below. We recommend avoiding this area (roughly 60px from each side of the screen) to prevent overlapping controls once this update rolls out.
FAQs
Click here to view
Does this support R6 characters?
- Currently, the AvatarAbilities library supports both R6 and R15 rigs. We plan to remove any requirements on specific rig types in the future. Please note the Known Issue around the UI toggle between Humanoid and CCL not showing up if your experience is set to “R6 Only”. This is a bug we’re working on actively.
Are NPCs Supported?
- Support for using the AvatarAbilities library with NPCs is coming soon, alongside support for custom abilities.
How does this new system handle StarterCharacter and StarterHumanoid?
StarterHumanoidandStarterCharacterwork exactly as before since they are part of the engine’s core character spawning functionality.
How is the library updated?
-
The library is loaded dynamically from an asset. We may update it anytime, but we want to set similar compatibility expectations as any native engine API.
Any breaking changes will be rolled out following the typical “three-phase rollout” process we normally use for breaking changes to native engine APIs. We’ll share a rollout schedule each time.
We may release backwards compatible bugfixes same-day. If we unintentionally break your experience, we’ll revert and try a different fix or re-release it as a breaking change rollout.
We don’t promise maintenance support for old versions of the library. If you use your own copy of the library, we’ll treat that similarly to any other script in your experience; we’ll still try to avoid engine changes that would break it unintentionally, but we won’t make any changes or fixes to it ourselves.
Does the AvatarAbilities Library support Server Authority?
Yes. The Character Controller Library is compatible with the Server Authority beta, though some features are still being refined.
- How to enable: Ensure your experience has the Server Authority Studio Beta enabled and has toggled on the Character Controller library. Then, set the
AuthorityModeattribute on Workspace to “Server” (see screenshot below). - What works: Abilities will automatically sync across peers, and movement is fully compatible with server rollback and resimulation.
- What to expect: You may encounter minor animation glitches or bugs. Full support, including improved rollback fidelity and animation fixes, is actively being worked on.



