Skip to content

Getting Started with SLIM

Installation

SLIM is composed of multiple components, each with its own installation instructions. Choose the components you need based on your use case.

SLIM Node

The SLIM Node is the core component that handles messaging operations.

You can install the SLIM Node using Docker, Cargo, Helm, or the CLI binary. Choose the method that best fits your infrastructure.

Pull the SLIM container image and run it with a configuration file:

docker pull ghcr.io/agntcy/slim:1.0.0

Create a configuration file:

# config.yaml
tracing:
  log_level: info
  display_thread_names: true
  display_thread_ids: true

runtime:
  n_cores: 0
  thread_name: "slim-data-plane"
  drain_timeout: 10s

services:
  slim/0:
    dataplane:
      servers:
        - endpoint: "0.0.0.0:46357"
          tls:
            insecure: true

      clients: []

Run the container:

docker run -it \
    -v ./config.yaml:/config.yaml -p 46357:46357 \
    ghcr.io/agntcy/slim:1.0.0 /slim --config /config.yaml

Install SLIM using Rust's package manager:

RUSTFLAGS="--cfg mls_build_async" cargo install agntcy-slim

Create a configuration file:

# config.yaml
tracing:
  log_level: info
  display_thread_names: true
  display_thread_ids: true

runtime:
  n_cores: 0
  thread_name: "slim-data-plane"
  drain_timeout: 10s

services:
  slim/0:
    dataplane:
      servers:
        - endpoint: "0.0.0.0:46357"
          tls:
            insecure: true

      clients: []

Run SLIM:

~/.cargo/bin/slim --config ./config.yaml

For Kubernetes deployments, use the official Helm chart:

helm pull oci://ghcr.io/agntcy/slim/helm/slim --version v1.0.0

Configuration

For detailed configuration options, see the values.yaml in the repository.

For local development and testing, use the slimctl binary.

Install the slimctl binary following the instructions below.

Run with default settings:

slimctl slim start

Create a configuration file:

# config.yaml
tracing:
  log_level: info
  display_thread_names: true
  display_thread_ids: true

runtime:
  n_cores: 0
  thread_name: "slim-data-plane"
  drain_timeout: 10s

services:
  slim/0:
    dataplane:
      servers:
        - endpoint: "0.0.0.0:46357"
          tls:
            insecure: true

      clients: []

Start SLIM with the configuration:

slimctl slim start --config ./config.yaml

For more configuration options, see the SLIM Configuration reference.

SLIM Controller

The SLIM Controller manages SLIM Nodes and provides a user-friendly interface for configuration.

Pull the controller image:

docker pull ghcr.io/agntcy/slim/control-plane:1.0.0

Create a configuration file:

# slim-control-plane.yaml
northbound:
  httpHost: 0.0.0.0
  httpPort: 50051
  logging:
    level: INFO

southbound:
  httpHost: 0.0.0.0
  httpPort: 50052
  logging:
    level: INFO

reconciler:
  maxRequeues: 15
  maxNumOfParallelReconciles: 1000

logging:
  level: INFO

database:
  filePath: /db/controlplane.db

Run the controller:

docker run -it \
    -v ./slim-control-plane.yaml:/config.yaml -v .:/db \
    -p 50051:50051 -p 50052:50052                      \
    ghcr.io/agntcy/slim/control-plane:1.0.0           \
    -config /config.yaml

For Kubernetes deployments:

helm pull oci://ghcr.io/agntcy/slim/helm/slim-control-plane --version v1.0.0

SLIM Bindings

Language bindings allow you to integrate SLIM with your applications.

Install using pip:

pip install slim-bindings

Or add to your pyproject.toml:

[project]
# ...
dependencies = ["slim-bindings~=1.0"]

For more information on the SLIM bindings, see the Messaging Layer Tutorial and the Python Examples.

Install the Go bindings:

go get github.com/agntcy/slim-bindings-go@v1.0.0

Run the setup tool to install native libraries:

go run github.com/agntcy/slim-bindings-go/cmd/slim-bindings-setup

