Skip to content

SLIM Bindings

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.

Layout

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

Architecture

The rust/ directory contains the hand-written, UniFFI-annotated Rust source that defines the FFI surface for SLIM. Every other binding consists of:

  1. Code auto-generated by a UniFFI codegen tool (e.g. uniffi-bindgen-go, uniffi-bindgen for Python/Kotlin, uniffi-bindgen-cs for .NET) from the compiled Rust library.
  2. 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.

Prerequisites

  • 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)

Building

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:build

See the README in each binding directory for language-specific instructions.

Releases

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*).

Community & Resources

License

Distributed under Apache 2.0 License. See LICENSE for more information.

Copyright AGNTCY Contributors (https://github.com/agntcy)

About

Secure Low-Latency Interactive Messaging Language Bindings

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages