Language bindings for SLIM (Secure Low-Latency Interactive Messaging), built on top of UniFFI.
This repository hosts the Rust FFI adapter crate and the per-language wrappers that expose the SLIM data plane to applications written in Python, Go, .NET, Java, Kotlin, Node.js, and React Native.
| Directory | Language | Distribution |
|---|---|---|
rust/ |
Rust (UniFFI cdylib; aggregates slim's FFI crates) | agntcy-slim-bindings-ffi on crates.io |
python/ |
Python | slim-bindings on PyPI |
go/ |
Go (hand-written idiomatic wrappers + setup CLI) | Published to agntcy/slim-bindings-go by CI; consumed via go get github.com/agntcy/slim-bindings-go/v3 |
dotnet/ |
.NET / C# | Agntcy.Slim NuGet package |
java/ |
Java | Maven Central |
kotlin/ |
Kotlin | Maven Central |
node/ |
Node.js | @agntcy/slim-bindings on npm |
react-native/ |
React Native + browser/WebAssembly | @agntcy/slim-bindings-react-native on npm |
The rust/ directory contains agntcy-slim-bindings-ffi, a thin cdylib that re-exports the UniFFI scaffolding of two crates published from agntcy/slim: agntcy-slim-bindings (crates/slim-bindings, the core FFI surface) and agntcy-slim-rpc (crates/rpc, slimrpc). The UniFFI-annotated Rust source that defines the FFI surface lives in those crates. Every other binding consists of:
- Code auto-generated by a UniFFI codegen tool (e.g.
uniffi-bindgen-go,uniffi-bindgenfor Python/Kotlin,uniffi-bindgen-csfor .NET) from the compiled Rust library. - Hand-written idiomatic wrappers (helpers, context-aware APIs, configuration, examples) maintained per-language.
The Rust binding pins exact versions of agntcy-slim-bindings and agntcy-slim-rpc in rust/Cargo.toml; the rest of the SLIM core crates come in transitively from crates.io.
- Taskfile for build orchestration
- Rust toolchain (for building the FFI library)
- Per-language toolchain for the binding you intend to work on (e.g. Python +
uv, Go, .NET, Java, Kotlin/Gradle, Node)
Each binding has its own Taskfile. From the repo root:
# List available tasks
task
# Build the Rust FFI library
(cd rust && task build)
# Build any specific binding (example: Python)
(cd python && task python:bindings:build)See the README in each binding directory for language-specific instructions.
All bindings are released together at the same version. Bumping the version in rust/Cargo.toml lets release-plz publish agntcy-slim-bindings-ffi to crates.io and push a slim-bindings-v* tag; that tag triggers release-bindings.yaml, which builds and publishes every language package. The slimrpc compiler (slimrpc-compiler/, crate agntcy-protoc-slimrpc-plugin) is released separately under protoc-slimrpc-plugin-v* tags.
Distributed under Apache 2.0 License. See LICENSE for more information.
Copyright AGNTCY Contributors (https://github.com/agntcy)