Quick answer: Jolt is a different solver, so some behavior changes on purpose. The most common surprise: an Area3D no longer detects static bodies until you enable Areas Detect Static Bodies in the Jolt settings. Also check joint properties Jolt does not support (the engine warns about them), collision margins, kinematic contact reporting and Jolt's body and contact limits.

Godot 4.4 made Jolt Physics available as a built-in alternative to Godot Physics for 3D. It is faster and more stable with many bodies, and most projects can switch with one setting. Most, not all: Jolt makes different trade-offs, and a few of them change gameplay in ways that look like bugs.

How the switch works

The engine is chosen in Project Settings > Physics > 3D > Physics Engine. Jolt only replaces 3D physics; 2D is unaffected. Jolt-specific options live in their own section of Project Settings, visible with Advanced Settings turned on. You can confirm which engine a running build uses:

print(ProjectSettings.get_setting("physics/3d/physics_engine"))

Switch on a branch and play through your levels before committing to it. Jolt was marked experimental when it was introduced, so read the Jolt page of the Godot docs for your exact version.

Difference 1: Area3D ignores static bodies

For performance, Jolt does not report overlaps between an Area3D and static bodies by default. That covers StaticBody3D, GridMap collision and frozen static rigid bodies. Triggers that should fire when touching level geometry go silent: water volumes that check for the floor, kill zones placed overlapping the level, placement checks for building games.

Enable Areas Detect Static Bodies in the Jolt section of Project Settings. It costs some performance in large static scenes, so if only a few areas need it, consider replacing those checks with shape queries instead.

Difference 2: joint properties

Godot's joint nodes were designed around Godot Physics. Jolt supports their core behavior but not every property, particularly some of the soft-limit and spring settings on Generic6DOFJoint3D, HingeJoint3D and SliderJoint3D. Unsupported properties are reported as warnings when used; check the Output panel after loading a scene with joints. Ragdolls, doors and vehicles built on joints need a playtest after switching, and may need simpler limits.

Difference 3: collision margins and contact feel

Jolt treats the shape margin as a convex radius, effectively rounding the edges of convex shapes. Boxes can slide off ledges slightly earlier and characters can catch less on seams. Jolt also has its own handling of edges on concave meshes and height maps to reduce ghost collisions. If something sits or slides differently, look at the margin-related options in the Jolt settings before rewriting movement code.

Difference 4: kinematic and character contacts

CharacterBody3D movement uses Godot's own move_and_slide logic on top of the physics server, so it usually behaves the same. Contacts between kinematic bodies and other non-dynamic bodies are a different story: Jolt does not generate every one of them by default, which affects code that reads contacts from kinematic or frozen bodies. There is a Jolt setting to generate all kinematic contacts if you depend on them.

Difference 5: hard limits

Jolt preallocates space for bodies, body pairs and contact constraints. Very large scenes can exceed the defaults and print errors when they do. Raise the limits in the Jolt section of Project Settings. Similarly, WorldBoundaryShape3D is a very large finite plane in Jolt rather than truly infinite; objects far enough out can fall past it.

A sensible way to switch

  1. Switch on a branch, then run every level with Debug > Visible Collision Shapes on.
  2. Watch the Output panel for Jolt warnings about unsupported properties.
  3. Test triggers, pickups and kill zones first (Difference 1), then joints, then movement feel.
  4. Profile with the same scene on both engines. If Jolt is not faster for your game, there is no obligation to switch.

Physics regressions after the switch

A trigger that stops firing does not crash; it breaks a quest. Players are the ones who find it. Bugnet's Godot SDK is a single GDScript autoload that watches the engine log and files errors, script errors and fatal errors automatically with recent log lines, a screenshot, the platform, OS, hardware and game version, and players can report everything else through Bugnet.show_widget(). A report filed from the widget arrives with a screenshot and the game version, so you can tell which build the regression came in with.

Frequently asked questions

Why doesn’t my Area3D detect StaticBody3D with Jolt in Godot?

Jolt does not report overlaps between areas and static bodies by default. Enable Areas Detect Static Bodies in the Jolt Physics section of Project Settings, with Advanced Settings shown.

How do I switch Godot to Jolt Physics?

Set Project Settings, Physics, 3D, Physics Engine to Jolt Physics. It is available as a built-in option from Godot 4.4 and only affects 3D physics.

Does Jolt support all Godot joint properties?

No. Some soft-limit and spring properties on Godot’s joint nodes are not supported, and Godot prints warnings when they are used.

Switch engines on a branch, then test every trigger in the game. Areas are where Jolt surprises people.