Hi Creators,
Today, we’re excited to launch BindToSimulation, a long-requested feature that provides a fixed-frequency callback for framerate-independent logic.
Consistent Simulation for Every Player
Currently, script callbacks and internal engine systems (like animations and sensors) depend on a device’s framerate. This means an experience can behave differently depending on whether a player is on a high-end PC or a mobile device, leading to inconsistent gameplay.
BindToSimulation solves this by allowing you to run logic at a guaranteed frequency that is identical across all clients and the server.
| Using PreSimulation at 45 FPS | Using BindToSimulation with 60 Hz at 45 FPS |
|---|---|
![]() |
![]() |
Smooth Suspension: BindToSimulation maintains stable physics at 60 Hz, preventing the unpredictable gameplay seen when tied to lower frame rates.
| Using PreSimulation at 24 FPS | Using BindToSimulation with 60 Hz at 24 FPS |
|---|---|
![]() |
![]() |
Precision at Low FPS: Decoupling logic from rendering ensures the arm moves accurately and smoothly, even when the frame rate drops to 24 FPS.
Why This Matters
-
Framerate Independence: Your game logic will no longer speed up or slow down based on a user’s FPS.
-
Consistent Results: Achieve repeatable gameplay behavior across clients and server, which is required for features like Server Authority.
-
Improved Reliability: The UseFixedSimulation rollout moves internal systems—like Humanoid logic and ControllerManagers—to a fixed frequency to prevent low-FPS glitches.
Fixed Frequency Options
To balance performance with precision, we are launching with a specific set of supported frequencies:
- Hz1, Hz5, Hz10 (Low frequency for background logic)
- Hz15, Hz30 (Standard frequency for general movement)
- Hz60 (High frequency for precision control systems)
Please note: If no frequency is specified, the system defaults to 30 Hz to keep compute costs lower by default.
How to Use BindToSimulation
-
Call the API: Use
RunService:BindToSimulation(callback, frequency). -
Select Frequency: Pass one of the
Enum.StepFrequencyoptions listed above. -
Check Attributes: To lower the load on the physics system, only properties marked with the Simulation Access attribute can be modified during a callback.
Code Example
Lua
local RunService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
-- Run character movement at a fixed 15Hz regardless of client FPS
RunService:BindToSimulation(function(dt)
local cm = character:FindFirstChildOfClass("ControllerManager")
if cm then
local moveInput = player.InputContexts.Character.Move:GetState()
cm.MovingDirection = Vector3.new(moveInput.X, 0, moveInput.Y)
end
end, Enum.StepFrequency.Hz15)
The UseFixedSimulation Rollout
In addition to the new callback, we are rolling out UseFixedSimulation. While BindToSimulation works independently, enabling this rollout ensures engine consistency by syncing internal systems to a fixed update frequency across all clients and the server.
This rollout specifically standardizes the timing for:
- Animation tracks and playback speed.
- Humanoid logic and state calculations.
- ControllerManagers and physics sensors.
UseFixedSimulation will follow these three stages:
-
Opt-In (Current):
Defaultis set toDisabled. You can manually set it toEnabledto begin testing. -
Opt-Out:
Defaultwill be set toEnabled. You can still manually disable the feature temporarily if you encounter compatibility issues. Please report any issues that require you to opt-out. -
Enabled Everywhere: The feature will be permanently enabled for all experiences to ensure global engine standardization.
We do not have a finalized date for the transition to the Opt-Out phase, but we will provide an update with plenty of lead time before any changes occur. We highly recommend testing this property in your experiences today to ensure a smooth transition.
We’ve heard your requests for better simulation tools. We can’t wait to see how this improves your competitive and physics-heavy experiences. Please share any feedback and demos you build with this tech in the comments below!
Happy Building,
Roblox Physics Team




