# stdiobus-backend-native
[](https://crates.io/crates/stdiobus-backend-native)
[](LICENSE)
Native FFI backend for stdio_bus - direct C library integration.
This crate provides a native backend that links directly to `libstdio_bus.a` via FFI. It offers the best performance but requires building the C library.
## Installation
```toml
[dependencies]
stdiobus-backend-native = "1.0"
```
## Prerequisites
Build `libstdio_bus.a` from the main repository:
```bash
git clone https://github.com/stdiobus/stdiobus-rust
cd stdiobus-rust
make lib
export STDIO_BUS_LIB_DIR=$(pwd)/build
```
## Usage
Most users should use `stdiobus-client` with the `native` feature:
```rust
use stdiobus_client::{StdioBus, BusConfig, PoolConfig};
let bus = StdioBus::builder()
.config(BusConfig {
pools: vec![PoolConfig {
id: "worker".into(),
command: "node".into(),
args: vec!["./worker.js".into()],
instances: 2,
}],
limits: None,
})
.backend_native()
.build()?;
```
## Direct Usage
```rust
use stdiobus_backend_native::NativeBackend;
use stdiobus_core::{BusConfig, PoolConfig, ConfigSource};
// From programmatic config (no file needed)
let config = BusConfig {
pools: vec![PoolConfig {
id: "worker".into(),
command: "node".into(),
args: vec!["./worker.js".into()],
instances: 2,
}],
limits: None,
};
let backend = NativeBackend::from_config_source(&ConfigSource::Config(config))?;
// From file path
let backend = NativeBackend::new("./config.json")?;
backend.start().await?;
```
## Platform Support
| Linux x64/arm64 | ✓ |
| macOS x64/arm64 | ✓ |
| Windows | ✘ (use Docker backend) |
## License
Apache-2.0