Survey of open-source (MIT/Apache unless noted) three.js work relevant to a first-person walk-and-edit mode, verified 2026-08-24. Hard constraint throughout: the Pascal host renders with WebGPURenderer, so anything we adopt must keep movement/collision on the CPU (BVH, octree, WASM physics, camera math) and never touch WebGL-only calls.
- three-mesh-bvh (
gkjohnson/three-mesh-bvh, MIT, ~3.5k★) — theexample/characterMovement.jspattern: build a BVH over the house meshes we're already rendering, slide a capsule against it withshapecast. No physics engine, no WASM, ~200 lines to own. Primary candidate for collisions — the editor's walls/floors are already meshes. (Avoid its GPU shader extensions — WebGL-only.) - @react-three/viverse (
pmndrs/viverse, ~130★) —<SimpleCharacter/>- BVH physics body, official first-person tutorial. Quickest R3F drop-in to prototype with, ejectable to (1).
- three-player-controller (
hh-hang/three-player-controller, MIT, ~254★, very active) — most feature-complete standalone controller: first/third person, BVH in a worker, ground detection, moving platforms, mobile joystick. Mine its step/ground logic. - three.js
games_fpsexample (MIT) —examples/jsm/math/Octree.js+Capsule.jsand a ~300-line player loop: gravity, jump, air control, throwing ballistics. Leanest vendorable core, zero deps. - react-three-rapier + ecctrl (+ isaac-mason/sketches
rapier/pointer-controls) — the branch to take only when we need real dynamic objects: grab/carry via a joint or a kinematic "hold anchor" ~1.5 m in front of the camera, release with an impulse to throw. Rapier ships a built-inKinematicCharacterController(auto-step, snap-to-ground).
- Mugen87/dive (MIT) — cleanest complete vanilla three.js FPS architecture (weapons, nav-mesh AI, spatial audio), by a three.js core maintainer.
- mrdoob/three-quake (GPL-2.0 — read only) — the gold standard for
movement feel: acceleration, friction, air control in
cl_input.js. - simondevyoutube/ThreeJS_Tutorial_FirstPersonCamera (MIT) — head-bob phase and lerped pitch/yaw worth layering on any collider.
- swift502/Sketchbook (MIT, archived) — character state-machine design (idle/walk/sprint/jump transitions).
- pmndrs/drei —
PointerLockControls+KeyboardControls, the standard R3F WASD input pattern; renderer-agnostic. - verekia/manapotion (MIT) — pointer-lock/input state outside React re-renders; nice glue for a game mode inside a React app.
The Pascal editor already ships a first-person mode (setFirstPersonMode +
FirstPersonControls: pointer lock, spawn point, capsule controller at eye
height) — but it is view-only: entering it sets the host's noEditing
gate. Boots v0 rides that mode as-is; the plugin's whole reason to exist is
to progressively bring editing into it (tool belt, work-the-cone,
grab & carry), using the shortlist above for collisions and interactions.
three-quake (GPL-2.0), enable3d (LGPL-3.0), and the small unlicensed
sample repos (doppl3r/*, icurtis1/*) are reference-only — nothing from
them lands in this codebase.