[Full Release] The Future of Character Movement: Character Controller Library

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.

:high_voltage: 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.

:brick: 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.DevEnableMouseLock to 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.

image2

Prefer the legacy “feel”?

The system is built around configurability. You can easily achieve close-to-legacy behavior:

  • Disabling Conservation of Momentum: Turn off MaintainLinearMomentum and MaintainAngularMomentum on the AirController.
  • Uniform Ground Friction: Set FrictionWeight to 100 and Friction to 2 on the GroundController to maintain sticky movement on any ground Part. .
  • “Classic” Roblox Death: Set StarterPlayer.BreakJointsOnDeath to True.
  • Re-Enabling Shift-Lock: Set Player.DevEnableMouseLock to True via a script at runtime.

:high_voltage: 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.

image3

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.

:hammer_and_wrench: 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.

:world_map: 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).

:link: 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


:hammer_and_wrench: 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.

:mobile_phone: 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?

  • StarterHumanoid and StarterCharacter work 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 AuthorityMode attribute 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.
141 Likes

This topic was automatically opened after 11 minutes.

this is nice but it’s really raw

19 Likes

The image for this appears to be missing. Will a documentation page covering the changes be released in the coming days?

Overall, great to see evolutions to Avatar technology in terms of performance. If you looked at how it was internally during the early stages of development (~2024-2025), there was options like putting characters under Actor’s for multithreaded support. Has this been scrapped?

5 Likes

So useful when making realistic games on Roblox, nice job!

4 Likes

Is there still plans to add an official Luau implementation of how humanoids currently work as proposed here:

2 Likes

What exactly do you mean by this? This is worded like you have just disabled shift lock in every existing game

7 Likes

Recently all custom PlayerModules’s were removed from my experiences without an update on our end. Could this update have something to do with that? @m0bsterlobster

2 Likes

What it means is that if you use the CCL, Player.DevEnableMouseLock is set to false.

6 Likes

The option to turn this update on does not seem to be present unless your game is set to R15.

1 Like

This release doesn’t affect existing places.

8 Likes

will there ever be a Physics Controller implementation for R6 in the future? Or is there a way to do that manually?

2 Likes

FYI the toggle works IF you set the game to R15, enable it, then set it back to R6. However, it seems to be very broken, laggy and in general not good :frowning:

Not sure if I did anything wrong, but I followed what they said to do, disabled all my scripts affecting movement, and it was broken as all hell and just completely unplayable.

2 Likes

As mentioned in the FAQ:

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.

4 Likes

Gotcha. Does this controller update work with server authority yet?

2 Likes

bhopping without scripting is possible :face_holding_back_tears:

26 Likes

This is that! Have you tried it yet? What is missing for you? We plan to keep updating and adding configurations to meet all kinds of use cases. We want to build it with you!

4 Likes

2 things, the toggle doesn’t appear unless if R15 is selected or R15 and R6 is selected, it is completely hidden when only R6 is selected.

When server authority and the CCL are enabled, the behaviour you get with R6 is not playable at all.


When server authority is disabled, it works but is noticeably choppy with the camera movement and thus and a little unpleasant on the eyes.

I think I’ll be sticking to regular humanoids for now.

14 Likes

I assume the current advice is to disable it when updating the humanoid description then enable it again?

1 Like

One problem I’ve been hackily trying to fix for years is shift lock idle rotation. I find it unimmersive that while your character isn’t moving it can rotate freely when it should face one way regardless of the camera rotation until the character moves.

1 Like