DOCS v0.1.13 github

@hatch:physics v0.1.4

Rapier-backed physics. World2D and World3D from one import — bodies, colliders, gravity, force / impulse, position + velocity reads. Bundles rapier2d + rapier3d in a single cdylib so games never have to choose between dimensions at the package level. Wires into @hatch:game for a step-per-frame physics loop.

stable system updated May 3, 2026 source ↗
README
$ hatch add @hatch:physics

MOD physics

CL PhysicsCore

FN PhysicsCore.static world2dCreate(descriptor)

FN PhysicsCore.static world2dDestroy(id)

FN PhysicsCore.static world2dStep(id, dt)

FN PhysicsCore.static world2dSpawnDynamic(worldId, descriptor)

FN PhysicsCore.static world2dSpawnStatic(worldId, descriptor)

FN PhysicsCore.static world2dSpawnKinematic(worldId, descriptor)

FN PhysicsCore.static world2dDespawn(worldId, bodyId)

FN PhysicsCore.static world2dPosition(worldId, bodyId)

FN PhysicsCore.static world2dLinearVelocity(worldId, bodyId)

FN PhysicsCore.static world2dSetLinearVelocity(worldId, bodyId, x, y)

FN PhysicsCore.static world2dApplyImpulse(worldId, bodyId, x, y)

FN PhysicsCore.static world2dApplyForce(worldId, bodyId, x, y)

FN PhysicsCore.static world3dCreate(descriptor)

FN PhysicsCore.static world3dDestroy(id)

FN PhysicsCore.static world3dStep(id, dt)

FN PhysicsCore.static world3dSpawnDynamic(worldId, descriptor)

FN PhysicsCore.static world3dSpawnStatic(worldId, descriptor)

FN PhysicsCore.static world3dSpawnKinematic(worldId, descriptor)

FN PhysicsCore.static world3dDespawn(worldId, bodyId)

FN PhysicsCore.static world3dPosition(worldId, bodyId)

FN PhysicsCore.static world3dLinearVelocity(worldId, bodyId)

FN PhysicsCore.static world3dSetLinearVelocity(worldId, bodyId, x, y, z)

FN PhysicsCore.static world3dApplyImpulse(worldId, bodyId, x, y, z)

FN PhysicsCore.static world3dApplyForce(worldId, bodyId, x, y, z)

CL World2D

NEW World2D.new_(id)

GET World2D.id

GET World2D.destroy

FN World2D.static new(descriptor)

FN World2D.static new()

FN World2D.step(dt)

FN World2D.spawnDynamic(descriptor)

FN World2D.spawnStatic(descriptor)

FN World2D.spawnKinematic(descriptor)

FN World2D.despawn(bodyId)

FN World2D.position(bodyId)

FN World2D.linearVelocity(bodyId)

FN World2D.setLinearVelocity(bodyId, x, y)

FN World2D.applyImpulse(bodyId, x, y)

FN World2D.applyForce(bodyId, x, y)

CL Collider2D

FN Collider2D.static ball(radius)

FN Collider2D.static ball(radius, options)

FN Collider2D.static box(halfWidth, halfHeight)

FN Collider2D.static box(halfWidth, halfHeight, options)

FN Collider2D.static capsule(halfHeight, radius)

FN Collider2D.static capsule(halfHeight, radius, options)

FN Collider2D.static merge_(base, options)

CL World3D

NEW World3D.new_(id)

GET World3D.id

GET World3D.destroy

FN World3D.static new(descriptor)

FN World3D.static new()

FN World3D.step(dt)

FN World3D.spawnDynamic(descriptor)

FN World3D.spawnStatic(descriptor)

FN World3D.spawnKinematic(descriptor)

FN World3D.despawn(bodyId)

FN World3D.position(bodyId)

FN World3D.linearVelocity(bodyId)

FN World3D.setLinearVelocity(bodyId, x, y, z)

FN World3D.applyImpulse(bodyId, x, y, z)

FN World3D.applyForce(bodyId, x, y, z)

CL Collider3D

FN Collider3D.static ball(radius)

FN Collider3D.static ball(radius, options)

FN Collider3D.static box(halfX, halfY, halfZ)

FN Collider3D.static box(halfX, halfY, halfZ, options)

FN Collider3D.static capsule(halfHeight, radius)

FN Collider3D.static capsule(halfHeight, radius, options)

FN Collider3D.static merge_(base, options)