For some of the applications I'm doing I want there to be a plugin API that people can use to expand them and it's also something I'm using myself for proper dog fooding. The issue is that I really can't settle on how to do it.
Talking about APIs here it's all about native code which has to be C compatible.
If we are talking strictly about C APIs one way to do this is to have everything passed as versioned structs to the plugin. Let me give an example.