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 (internal, not published) |
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 |
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 the hand-written, UniFFI-annotated Rust source that defines the FFI surface for SLIM. 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 itself depends on the published SLIM core crates from crates.io (agntcy-slim, agntcy-slim-datapath, agntcy-slim-session, etc.), which are produced from the agntcy/slim repository.
- 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 bindings:build
# Build any specific binding (example: Python)
cd python && task bindings:buildSee the README in each binding directory for language-specific instructions.
The Rust binding is released to crates.io via release-plz. Language bindings are released through their respective CI workflows on tag push (slim-bindings-v*).
Distributed under Apache 2.0 License. See LICENSE for more information.
Copyright AGNTCY Contributors (https://github.com/agntcy)