Plugin ABI
Long-lived plugins do not use the Rust ABI or a C++ class layout. Both break across compiler versions. The boundary is a stable C ABI. The full doctrine is ADR-0022 and ../api/plugins.md. This page is the short form.
The first slice of that idea is native/jarvig_core/include/jarvig_core.h: an opaque clock, and a headless runtime (jarvig_runtime_create, tick, shutdown, destroy). Profiles are integers. The server profile reports no render stage. That header is not the RHI and not the full plugin SDK. The RHI is in-process Rust in native/jarvig_rhi and does not cross this ABI yet.
Planned plugin kinds, none of which exist yet:
- native plugin
- engine subsystem
- editor panel (calls engine APIs, does not reimplement them)
- importer
- renderer extension, behind the RHI
- asset processor
- game module
- scripting module
An editor plugin that imports a material by itself is a bug. It calls the engine import API. The CLI calls that same API. See ADR-0018.
Do not pass raw engine object pointers across this boundary. Handles and explicit structs only.