Add to your go.mod:

require github.com/agntcy/slim-bindings-go v1.0.0

C Compiler Required

The Go bindings use native libraries via CGO, so you'll need a C compiler installed on your system.

For more information on the Go bindings, see the Go Examples.

Add the Kotlin bindings to your Gradle project:

Add to your build.gradle.kts:

dependencies {
    implementation("io.agntcy.slim:slim-bindings-kotlin:1.2.0")
}

mavenCentral() is the default repository in Gradle, so no additional repository configuration is needed.

Add the GitHub Packages repository and dependency to your build.gradle.kts:

repositories {
    maven {
        url = uri("https://maven.pkg.github.com/agntcy/slim")
        credentials {
            username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
            password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
        }
    }
}
dependencies {
    implementation("io.agntcy.slim:slim-bindings-kotlin:1.2.0")
}

GitHub Token Required

To use GitHub Packages, you need a personal access token with read:packages scope. Set GITHUB_ACTOR (your username) and GITHUB_TOKEN (your token) as environment variables, or use gpr.user and gpr.key in gradle.properties.

JDK 17+ Required

The Kotlin bindings use JNA for native library loading and require JDK 17 or higher.

For more information on the Kotlin bindings, see the Kotlin Examples.

Slimctl

slimctl is a command-line tool for managing SLIM Nodes and Controllers.

Installation

Choose your platform:

curl -LO https://github.com/agntcy/slim/releases/download/slimctl-v1.0.0/slimctl_1.0.0_darwin_arm64.tar.gz
tar -xzf slimctl_1.0.0_darwin_arm64.tar.gz
sudo mv slimctl /usr/local/bin/slimctl
sudo chmod +x /usr/local/bin/slimctl

macOS Security

You may need to allow the binary to run if blocked by Gatekeeper:

sudo xattr -rd com.apple.quarantine /usr/local/bin/slimctl

Alternatively, go to System Settings > Privacy & Security and allow the application when prompted.

curl -LO https://github.com/agntcy/slim/releases/download/slimctl-v1.0.0/slimctl_1.0.0_darwin_amd64.tar.gz
tar -xzf slimctl_1.0.0_darwin_amd64.tar.gz
sudo mv slimctl /usr/local/bin/slimctl
sudo chmod +x /usr/local/bin/slimctl
curl -LO https://github.com/agntcy/slim/releases/download/slimctl-v1.0.0/slimctl_1.0.0_linux_amd64.tar.gz
tar -xzf slimctl_1.0.0_linux_amd64.tar.gz
sudo mv slimctl /usr/local/bin/slimctl
sudo chmod +x /usr/local/bin/slimctl

Download and extract the Windows binary:

# Using PowerShell
Invoke-WebRequest -Uri "https://github.com/agntcy/slim/releases/download/slimctl-v1.0.0/slimctl_1.0.0_windows_amd64.zip" -OutFile "slimctl.zip"
Expand-Archive -Path "slimctl.zip" -DestinationPath "."

# Move to a directory in your PATH (e.g., C:\Program Files\slimctl\)
# Or add the current directory to your PATH

Alternatively, download directly from the releases page.

Check the slimctl documentation for additional installation methods.

Verification

Verify the installation:

slimctl help

This should display help information and available commands.

Building from Source

You can build SLIM from source.

Prerequisites

Install the following tools on your system:

Building SLIM

Once all prerequisites are installed, clone the repository and build the components:

# Clone the SLIM repository
git clone https://github.com/agntcy/slim
cd slim

# Build the data plane (Rust)
task data-plane:build

# Build the control plane (Go)
task control-plane:build

# Build both components
task build

For more information on the build system and development workflow, see the SLIM repository.

Next Steps

You've installed SLIM! Here's what to do next:

  1. Read the messaging layer documentation
  2. Explore the example applications
  3. Learn about configuration options
  4. Join us on Slack

Need Help?

If you get stuck, check the detailed documentation, ask questions in our community forums, or report issues on GitHub.