# appctl-plugin-sdk

Stable schema types and a C ABI for building dynamic plugins that extend the
[`appctl`](https://crates.io/crates/appctl) CLI.

Plugins are shipped as `cdylib`s and dropped into `~/.appctl/plugins/`. The
`appctl` host loads them with `libloading`, validates the ABI version, and
invokes the plugin's `introspect` function to obtain a normalized
[`Schema`].

## Example

```rust
use appctl_plugin_sdk::prelude::*;

fn introspect(_input: SyncInput) -> anyhow::Result<Schema> {
    let mut schema = Schema::new("airtable");
    schema.resources.push(Resource::new("record"));
    Ok(schema)
}

appctl_plugin_sdk::declare_plugin! {
    name: "airtable",
    version: "0.1.0",
    introspect,
}
```

Build with `crate-type = ["cdylib"]` and install with:

```bash
appctl plugin install ./target/release/libappctl_airtable.dylib
```

## License

MIT — see [`LICENSE`](https://github.com/Esubaalew/appctl/blob/main/LICENSE).
