Files
GDevelop-Heretek/GDJS
John Smith 08a49e2f55 fix: remediate audit of studio pipeline, 3D culling, and instancing
16-reviewer audit of ae815f489 (103 findings) remediated in six groups.

1. Lazy THREE init (runtimeobject.ts): scratch Box3/Matrix4/Euler allocated on
   first use, so a 2D-only export (never loads three.js) boots.

2. Culling correctness: computeAABB uses |size|/2 half-extents and places the box
   at the true rotation pivot C' = P + R*(C-P); custom-object children union
   conservative boxes; the frustum is rebuilt in the boxes' space (right-multiply
   _threeGroup.matrixWorld) with a numeric cache incl. camera-Z; hide/cull route
   through setCullingVisible/applyRenderVisibility (no detached-carrier writes);
   custom-object children and nested tile maps no longer cull with a wrong window.

3. Studio pipeline wedge (Utils.js + Studio/*): lock release over all calls,
   working marks only editor calls, spawn failures reach the model, plan merge on
   objects (JSON.parse bug), one persistent LoopGuard with real call_id +
   re-arming + recordSuccess, RequestWriteGate self-retry + supersede-rejects,
   UseStudioRuntime fire-and-forget gate write + recomputed plan + sent check,
   FinalizeSubAgents terminal-'error' + executed-but-unsent + turn-cap + enriched
   report, send-returns-boolean, BYOK cache write-through, suspension cascade,
   turn-cap dispatch, stand-alone cannot spawn.

4. Instancing: useInstancing now serializes (C++); the pool grows without null.add
   and collapses deleted slots; the instance matrix is normalized
   (carrier * correction) and rewritten on rotation/hide; animated/skinned/morph/
   multi-mesh models rejected; per-slot shadows; layer moves re-acquire.

5. BYOK role enforcement: studioRoleId persisted and re-applied every turn (tools +
   prompt); dispatch filters tools outside the role; readOnly roles skip edit
   approval.

6. Warnings + Info: mutating-tool classification, hasOwnProperty role guards,
   cache-message merge, spawn arg caps, per-batch GDD note, fan-out cap, plan
   dependsOn-omission + caps + duplicate-id + fail-closed + trimmed ids, tilemap
   rotated/mirror bail + window margin + null-map guard, pool dispose wired to
   unloadScene, schema description required, plus doc/comment corrections.

Verified: engine builds clean; boot + computeAABB (13/13) + Model3DInstancePool
(9/9) harnesses pass; Jest green for src/AiGeneration + src/AI (175), CustomAIClient
(27, incl. the critical second-turn role regression), PlanStore (25),
FinalizeSubAgents (21), LoopGuard (18), RequestWriteGate (11), Roles (9).
2026-09-22 15:31:25 -04:00
..

GDevelop JavaScript Platform (HTML5 game engine)

GDevelop JavaScript Platform (GDJS) is the game engine for making HTML5/Javascript based games with GDevelop.

📚 Game developer, searching for the documentation? Go to the GDJS Runtime (game engine) documentation.

1) Installation 💻

To do changes in the game engine or create extensions, install the development version (click here to learn more).

2) Development 🤓

GDJS is composed of two parts:

  • the JavaScript game engine (Runtime folder), called GDJS Runtime.
  • the C++ part exposing GDJS to GDevelop IDE (GDJS folder), including the Exporter and classes doing transpilation from events to JavaScript, called GDJS Platform.

GDJS Runtime (game engine)

The game engine is in the Runtime folder. If you want to work on the engine directly, follow the GDevelop 5 README about the development of the game engine.

  • To use the game engine, you can look into the GDJS Runtime (game engine) documentation.

  • To run tests for the game engine, go to GDJS/tests, run npm install and npm test. More information in the README for the tests.

  • To launch type checking with TypeScript, run npm install and npm run check-types in GDJS folder.

Building GDJS Runtime

To build the GDJS Runtime, run npm run build in the GDJS folder.

Build Options:

  • Production build (default): npm run build - builds with minification enabled
  • Debug build: npm run build -- --debug - builds without minification for easier debugging
  • Custom output path: npm run build -- --out=/path/to/output - specify custom output directory

Examples:

# Standard production build
npm run build

# Debug build for development (no minification)
npm run build -- --debug

# Debug build with custom output path
npm run build -- --debug --out=./debug-build

GDJS Platform (exporters, code generation...)

Check the GDJS Platform documentation or the full GDevelop developers documentation.

3) How to contribute 😎

Any contribution is welcome! Whether you want to submit a bug report, a feature request or any pull request to add a feature, do not hesitate to get in touch.

License

GDJS is distributed under the MIT license: see LICENSE.md for more information.