# interoperability api needs to facilitate easy interoperability with other languages and tools, for that certain considerations are taken: * number of public api calls is kept at the minimum * procedure parameters can only use basic types, no aggregates, with exception of Vec/Matrix types and alike, with no expectation on new additions (see [/include/twn_types.h](../include/twn_types.h)) * optionals can be expressed via pointer passage of value primitives, assumed immutable, with the NULL expressing default * no opaque types, only keys * when mutation on input is done, - it shouldn't be achieved from a mutable pointer, but the return value * return value could be a simple aggregate that is translatable to pure data dictionary * module prefix is used for namespacing, actual symbols come after the prefix (`module_symbol`) * symbols should not contain letters at the start nor after the namespace prefix * 32 bit floating point is the only numeric type * [/include/twn_api.json](../include/twn_api.json) file is hand-kept with a schema to aid automatic binding generation and tooling