Wrapper Generator Report¶
Generated by python3 scripts/api_wrapper_generator_report.py --markdown docs/reference/wrapper-generator-report.md.
Draft wrapper output is written to build/wrapper-generator/drafts during local runs and is not committed.
Role¶
The wrapper generator turns Godot's extension_api.json into conservative Kotlin wrapper drafts. Its job is to scale API coverage without hand-writing thousands of MethodBind calls, while refusing shapes where Kanama has not defined ABI, ownership, or marshalling policy yet.
Generated drafts are not automatically promoted. A class only becomes public source after review, smoke coverage where practical, and reproducibility checks against the generator output. This keeps broad wrapper growth auditable instead of relying on one-off manual wrappers.
Summary¶
| Metric | Count |
|---|---|
| API classes | 1036 |
| Classes with generated output | 844 |
| Classes with complete method generation | 735 |
| Methods generated | 15265/16822 (90.7%) |
| Methods skipped | 1557 |
| Properties generated | 3657/4162 (87.9%) |
| Signals generated | 503/503 (100.0%) |
Skip Categories¶
| Category | Skipped Methods |
|---|---|
| Virtual/internal | 1437 |
| Other | 49 |
| Missing helper shape | 23 |
| Array / typed array | 12 |
| Dictionary | 11 |
| Variant | 9 |
| Packed array | 8 |
| Blocked object wrapper | 8 |
Missing Helper Shapes¶
These are the highest-leverage ptrcall helper shapes to add next, excluding broader data-type policy work.
| Shape | Count |
|---|---|
args=('Dictionary',) return=Array |
8 |
args=('Dictionary',) return=Variant |
6 |
args=('Dictionary',) return=Dictionary |
2 |
args=('AABB',) return=TypedVector3iArray |
2 |
args=('RID', 'TypedObjectArray::OpenXRSpatialComponentData', 'Object', 'Object') return=void |
2 |
args=('String', 'bitfield', 'int64') return=enum |
2 |
args=('RID', 'bool', 'bool', 'bool', 'Color') return=void |
1 |
args=('Object', 'float', 'int32', 'StringName') return=void |
1 |
args=('Object', 'Vector2', 'int32', 'StringName') return=void |
1 |
args=('uint32',) return=Vector2 |
1 |
args=('uint32', 'Vector2') return=void |
1 |
args=('int32', 'int32', 'enum', 'Color', 'bool') return=void |
1 |
args=('Rect2i', 'Object', 'Color', 'int32', 'Object') return=void |
1 |
args=('Rect2i', 'TypedObjectArray::Texture2D', 'TypedObjectArray::DrawableTexture2D', 'Color', 'int32', 'Object') return=void |
1 |
args=('Object', 'bool', 'String', 'bitfield', 'bool') return=enum |
1 |
args=('Dictionary', 'int32', 'float', 'Transform2D', 'int32', 'int32', 'int32', 'int32', 'float', 'int64', 'PackedColorArray') return=RID |
1 |
args=('int64',) return=PackedColorArray |
1 |
args=('String', 'Variant', 'int32') return=void |
1 |
args=('Object', 'String', 'PackedStringArray') return=void |
1 |
args=('Vector3i',) return=TypedVector3iArray |
1 |
args=('Vector3i', 'int32') return=TypedVector3iArray |
1 |
args=('Vector3i',) return=Vector3i |
1 |
args=('String', 'bool', 'bool', 'float') return=enum |
1 |
args=('bool', 'bool', 'float') return=PackedByteArray |
1 |
args=('TypedObjectArray::ImporterMesh', 'TypedTransform3DArray', 'bool') return=Object |
1 |
Top Skip Reasons¶
| Reason | Count |
|---|---|
internal/virtual callback methods are not emitted as public wrappers |
1437 |
root Object methods are exposed through the hand-shaped GodotObject policy |
49 |
unsupported helper shape args=('Dictionary',) return=Array |
8 |
unsupported helper shape args=('Dictionary',) return=Variant |
6 |
object argument wrapper Callable is ownership/builtin-sensitive and must stay unsupported |
6 |
unsupported helper shape args=('Dictionary',) return=Dictionary |
2 |
unsupported helper shape args=('AABB',) return=TypedVector3iArray |
2 |
unsupported helper shape args=('RID', 'TypedObjectArray::OpenXRSpatialComponentData', 'Object', 'Object') return=void |
2 |
ownership-sensitive RefCounted lifetime method is hand-shaped |
2 |
unsupported helper shape args=('String', 'bitfield', 'int64') return=enum |
2 |
unsupported helper shape args=('RID', 'bool', 'bool', 'bool', 'Color') return=void |
1 |
unsupported helper shape args=('Object', 'float', 'int32', 'StringName') return=void |
1 |
unsupported helper shape args=('Object', 'Vector2', 'int32', 'StringName') return=void |
1 |
unsupported helper shape args=('uint32',) return=Vector2 |
1 |
unsupported helper shape args=('uint32', 'Vector2') return=void |
1 |
unsupported helper shape args=('int32', 'int32', 'enum', 'Color', 'bool') return=void |
1 |
unsupported helper shape args=('Rect2i', 'Object', 'Color', 'int32', 'Object') return=void |
1 |
unsupported helper shape args=('Rect2i', 'TypedObjectArray::Texture2D', 'TypedObjectArray::DrawableTexture2D', 'Color', 'int32', 'Object') return=void |
1 |
unsupported helper shape args=('Object', 'bool', 'String', 'bitfield', 'bool') return=enum |
1 |
unsupported helper shape args=('Dictionary', 'int32', 'float', 'Transform2D', 'int32', 'int32', 'int32', 'int32', 'float', 'int64', 'PackedColorArray') return=RID |
1 |
unsupported helper shape args=('int64',) return=PackedColorArray |
1 |
unsupported helper shape args=('String', 'Variant', 'int32') return=void |
1 |
unsupported helper shape args=('Object', 'String', 'PackedStringArray') return=void |
1 |
unsupported helper shape args=('Vector3i',) return=TypedVector3iArray |
1 |
unsupported helper shape args=('Vector3i', 'int32') return=TypedVector3iArray |
1 |
Complete Method Classes¶
These classes have every method covered by the conservative generator. Promotion remains a deliberate API review step.
| Class | Methods | Properties | Signals |
|---|---|---|---|
| DisplayServer | 287/287 | 0/0 | 1/1 |
| Environment | 188/188 | 93/93 | 0/0 |
| PhysicsServer3D | 175/175 | 0/0 | 0/0 |
| NavigationServer3D | 154/154 | 0/0 | 3/3 |
| BaseMaterial3D | 154/154 | 74/131 | 0/0 |
| NavigationServer2D | 137/137 | 0/0 | 3/3 |
| Viewport | 130/130 | 46/50 | 2/2 |
| TreeItem | 125/125 | 4/4 | 0/0 |
| ParticleProcessMaterial | 116/116 | 53/124 | 1/1 |
| FontFile | 106/106 | 17/22 | 0/0 |
| PopupMenu | 102/102 | 14/14 | 4/4 |
| LineEdit | 97/97 | 36/36 | 4/4 |
| TileSet | 90/90 | 5/5 | 0/0 |
| CPUParticles3D | 90/90 | 39/77 | 1/1 |
| NavigationAgent3D | 86/86 | 33/33 | 6/6 |
| ItemList | 85/85 | 18/18 | 5/5 |
| Animation | 85/85 | 4/4 | 0/0 |
| SpringBoneSimulator3D | 83/83 | 3/3 | 0/0 |
| OS | 83/83 | 3/3 | 0/0 |
| NavigationAgent2D | 80/80 | 30/30 | 6/6 |
| Input | 77/77 | 5/5 | 1/1 |
| CPUParticles2D | 77/77 | 33/69 | 1/1 |
| Tree | 72/72 | 16/16 | 15/15 |
| Node3D | 71/71 | 17/17 | 1/1 |
| GLTFState | 71/71 | 31/31 | 0/0 |
| EditorInterface | 71/71 | 2/2 | 0/0 |
| Theme | 69/69 | 3/3 | 0/0 |
| FileAccess | 68/68 | 1/1 | 0/0 |
| LookAtModifier3D | 63/63 | 30/30 | 0/0 |
| GPUParticles3D | 63/63 | 28/32 | 1/1 |
| TextParagraph | 62/62 | 13/13 | 0/0 |
| Label3D | 61/61 | 29/33 | 0/0 |
| TabBar | 60/60 | 14/14 | 8/8 |
| NavigationMesh | 58/58 | 25/26 | 0/0 |
| GPUParticles2D | 57/57 | 26/26 | 1/1 |
| AudioServer | 57/57 | 4/4 | 2/2 |
| Skeleton3D | 56/56 | 4/4 | 6/6 |
| TileData | 54/54 | 11/11 | 1/1 |
| AnimationPlayer | 54/54 | 12/12 | 2/2 |
| Camera2D | 52/52 | 20/28 | 0/0 |
| TabContainer | 51/51 | 12/12 | 7/7 |
| OpenXRAPIExtension | 51/51 | 0/0 | 0/0 |
| PhysicsDirectBodyState3D | 50/50 | 16/16 | 0/0 |
| FileDialog | 50/50 | 13/22 | 4/4 |
| AudioStreamPlayer3D | 50/50 | 22/22 | 1/1 |
| Area3D | 50/50 | 22/22 | 8/8 |
| Label | 49/49 | 22/22 | 0/0 |
| CharacterBody3D | 49/49 | 15/15 | 0/0 |
| Camera3D | 49/49 | 15/15 | 0/0 |
| PhysicsDirectBodyState2D | 48/48 | 14/14 | 0/0 |
Near Ready Classes¶
| Class | Methods | Properties | Signals | Skips |
|---|---|---|---|---|
| RenderingServer | 532/535 (99.4%) | 1/1 | 2/2 | 3 |
| Window | 133/134 (99.3%) | 28/41 | 16/16 | 1 |
| TextServer | 242/244 (99.2%) | 0/0 | 0/0 | 2 |
| PhysicsServer2D | 118/119 (99.2%) | 0/0 | 0/0 | 1 |
| CanvasItem | 93/94 (98.9%) | 16/16 | 4/4 | 1 |
| AccessibilityServer | 74/75 (98.7%) | 0/0 | 0/0 | 1 |
| RichTextLabel | 136/138 (98.6%) | 30/30 | 4/4 | 2 |
| NativeMenu | 68/69 (98.6%) | 0/0 | 0/0 | 1 |
| RigidBody3D | 59/60 (98.3%) | 23/23 | 5/5 | 1 |
| RigidBody2D | 58/59 (98.3%) | 23/23 | 5/5 | 1 |
| GraphNode | 42/43 (97.7%) | 3/3 | 2/2 | 1 |
| TextEdit | 249/255 (97.6%) | 47/47 | 7/7 | 6 |
| AnimationMixer | 40/41 (97.6%) | 10/10 | 7/7 | 1 |
| CodeEdit | 114/117 (97.4%) | 22/22 | 5/5 | 3 |
| Image | 74/76 (97.4%) | 0/1 | 0/0 | 2 |
| PhysicalBone3D | 37/38 (97.4%) | 16/16 | 0/0 | 1 |
| AnimationNodeBlendSpace2D | 34/35 (97.1%) | 10/11 | 1/1 | 1 |
| TileMap | 61/63 (96.8%) | 5/5 | 1/1 | 2 |
| Tween | 27/28 (96.4%) | 0/0 | 3/3 | 1 |
| AnimationNodeBlendSpace1D | 26/27 (96.3%) | 8/8 | 0/0 | 1 |
| EditorExportPlatform | 26/27 (96.3%) | 0/0 | 0/0 | 1 |
| OpenXRSpatialEntityExtension | 25/26 (96.2%) | 0/0 | 1/1 | 1 |
| ImporterMesh | 24/25 (96.0%) | 0/0 | 0/0 | 1 |
| Range | 23/24 (95.8%) | 10/10 | 2/2 | 1 |
| SpriteFrames | 19/20 (95.0%) | 0/1 | 0/0 | 1 |
| GraphEdit | 75/79 (94.9%) | 25/25 | 19/19 | 4 |
| TileMapLayer | 55/58 (94.8%) | 13/13 | 1/1 | 3 |
| EditorProperty | 35/37 (94.6%) | 12/12 | 13/13 | 2 |
| Font | 35/37 (94.6%) | 1/1 | 0/0 | 2 |
| AStarGrid2D | 33/35 (94.3%) | 9/9 | 0/0 | 2 |
| RenderingDevice | 127/135 (94.1%) | 0/0 | 0/0 | 8 |
| CompositorEffect | 14/15 (93.3%) | 7/7 | 0/0 | 1 |
| Control | 181/195 (92.8%) | 49/63 | 10/10 | 14 |
| PrimitiveMesh | 12/13 (92.3%) | 5/5 | 0/0 | 1 |
| VisualInstance3D | 12/13 (92.3%) | 3/3 | 0/0 | 1 |
| BaseButton | 23/25 (92.0%) | 10/10 | 4/4 | 2 |
| CollisionObject3D | 32/35 (91.4%) | 6/6 | 3/3 | 3 |
| GridMap | 51/56 (91.1%) | 13/13 | 2/2 | 5 |
| Node | 121/133 (91.0%) | 14/14 | 11/11 | 12 |
| EditorDock | 27/30 (90.0%) | 12/12 | 2/2 | 3 |
| AStar2D | 25/28 (89.3%) | 1/1 | 0/0 | 3 |
| AStar3D | 25/28 (89.3%) | 1/1 | 0/0 | 3 |
| GDScriptWorkspace | 7/8 (87.5%) | 0/0 | 0/0 | 1 |
| Translation | 12/14 (85.7%) | 2/3 | 0/0 | 2 |
| SubViewportContainer | 6/7 (85.7%) | 3/3 | 0/0 | 1 |
| Resource | 22/26 (84.6%) | 4/4 | 2/2 | 4 |
| EditorResourcePicker | 10/12 (83.3%) | 4/4 | 2/2 | 2 |
| CollisionObject2D | 34/41 (82.9%) | 5/5 | 5/5 | 7 |
| CameraFeed | 17/21 (81.0%) | 3/3 | 2/2 | 4 |
| EditorContextMenuPlugin | 4/5 (80.0%) | 0/0 | 0/0 | 1 |
Largest Generated Drafts¶
| Class | Methods | Properties | Signals | Skips |
|---|---|---|---|---|
| RenderingServer | 532/535 | 1/1 | 2/2 | 3 |
| DisplayServer | 287/287 | 0/0 | 1/1 | 0 |
| TextEdit | 249/255 | 47/47 | 7/7 | 6 |
| TextServer | 242/244 | 0/0 | 0/0 | 2 |
| Environment | 188/188 | 93/93 | 0/0 | 0 |
| Control | 181/195 | 49/63 | 10/10 | 14 |
| PhysicsServer3D | 175/175 | 0/0 | 0/0 | 0 |
| BaseMaterial3D | 154/154 | 74/131 | 0/0 | 0 |
| NavigationServer3D | 154/154 | 0/0 | 3/3 | 0 |
| NavigationServer2D | 137/137 | 0/0 | 3/3 | 0 |
| RichTextLabel | 136/138 | 30/30 | 4/4 | 2 |
| Window | 133/134 | 28/41 | 16/16 | 1 |
| Viewport | 130/130 | 46/50 | 2/2 | 0 |
| RenderingDevice | 127/135 | 0/0 | 0/0 | 8 |
| TreeItem | 125/125 | 4/4 | 0/0 | 0 |
| Node | 121/133 | 14/14 | 11/11 | 12 |
| PhysicsServer2D | 118/119 | 0/0 | 0/0 | 1 |
| ParticleProcessMaterial | 116/116 | 53/124 | 1/1 | 0 |
| CodeEdit | 114/117 | 22/22 | 5/5 | 3 |
| FontFile | 106/106 | 17/22 | 0/0 | 0 |