Skip to content

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