zula-core is the core module of the zula shell.
zula-core
contains the core functionality of the zula shell, and is required for writing
plugins. This api is experimental, and may introduce breaking changes.
To create a plugin, first initialize a library crate.
bash
cargo new my_plugin --lib
Set the crate type to cdylib
, and add zula-core
as a dependency.
```toml
[lib]
crate-type = ["cdylib"]
[dependencies]
zula-core = "3.0.0"
Import the [`Plugin`] trait and implement it on your plugin type.
rust
use zula-core::{Plugin, ShellState};
pub struct MyPlugin;
impl Plugin for MyPlugin {
//since this function is called across abi boundaries, its important to include nomangle so
//that rustc leaves the symbol as-is and can be called properly.
#[nomangle]
fn init(&self) -> Box
Run
cargo build --releaseto build your plugin. The library file should be in
target/release/lib
Thats it! Run zula cfg
inside zula to check that its loaded, and run plugin.<name>
to use it. Due to weird ownership relationships, call
has to take a raw pointer, so use it responsibly.