Architecture decision records
An ADR is accepted architecture. It outranks designdoc.html only for the decision it names, and only when it says what it supersedes.
Status values: Proposed, Accepted, Superseded, Rejected.
Do not edit an Accepted ADR in place to change the decision. Write a new ADR and set Superseded By on the old one.
| ID | Title | Status |
|---|---|---|
| 0001 | One engine, multiple hosts | Accepted |
| 0002 | PlayCanvas upstream and license policy | Partially superseded by 0017 |
| 0006 | WebGPU as the first graphics backend | Partially superseded by 0017 |
| 0003 | No BSP world model | Accepted |
| 0004 | Hierarchical coordinate frames | Accepted |
| 0005 | CryEngine license boundary | Accepted |
| 0007 | Materials compile through an IR | Accepted |
| 0008 | Research stays behind flags | Accepted |
| 0009 | ECS identity separated from storage | Accepted |
| 0010 | Documentation authority order | Accepted |
| 0011 | CLI parity for critical editor operations | Accepted |
| 0012 | Content-addressed derived data | Accepted |
| 0013 | World identity is multiplayer-ready | Accepted |
| 0014 | Codename JARVIG | Accepted |
| 0015 | Dependency direction | Accepted |
| 0016 | Repository layout | Accepted |
| 0017 | Native engine core and multi-host runtime | Accepted |
| 0018 | Engine-owned capabilities | Accepted |
| 0019 | RHI hides backend types | Accepted |
| 0020 | Render space and clip convention | Accepted, depth mapping partially superseded by 0021 |
| 0021 | Reversed-Z and an infinite far plane | Accepted |
| 0022 | API layers and one type registry | Accepted |
| 0023 | ABI struct negotiation and calling convention | Accepted |
| 0024 | GPU resource lifetime | Accepted |
| 0025 | A render view is not a world | Accepted |
| 0026 | A render snapshot is not a world | Accepted |
| 0027 | Texture color space is metadata, not a shader guess | Accepted |
| 0028 | Standard metallic/roughness surface | Accepted |
| 0029 | Direct light direction, units, and view packets | Accepted |
| 0030 | Graphics adapter policy belongs to JARVIG | Accepted |
| 0031 | The native editor shell is not the engine | Accepted |
| 0032 | The dock tree is editor state, not a window tree | Accepted |
| 0033 | The editor camera is not a scene entity | Accepted |
| 0034 | The transform gizmo is editor overlay state | Accepted |
| 0035 | HDR scene color is not the swapchain | Accepted |
| 0036 | Environment diffuse is scene lighting | Accepted |
| 0037 | Opaque materials cull back faces | Accepted |
| 0038 | Environment specular is split-sum until a cubemap exists | Accepted |
| 0039 | A local reflection probe is captured scene radiance | Accepted |
| 0040 | An authorable world object has one EntityUuid | Accepted, duplicate/delete sentence superseded by 0041 |
| 0041 | Duplicating or deleting an entity owns its subsystem record | Accepted |
| 0042 | Reflection probe mips are a GGX prefilter | Accepted |
| 0043 | Direct-light shadows are a visibility term | Accepted |
| 0044 | Indirect diffuse is probe irradiance | Accepted |
| 0045 | A project and a level are documents, not GPU state | Accepted |
| 0046 | One renderer, scalable quality, optional ray tracing | Accepted |
| 0047 | Direct shadows are cascaded visibility | Accepted |
| 0048 | A game framework sits above the world | Accepted |
| 0049 | Component membership is not a second registry | Accepted |
| 0050 | The authored world is source data; the runtime world is an instance | Accepted |
| 0051 | An imported mesh is an asset, not a level | Accepted |
| 0052 | An in-process job queue is not a second engine | Accepted |
| 0053 | A joint rides on the local frame | Accepted |
| 0054 | The character editor edits the joint | Accepted, level-open sentence partially superseded by 0056, character isolation by 0059 |
| 0055 | A character document is rigid parts on the joint | Accepted, pivot sentence partially superseded by 0056, startup-level sentence by 0059 |
| 0056 | Sockets sit on the ball, and the level editor is the default | Accepted, pivot-click sentence partially superseded by 0057, character-entry sentence by 0059 |
| 0057 | Joint markers are picked in the Character Editor | Accepted |
| 0058 | Terrain is a local heightfield in the existing world | Accepted. Character isolation is 0059 |
| 0059 | A character asset, a player definition, and a player start are different objects | Accepted. Empty character path clarified by 0060 |
| 0060 | The hub chooses a project before the editor starts | Accepted |
| 0061 | Virtual geometry defaults on. Microgeometry stays adaptive | Accepted |
| 0062 | A parametric solid is the object. Meshlets and Einstein are derived | Accepted. The size-only save sentence is superseded by 0066 |
| 0063 | A world's render residency does not outlive that world | Accepted. The empty-record sentence for a parametric solid is superseded by 0064 |
| 0064 | A parametric solid builds its clusters from the derived surface | Accepted. The close-view patch sentence for an exact solid is superseded by 0065. The size-only save sentence is superseded by 0066 |
| 0065 | An exact parametric solid is classified and draws no relief | Accepted. The size-only save sentence is superseded by 0066 |
| 0066 | A solid keeps its parameters, and the inspector shows what it can do | Accepted. The permanent Modeling form and the mouse-up face commit are superseded by 0067 |
| 0067 | A modeling operation is one session across the toolbar, the panel, and the viewport | Accepted. Mixing commands into Features is superseded by 0068 |
| 0068 | Selection promotes, and an edit is one transaction | Accepted |
RFCs are not in this list. See ../rfc/README.md.