
Works on: Desktop, Mobile and Web
<img src="https://github.com/appsinacup/godot-rapier-physics/actions/workflows/runner.yml/badge.svg?branch=main"
alt="Godot Rapier Build"></a>
<img src="https://img.shields.io/badge/Godot-4.7-%23478cbf?logo=godot-engine&logoColor=white" />
<strong>
<a href="https://godot.rapier.rs">Documentation</a> | <a href="https://github.com/appsinacup/godot-rapier-physics/blob/main/CHANGELOG.md">Changelog</a> | <a href="https://discord.gg/v649emcpAu">Discord</a> | <a href="https://github.com/appsinacup/godot-rapier-physics/blob/main/CONTRIBUTING.md">Contributing</a> | <a href="https://github.com/appsinacup/godot-rapier-physics/blob/main/ARCHITECTURE.md">Architecture</a>
</strong>
2D and 3D physics engine for the Godot game engine. with better stability, performance, liquids, determinism, state serialization and no ghost collisions.
Godot Rapier Physics is a 2D and 3D physics drop-in replacement for the Godot game engine through rapier physics engine salva fluids simulation library.
| Stability | No Vibrations |
|---|---|
![]() |
![]() |
| Fluids 2D | Fluids 3D |
|---|---|
![]() |
![]() |
| Body Skin | Inverse Kinematics |
|---|---|
![]() |
![]() |
| No Ghost Collisions | Improved Stacking |
|---|---|
![]() |
![]() |
| Serialization | Deserialization |
|---|---|
| Save Physics State | Load Physics State |
| Locally Deterministic | *Optionally Cross Platform Deterministic |
|---|---|
| Exact simulation every time (on same platform) | Exact simulation on multiple platforms |
Automatic (Recommended): Download the plugin from the official Godot Asset Store using the Asset Store tab in Godot:
Note: For general use cases, use the Faster Version.
Manual: Download the latest github release and move only the addons folder into your project addons folder.
After installing, go to Advanced Settings -> Physics -> 2D or 3D. Change Physics Engine to Rapier2D or Rapier3D.
See godot-rust/ExtensionLibrary.
[dependencies]
godot-rapier = { git = "https://github.com/appsinacup/godot-rapier-physics.git", tag = "v0.8.38", features = ["single-dim2"] }
Feature sets matching the shipped addon variants:
| Variant | Features |
|---|---|
| 2D fast parallel | single-dim2, serde-serialize, simd-stable, parallel, experimental-threads, register-docs, api-4-7 |
| 3D fast parallel | single-dim3, serde-serialize, simd-stable, parallel, experimental-threads, register-docs, api-4-7 |
| 2D enhanced deterministic | single-dim2, serde-serialize, enhanced-determinism, experimental-threads, register-docs, api-4-7 |
| 3D enhanced deterministic | single-dim3, serde-serialize, enhanced-determinism, experimental-threads, register-docs, api-4-7 |
Use exactly one Godot API feature: api-4-4, api-4-5, api-4-6, or api-4-7.
For web/Emscripten builds, replace native experimental-threads with one web feature: experimental-wasm for threaded web builds, or experimental-wasm-nothreads for no-thread web builds. experimental-wasm-nothreads includes experimental-wasm. CI builds web with wasm32-unknown-emscripten, release-wasm, and -Zbuild-std.
When depending on another GDExtension crate, set GDRUST_MAIN_EXTENSION to your extension's ExtensionLibrary type and explicitly forward Godot Rapier's init stages from your extension. Godot only runs one main ExtensionLibrary, so the user's extension must register the Rapier server and classes too:
use godot::prelude::*;
use godot_rapier::RapierPhysics3DExtensionLibrary;
struct MyExtension;
#[gdextension]
unsafe impl ExtensionLibrary for MyExtension {
fn min_level() -> InitLevel {
InitLevel::Servers
}
fn on_stage_init(level: InitStage) {
RapierPhysics3DExtensionLibrary::on_stage_init(level);
}
fn on_stage_deinit(level: InitStage) {
RapierPhysics3DExtensionLibrary::on_stage_deinit(level);
}
}
For 2D projects, use RapierPhysics2DExtensionLibrary.
Do not load the standalone Godot Rapier addon in the same Godot project when bundling it through another Rust GDExtension, because Godot classes can be registered twice.
GamesFromScratch:
Got a game or app you built with this addon? We showcase them on godot.rapier.rs/showcase. Submit your entry here.
The 2D part is pretty stable, though there are some issues, the 3D part is still missing some things. See the Implementation Progress to get an idea of what status it is in and what features it has.
(A.layer & B.mask) != 0 || (B.layer & A.mask) != 0In order to build it as a module, go to: - Godot Rapier Physics Module 2D - Godot Rapier Physics Module 3D
$ claude mcp add godot-rapier-physics \
-- python -m otcore.mcp_server <graph>