Native interface JSON and C header
Verified dump commands, data structure and ABI verification limits.
These files are for native binding and code-generator authors. Ordinary C# game logic uses the managed SDK and its reference; interface JSON is not a C# library.
Obtain data from the intended build
Open PowerShell in a separate project working directory: the commands write to the current directory and can replace files with the same names. Set editor to the installed editor executable that provides these tools.
$editor = "C:\Tools\Reckfell\Reckfell Engine.console.exe"
& $editor --headless --path . --dump-reckfellextension-interface-json --dump-reckfellextension-interface --dump-extension-apiExpect three files:
| File | Contents |
|---|---|
| reckfellextension_interface.json | Low-level C types and interface functions |
| reckfellextension_interface.h | C header for the same interface |
| extension_api.json | Classes, methods, built-in types and metadata for bindings |
Use a set from one target binary. Product version 1.0.0 alone does not identify a specific build: retain hashes of the executable and generated data. Successful commands and existing JSON do not prove every ABI call correct.
Interface JSON structure
Top-level fields include format_version, $schema, types and interface. _copyright contains original copyright and license information; preserve it when distributing derived files.
format_version describes the JSON format, not the engine version or an ABI package. It is 1 in the checked dump. $schema points to ./reckfellextension_interface.schema.json; dumping the interface does not create that schema file beside it. Full validation needs the matching local schema, not merely parseable JSON.
| kind in types | What a generator must preserve |
|---|---|
| enum | Names and numerical values; is_bitfield distinguishes flag masks |
| handle | Opaque pointer, const/uninitialized markers and parent relationship |
| alias | Specified underlying C type and modifiers |
| struct | Field order, C alignment and sizes for the target ABI |
| function | Return type and ordered argument types of a function pointer |
A function argument’s type is needed for generation; its name may be absent. A generator must be able to create a local parameter name. Missing return_value means no return value rather than an unknown type.
Do not treat every handle as an owning object or every pointer as an initialized value: honor const, uninitialized and each function’s contract. size_t and pointers depend on architecture. char, char16_t, char32_t and wchar_t are not interchangeable; lengths and encoding depend on the specific function.
Resolving function addresses
The interface array lists functions available through ReckfellExtensionInterfaceGetProcAddress. Resolve exact dump names and check missing addresses before calling. Pointer signature, argument order and calling convention must match the target build’s header.
since and deprecated describe interface history; they do not replace product version or function-presence checks. The replacement key inside deprecated is replace_with, not replacement. Do not translate or cosmetically rename identifiers, numerical enum values or function names.
extension_api.json serves a different purpose: high-level class/method metadata. Its header contains product version and precision. Generating class calls requires both data levels; a C-function list alone does not describe the complete class API.
Observed verification limits
The installed editor produced all three files, but class-API dumping emitted 17 mapped to non-existent hash warnings from the hash-mapping table. They are retained in the technical report and have not been fixed in the engine. An existing dump does not establish that table or every native call is healthy.
For this diagnostic, check build/SDK consistency, the specific required method and a native call test. Do not treat suppressed warnings as proof of success or manually rewrite hashes in generated JSON.
Actual commands, selected fields and current dump names were checked. This does not establish full JSON Schema validation, third-party binding generation, every struct’s layout or all platforms.
Continue with extension descriptors, a working native build.