# scarab-plugin-api
Plugin API for the [Scarab](https://github.com/raibid-labs/scarab) terminal
emulator. Defines the `Plugin` trait, manifest schema, host bindings, and
shared types that 3rd-party plugins build against.
> **Status: pre-1.0.** The API surface is in active development; expect
> breaking changes between 0.x minor versions until 1.0.
## What this crate provides
- The `Plugin` trait (lifecycle hooks: `on_load`, `on_output`, `on_input`,
`on_remote_command`, …).
- `PluginManifest` schema with `Capability` and `FusabiModule` declarations.
- `HostBindings` — ECS-safe bindings with capability checks, quotas, and
rate-limiting that plugins use to talk back to the host.
- Shared types: `MenuItem`, `RenderItem`, `KeyTable`, `FocusableRegion`, etc.
Plugins themselves are typically authored in [Fusabi](https://github.com/fusabi-lang/fusabi)
(`.fsx` source for hot-reloadable client UI scripts; `.fzb` compiled bytecode
for daemon-side hooks). Native Rust plugins are also possible by implementing
the `Plugin` trait directly when the host loader supports them.
## Versioning
Tracks the Scarab workspace version. The `API_VERSION` constant in `lib.rs`
is the version plugin manifests check against for compatibility.
## License
Dual-licensed under either:
- Apache License, Version 2.0 ([LICENSE-APACHE](../../LICENSE-APACHE))
- MIT License ([LICENSE-MIT](../../LICENSE-MIT))
at your option.